Fork me on GitHub

自动化运维工具SaltStack安装使用教程

  系统自动化管理和配置工具SaltStack采用zeromq消息队列进行通信,和Puppet比起来,SaltStack速度快得多。目前SaltStack处于快速发展阶段,可以看做是强化的Func+弱化的Puppet的组合这也间接的反映出了SaltStack的两大功能:远程执行和配置管理。

SaltStack的安装配置

  和大多数类似工具一样,SaltStack是一个基于C/S的远程控制软件,需要在一台机器(主控)上安装服务端软件(salt-master),在需要被控制的机器(受控)上安装客户端软件(salt-minion)。受控机器可以有多台,但是主控机器只能有一台。当在主控机器上给受控机器发指令,在受控机器上执行主控机器发出的指令。
  说明:由于项目上的需要,salt-master安装在服务器上(172.17.20.140(Linux机器)),受控端安装了两台机器,一台是本机用作测试用,另一台安装在需要被调控的服务器上(192.168.5.252(Windows机器))

服务端salt-master的安装

  首先安装salt-master 运行所需要的依赖,因为SaltStack使用Python写的,所以必须系统必须安装Python环境。

1
2
3
$ yum install python-jinja2 -y
$ yum install m2cryto -y
$ wget http://pyyaml.org/download/libyaml/yaml-0.1.6.tar.gz

解压并安装yaml

1
2
3
4
$ tar zvxf  yaml-0.1.6.tar.gz
$ cd yaml-0.1.6
$ ./configure
$ make&&make install

导入yum源

1
$ rpm -Uvh http://mirror.pnl.gov/epel/6/i386/epel-release-6-8.noarch.rpm

安装salt-master

1
$ yum install salt-master -y

直接运行下列命令修改salt-master 配置

1
2
$ sed -i 's/#interface: 0.0.0.0/interface: 172.17.20.140/g' /etc/salt/master
$ sed -i 's/#hash_type: md5/hash_type: sha256/g' /etc/salt/master

  说明:上面第一条命令表示将/etc/salt/master中的’#interface: 0.0.0.0’替换为’interface: 172.17.20.140’。’/g’表示全部替换。第二条命令表示将/etc/salt/master中的’#hash_type: md5’替换为’hash_type: sha256’。同样’/g’表示全部替换。
修改完salt-master配置后使用命令启动

1
2
3
4
$ service salt-master start
# CentOS7以上使用如下两条命令:
# systemctl enable salt-master.service
# systemctl start salt-master.service

启动后查看saltstack master服务状态

1
2
$ service salt-master status
($ systemctl status salt-master.service)

出现如图所示情况表示安装成功

在本地Windows机器上安装salt-minion客户端

  下载相应版本的salt-minion(salt-minion可以安装在多种环境的机器上,但是salt-master只能安装在Linux环境下,现在暂时没有salt-master在Windows下的安装包)
https://repo.saltstack.com/windows/Salt-Minion-2018.3.0-Py2-AMD64-Setup.exe注意要对应上系统的Python版本(下载可能需要翻墙)
下载安装包后点击安装,一路next即可,配置信息直接在/salt/conf/minion中修改
在Windows下配置salt-minion只需要修改两个地方的配置即可,打开/salt/conf/minion

1
2
master: 172.17.20.140
id: Admin-pc

说明:master指定salt-master 的地址,id作为当前salt-minion的标识。
启动salt-minion:进入salt根目录,先点击salt-minion-start-service.bat文件,然后点击salt-minion.bat
验证是否启动salt-minion:在命令行窗口输入services.msc

如果存在salt-minion服务并且已经启动,表示salt-minion启动成功。

验证SaltStack是否能够正常通信

在master和minion端的服务启动后都会生成公钥和私钥,此时需要在master端使用salt-key命令接受minion公钥配置密钥认证,完成后即可对minion进行管理。
salt-key的命令参数主要有:
-L     会显示所有minion公钥,不加任何参数也相当于-L的效果
-a     许可指定的公钥,后面要指定你允许的minion的id名
-A     许可所有minion的公钥
-r     拒绝指定的公钥
-R     拒绝所有pending的公钥
-d     根据公钥的名称删除公钥,删除指定的minion
-D     删除所有公钥,删除所有已经认证的minion
-y     对所有询问是否继续,回答yes

SaltStack远程执行命令

1.使用test.ping测试网络的连通性

说明:由于公司252服务器关闭了,所以salt-master并没有找到252上面的salt-minion,手工测试ping252也没有成功
2.SaltStack常用命令
CentOS远程执行命令:
salt ‘minion_147’ cmd.run ‘hostname’
CentOS远程执行脚本:(脚本是位于minion端/opt/SaltStack/Scripts目录下的helloSalt.sh)
salt ‘minion_147’ cmd.run ‘/opt/SaltStack/Scripts/helloSalt.sh’
win7远程执行命令:
salt ‘windows7’ cmd.run ‘tasklist|find “shell”‘
win7远程执行脚本:(该脚本位于C:\salt\bat目录下的helloSalt.bat)
salt ‘windows7’ cmd.run cmd=’helloSalt.bat’ cwd=’C:\salt\bat’

疑惑和思考

1.master和minion之间是怎么通信的?

  在安装完成后,查看了下端口,发现主控服务器上salt-master上打开了4505和4506端口,可是被控服务器salt-minion上没有打开任何的端口,百思不得其解,网上查了一波终于明白了。SaltStack默认使用zeromq传递消息,zeromq会随着SaltStack的安装而安装,它是一个消息队列服务,master通过4505端口将指令放到zeromq中,而所有的minion都会监听master的4505端口,然后从队列中拿消息进行对比决定是否进行操作,如果操作将自己操作的结果丢回zeromq另外一个队列,master从4506端口监听该队列,得到返回结果,然后展示出来

2.minion如何修改id

当minion的id变更后,我们需要进行如下操作:

1
2
3
4
5
6
1 minion端停止salt-minion
2 master端salt-key –d 原本minion的id
3 minion端删除/etc/salt/pki/minion下所有文件
4 minion端修改配置文件中的id变成需要的新id
5 重启minion端的salt-minion
6 master端认证接受新的id

-------------本文结束感谢您的阅读-------------
你的支持是我最大的动力