一、SaltStack简介
SaltStack (以下简称为 Salt)是基于 Python 开发的 一套 C/S 架构配置管理工具,其底层 使用的是 ZeroMQ 消息队列 PUB/SUB 方式通信,并且使用 SSL 证书签发的方式来进行认 证管理 。
Saltstack 比 Puppet 出来晚几年,是基于Python 开发的,也是基于 C/S 架构,服务端 master 和客户端 minions ;Saltstack 和 Puppet 很像,可以说 Saltstatck 整合了 Puppet 和 Chef 的功能,更加强大,更适合大规模批量管理服务器,并且它比 Puppet 更容易配置。
三大功能: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理。
支持系统:大多数都支持,windows 上不支持安装 master。
Salt的具体步骤如下
- 第一步:salt stack的master与minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc。
- 第二步:salt命令,以ls查看为例,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jobid,根据jobid获取命令执行结果。
- 第三步:master接收到命令后,将要执行的命令发送给客户端minion。
- 第四步:minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理。
- 第五步:minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master。
- 第六步:master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中。
- 第七步:salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端
Salt的优势
- 基于 C/S 架构设计,部署简单方便。
- 主控端(Master)和被控端(Minion)基于证书认证,安全可靠.
- 配置简单、功能强大,可扩展性强 。
- 支持 API 及自定义模块,可以通过 Python 轻松扩展 。
- 速度优于其他自动化配置管理工具 。
- 支持现如今所有流行的云平台及 Docker 和 openstack。
二、Salt的安装
Salt 的依赖组件大家可 以参考如下网址: http://docs.saltstack.com/en/latest/topics/installation/index.html
Salt 目前的通信模式总共分为两种模式 : ZeroMQ 和 REAT。 鉴于 REAT 目前还不是太 稳定,我们在这里选择 ZeroMQ 模式 。
1、环境介绍
所有主机均已关闭selinux与防火墙
机器主机名 | 角色 | IP | 系统 |
server | Master | 172.17.7.101 | CentOS7.5 x86_64 |
node1 | Minion | 172.17.7.102 | CentOS7.5 x86_64 |
node2 | Minion | 172.17.7.103 | CentOS7.5 x86_64 |
2、Master安装(server)
#更改主机名
[root@linuxli ~]# hostnamectl set-hostname server
#配置IP地址
[root@server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:da:bd:33 brd ff:ff:ff:ff:ff:ff
inet 172.17.7.101/16 brd 172.17.255.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::8670:9455:18a2:d70a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
#安装epal源(包含salt的各种安装包)
[root@server ~]# yum -y install epel-release
#安装salt-master
[root@server ~]# yum -y install salt-master
#启动master
[root@server ~]# systemctl enable salt-master.service
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.
[root@server ~]# systemctl start salt-master.service
#查看版本
[root@server ~]# salt --version
salt 2015.5.10 (Lithium)
#查看salt依赖包的版本
[root@server ~]# salt --versions-repo
Salt: 2015.5.10
Python: 2.7.5 (default, Apr 11 2018, 07:36:10)
Jinja2: 2.8.1
M2Crypto: 0.21.1
msgpack-python: 0.5.6
msgpack-pure: Not Installed
pycrypto: 2.6.1
libnacl: Not Installed
PyYAML: 3.10
ioflo: Not Installed
PyZMQ: 14.7.0
RAET: Not Installed
ZMQ: 4.1.4
Mako: Not Installed
Tornado: Not Installed
timelib: Not Installed
dateutil: Not Installed
#查看安装目录
[root@server ~]# tree /etc/salt/
/etc/salt/
├── master
└── pki
└── master
├── master.pem
├── master.pub
├── minions
├── minions_autosign
├── minions_denied
├── minions_pre
└── minions_rejected
3、Minion安装(node1+node2)
#更改主机名
[root@linuxli ~]# hostnamectl set-hostname node1
#配置IP
[root@node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qd