变量

变量不过是保留的内存空间,定义一个变量变在内存里开辟了一块空间,其类型决定它 的大小和能赋值什么类型。

变量声明

scala的变量分为varval分别代表mutable variableimmutable variable

1
2
var myVar : String = "Foo"
val myVal : String = “Foo”

变量数据类型

变量的类型指定于变量名与等号=之间

1
var or val VariableName : DataType = [Initial Value]

也可以不指定初始值

1
2
var myVar :Int;
val myVal :String;

Read More

overview

生产力、扩展性和可靠性

  • 面向对象的: 所有值都是对象;类型和行为由class和trait描述;可继承和混合重组(多继承的替代).
  • 函数式: 函数也是值/对象;轻量化的匿名函数定义;支持higher-order函数;嵌套函数;柯里函数;
  • 静态类型:但不需要提供冗余的类型信息
  • java良好的互操作性
  • 并发支持:良好的表达能力减少代码行数且类型安全,支持immutable方式从而使并发编程更容易。

scala vs java

  • 所有类型都是对象
  • 类型推断
  • 嵌套函数
  • 函数也是对象
  • SDL(Domain specific language)支持
  • trait
  • 闭包
  • Erlang式的并发支持

WEb框架

scala在WEB应用中使用广泛,以下是最流行的几个框架

  • The Lift Framework
  • The Play framework
  • The Bowler framework

    Read More

公司新上架了一批浪潮的服务器,型号为SA5212M4,使用了LSISAS3008 磁盘控制器,安装了CentOS 6.7,在进行一些基础配置如RAID hot spare的时候,走过不少弯路(浪潮的技术支持只能呵呵)。

IPMI

IPMI是什么?浏览一下介绍文档之后大概明白它解决的问题就是:怎么为远程机器配置BIOS,远程机器网络配置出错导致断网咋办…之类的问题。一句话:IPMI是一个独立于OS甚至BIOS之外的系统,它能管理电源、显示等底层甚至硬件层次的资源,但它也能与OS通信,比如你可以通过ipmitools来设置ipmi的一些参数。

ipmitool

ipmitool是一个允许你通过shell来使用ipmi的工具,其它安装过程为

1
2
3
yum install OpenIPMI OpenIPMI-tools
chkconfig ipmi on
service ipmi start

确认服务启动之后,你可以通过它来打印ipmi信息,管理ipmi的用户和密码等

Read More

从nginx 1.9开始,开源版中也有了tcp load balancing,为此投入了很多人力,这也是一个典型的商业软件开发支持开源产品的例子(此特性最早出现于nginx的商业版nginx plus)。

why tcp load balancing

nginx最初是一个反向代理,如今已经具有非常丰富的特性,web server, 缓存/加速,反向代理 , 应用网关。

Nginx一般用作繁忙网站的前端,44.9%的前10000最繁忙商业网站使用了nginx作为前端。

当你在内部使用nginx为应用实现代理和load balancing时,tcp load balancing将使你受益。现代应用使用各种协议而不只是http,nginx可用来处理这些内部流量,比如mysql load balancing就是一个好例子。

Read More

jumpserver

jumpserver也叫做跳板机,当多人需要对多个机器(集群)进行操作时,为了方便操作、安全、授权管理和审计,可以使用一台机器作为跳板机,所有用户必须也只能先登录此系统再跳转到其它资产。

安装

我们使用了一个国内团队开发的开发跳板机系统jumpserver。该系统安装简便且功能丰富。CentOS6具体的安装过程如下。

1
yum install git -y

下载工程文件

1
2
cd /opt
git clone https://github.com/jumpserver/jumpserver.git

不要安装到/root目录。

开始安装

1
2
cd jumpserver/install
python install.py

安装过程中会询问是否安装mysql,可视自己的情况选择yes or no, 并且要求输入数据库的user password等作息,注意此处输入的是Jumpserver使用的数据库和帐户信息,而不是root用户信息。也就是安装程序并不会创建数据库,需要自己在数据库中预先创建与填入信息相符的数据库。
登录数据库:

1
mysql -u root -p

输入密码进入:
创建数据库

