写在前面:

 更该主机名,方便识别。更为了其他的方便。本次采用两台服务器测试。master端也同样可以安装minion作为客户端被管理。如果后续有需求,可以多增加几台服务器,或者虚拟机做测试。千万别用线上服务器。万一出问题就麻烦了。业务就挂了

Saltstack(中国用户组www.saltstack.cn)

基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。

三种工作方式:  本地, c/s, 基于ssh(不用安装agent)

三大功能: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理

支持系统:大多数都支持,windows上不支持安装master

参考博客:http://daixuan.blog.51cto.com/5426657/1899160

实验主机:

centos6.7-4:  192.168.1.110 作为master端

centos6.7-3:  192.168.1.107   作为minion端

主机名最好更改一下:

master端:

vim /etc/sysconfig/network

HOSTNAME=master

vim /etc/hosts

192.168.1.110 master

minion端:

vim /etc/sysconfig/network

HOSTNAME=minion

vim /etc/hosts

192.168.1.107 minion

1.2.2 yum方式安装(采用epel源)

两台机器最好更改一下/etc/hosts地址 保证可以ping通

master端安装:

rpm  -ivh  https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum -y install salt-master //安装salt-master

service salt-master start //启动salt-master

ss -antlup | egrep "4505|4506" //查看端口  或者

ps -ef | grep salt-master

vim /etc/salt/master

auto_accept: True //可选,key通过‘salt-key -a keyname’命令手动进行认证

minon端安装:

rpm  -ivh  https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum -y install salt-minion //安装salt-minion

更改minion配置文件:

vim /etc/salt/minion

或者sed命令更改:

sed -i 's/#master: salt/master: 192.168.1.110/g' /etc/salt/minion //增加master主机的配置,把ip指向master的ip。如果配置成主机名的话,需要在/etc/hosts文件中master主机对应的IP ,如果使用内部DNS的例外,可以在内部DNS上的统一配置。

注意:192.168.1.110就是master服务器端的ip地址,master: 的后面有一个空格,空格后面才是ip地址,如果没有空格会提示出错 后面配置minion的ip也是一样有一个空格

没有空格出现错误,错误如下:

Starting salt-minion daemon: [ERROR ] Error parsing configuration file: /etc/salt/minion - while scanning a simple key

in "<string>", line 44, column 1:

id:host172

^

could not found expected ':'

in "<string>", line 46, column 1:

# Append a domain to a hostname ...

^

找到#id  改成

id: minion_192.168.1.102  //id后面这个名字可以自己取,最好别太复杂。这个ip是minion端的ip地址,为了方便,我就用minion加上minion端的ip来命名了

还可以改成minion然后用ip的最后一段,如 minion102这样

或者用sed更改 如下:

sed -i 's/#id:/id: minon_192.168.1.102/g' /etc/salt/minion

service salt-minion start //启动salt-minion

ss -antlu | egrep "4505|4506" //查看salt-minion端口

ps -ef | grep salt-minion

注意: ID如果不指定的话,salt通过socket.getfqdn()来获取主机的名称来作为标识,指定给ID,作为minion与master交互的身份标识

更改完salt-minion配置文件以后,一定要重启salt-minion,否则 在master端进行salt-key -A进行认证key的时候不能认证通过,会发现没有认证的key

netstat -antlp | grep 4505                         确保消息发布端口正常

netstat -antlp | grep 4506                         确保客户端与服务端通信端口正常

salt-master -l debug                             debug模式,查看salt都进行哪些操作

2. key认证

server上执行:

salt-key -a minion               #这里minion就是minion配置文件设置的id,-a指定具体的某一台minion客户端服务器

认证完后,此时我们在minion端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件

可以使用 salt-key 命令查看到已经签名的客户端

salt-key  可以使用-A签名所有主机,也可以使用-d删除指定主机的key

salt-key的使用实例:

更多证书管理方法  使用:salt-key --help  查看  下面会有列出

# 显示所有minion的认证信息

salt-key -L

# 接受192.168.0.100的认证信息   -a指定具体key

salt-key -a 192.168.0.100

# 接受192.168.0.100的认证信息,不需要手动验证

salt-key -a 192.168.0.100 -y

# 接受192.168.0.100的认证信息,即使该minion是Rejected Keys状态

salt-key -a 192.168.0.100 --include-all

# 接受所有 Unaccepted Keys 状态的minion的认证信息

salt-key -A  或者 salt-key -A -y

# 拒绝认证192.168.0.100

salt-key -d 192.168.0.100

# 拒绝所有 Unaccepted Keys 状态的minion

salt-key -D     #这样就删除了所有认证,最好不要做。但是删除了所有的认证以后,如果在此执行salt-key -A -L    会看到没有任何一个认证的key。 需要重启所有服务器上的minion,否则就会一直没有key被认证。