1
create database jumpserver;

创建用户

1
grant all privileges on jumpserver.* to 'jumpserver'@`localhost' identified by 'password';

邮箱信息请自行填入和确认,也可以跳过。

Read More

Ad-Hoc可以理解为临时,一些临时场景只需运行一次的指令,可以用这种模式完成。

并行和shell

在特定时间重启atlanta的所有机器

1
ansible atlanta -a "/sbin/reboot" -f 10

如果想用sudo权限的话

1
ansible atlanta -a "/sbin/reboot" -f 10 -b -k

其中-k意为交互式地输入密码,-ffork出多个进程来并行

command模块(缺省)并不支持pipe,如果要用命重定向,请使用shell模块。

1
ansible raleigh -m shell -a 'echo $TERM'

当命令中含有引号时一定要特别注意,以免命令在本地被吃掉,比如以上命令如果不使用'而使用双引",那么变量变会在本地取值。

实际上大部分ansible模块都与简单地命令不同,它们都是指定状态而过过程,以达到“幂等”的效果,这是ansible的一个重要设计理念。

Read More

pattern

ansible的命令格式为

1
ansible <pattern_goes_here> -m <module_name> -a <arguments>


1
ansible webservers -m service -a "name=httpd state=restarted"

Pattern支持常用的通配符和部分正则表达式,来指定符合某种模式的主机集。
all*表示所有主机
也可以指定单个或多个或模糊匹配主机

1
2
3
one.example.com
one.example.com:two.example.com
192.168.1.*

也可以指定多个group,即属于任意一个即可,用:分隔。

1
webservers:dbservers

也可以排除某些主机,如属于webserver但不属于pheonix

1
webservers:!phoenix

还可以指定交集

Read More

对ansible来说,几乎每个yaml文件都以一个列表开头,而每一项则是一个key-value对。yaml文件可分别以---...来标识文件的开始和结束。

list

ymal列表项起始于同一缩进的-,注意空格不可省略。

1
2
3
4
5
6
7
8
---
# A list of tasty fruits
fruits:
- Apple
- Orange
- Strawberry
- Mango
...

dictionary

而字典则是以:分割,空格同样不可省略。

1
2
3
4
martin:
name: Martin D'vloper
job: Developer
skill: Elite

Read More

ansible同时和多种系统工作,它会选择inventory文件中的部分主机执行不同的操作,这个文件默认位于/etc/ansible/hosts。你也可以同时使用多个inventory或者动态地从云端pull

host and group

inventory文件的模式类似ini

1
2
3
4
5
6
7
8
9
10
mail.example.com
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com

方括号中是组名,同个主机可以位于多个组中,此时变量将来自所有其所属的组。如果ssh主机使用非默认的22端口,可以使用:将其指定于主机名之后badwolf.example.com:5309

如果是静态IP想取个别名,可使用以下的方式。

1
jumper ansible_port=5555 ansible_host=192.168.1.50

Read More

远程连接信息

了解ansible如何通过ssh与远程主机通信是很重要的。

ansible 1.3和之后版本会默认使用openssh,以支持ControlPersistKerberos~/.ssh/config配置。在一些较老的版本中,如RH/CentOS较早版本时,openssh版本可能太老而不支持部分以上特性,此时ansible会使用pythonOpenSSH实现paramiko。如果需要Kerberized ssh,建议使用ubuntufedoraopenssh版本较新的发行版。
而<=1.2的版本中,默认为paramiko,使用-c选项切换到nativessh.
有很小的可能会遇到不支持SFTP的情况,此时可以在配置文件中切换到SCP
与远程主机通信时,默认使用ssh key,也可以通过-k选项来使用密码,如果需要sudo特性且sudo要求密码时,可使用--ask-become-pass
也许是常识:控制主机离被控制集群越近,执行速度越快,因此尽量选用较近的主机。
ansible也并不一定要使用ssh,传输方式是插件式的,支持本地管理方式、chroot,lxcjail containers, ansible-pull模式能够按日程从中央git服务器中pull指令。

第一个命令

1
ansible all -m ping -u root -b

Read More