可以  salt-key  *  一下    # *号 代表所有

*************查看哪些服务器的minion挂了****************

salt-run manage.status

3.  远程执行

示例1: salt '*' test.ping    这里的*表示所以已经签名的客户端,也可以指定其中一个

示例2:  salt '*' cmd.run   'df -h'  

说明1: 这里的*必须是在master上已经被接受过的客户端,可以通过salt-key查到,通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端  web10  web11, 那我们可以写成  salt 'web*'    salt 'web1[02]'  salt -L 'web10,web11'   salt -E 'web(10|11) 等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持grains,加-G选项,后面会介绍到。

其他安装方式:

1.2.3 pip方式安装

master端安装:

pip install salt

mkdir  /etc/salt/;wget -O /etc/salt/master  https://github.com/saltstack/salt/blob/develop/conf/master

salt-master  -d

 

minion端安装:

pip  install  salt

mkdir  /etc/salt/;wget  -SO /etc/salt/minion  https://github.com/saltstack/salt/blob/develop/conf/minion

sed -i ‘s/#master: salt/master: IPADDRESS/g’/etc/salt/minion

#IPADDRESS是master服务器的ip地址

salt-minion  -d

 

1.2.4源码安装

master端安装:

git  clone  https://github.com/saltstack/salt.git

pip  install  -r  salt/requirements/zeromq.txt

mkdir  /etc/salt/; cp salt/conf/master  /etc/salt

salt-master  -d

 

minion端安装:

git  clone  https://github.com/saltstack/salt.git

pip  install  -r  salt/requirements/zeromq.txt

python  salt/setup.py  install

mkdir  /etc/salt/; cp  salt/minion  /etc/salt/ 

sed -i  ‘s/#master: salt/master: IPADDRESS/g’ /etc/salt/minion

注意:IPADDRESS为master的ip地址

由于saltstack软件依赖包比较多,我们不建议用源码编译安装每个依赖包的方式全装,所以这里采用pip安装方式去安装依赖包。如果想学编译安装,百度上有很多教程

 

 

1.2.5 salt-bootstrap安装

salt-bootstrap是saltstack的一个单独项目,该项目主要用于解决多平台意见不熟saltstack环境。核心工程就是维护一个庞大的bash脚本

master端安装:

curl -L https://bootstrap.saltstack.com  -o  install_salt.sh

sh  install_salt.sh  -M  -N       #只安装最新版master

minion端安装:

echo “IPADDRESS  salt” >> /etc/hosts     #IPADDRESS为master服务器的地址

curl  -L https://bootstrap.saltstack.com  -o  install_salt.sh

sh  install_salt.sh  -i minion             #只安装最新版minion并且指定minion  id

关于salt-bootstrap脚本参数可以运行  sh  install_salt.sh  -h 查看,改脚本也提供非常方便的一键部署参数

----------部署环境完成,本人用epel方式进行yum安装的--------

 

1.3.1 证书管理

[root@master ~]# salt-key  -L          //查看当前证书签证情况

Accepted Keys:  已接收的密钥

Denied Keys:      被决绝的密钥

Unaccepted Keys:     未接受的密钥

Rejected Keys:          被丢弃的密钥

 

[root@master ~]# salt-key -A –y              //同意签证所有没接收的签证请求

提示告诉我们:没有未签证的主机(因为我们只有一台master一台minion,minion接受签证了)

 

运行第一条saltstack命令,检测master和minion之间通信是否正常

salt '*' test.ping

更多证书管理命令可以通过salt-key  -h查看

 

-l    显示指定状态的key(支持正则表达式)

-L   显示所有public  keys

-a   接受制定等待恩正的key(支持正则表达式)

-A  接受所有等待认证的key

-r    拒绝等待认证的key(支持正则表达式)

-R   拒绝所有等到认证的key,

--include-all      显示所有状态的key(包含non-pending状态)

-p(小写的)    打印指定的public  key(支持正则表达式)

-P(大写的)    打印所有的public  key

-d   删除指定的key

-D  删除所有key

-f    显示指定的key指纹信息(支持正则表达式)

-F   现实所有key指纹信息

第一条测试命令:

salt 'minion_192.168.1.107' test.ping

1.3.2 日常命令参数

查看安装的时候分别安装了那些命令(yum安装方式)

[root@master ~]# rpm -ql salt-master

/etc/rc.d/init.d/salt-master          //salt-master服务启动脚本

/etc/salt/master                         //salt master配置文件

/usr/bin/salt                              //salt master核心操作命令

/usr/bin/salt-cp                        //salt  文件传输命令

/usr/bin/salt-key                     //salt  证书管理命令

/usr/bin/salt-master               //salt master服务命令

/usr/bin/salt-run                    //salt master runner命令

/usr/bin/salt-unity

………