SaltStack原理:
Saltstack由master和minion构成,master是服务器端,表示一台服务器;minion是客户端,表示有多台服务器。在master上发送命令给符合条件的minion,minion就会执行相应的命令,master和minion之间是通过Zero(消息队列)进行通信的。
SaltStack的master端监听4505和4506端口,4505为master和minion认证通信端口,4506为master用来发送命令或接收minion的命令执行返回信息。
当客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,而master通过这条TCP连接对客户端进行控制。如果断开连接,master对客户端将不能进行控制。但是,当客户端检查到连接断开后,会定期向master端请求注册连接
Master:控制中心,salt命令运行和资源状态管理端 Minions:需要管理的客户端机器,会主动去连接master端,并从master端得到资源状态,同步资源管理信息
saltstack系统架构图:
salt三大功能:
远程执行
配置管理
云管理
salt三种运行模式:
Local
Master Minion
Salt SSH
部署SaltStack 部署环境:
1 关闭三台服务器的防火墙
[root@promote ~]# systemctl stop firewalld.service
[root@promote ~]# setenforce 0
2 分别更改三台主机的主机名与hosts文件
[root@promote ~]# hostnamectl set-hostname master.saltstack.com #更改master的主机名
[root@promote ~]# hostnamectl set-hostname web01.saltstack.com #更改节点1的主机名
[root@promote ~]# hostnamectl set-hostname web02.saltstack.com #更改节点2的主机名
[root@promote ~]# vim /etc/hosts #以下三条信息需要在三台服务器上都进行添加
192.168.199.129 master.saltstack.com
192.168.199.130 web01.saltstack.com
192.168.199.131 web02.saltstack.com
以上操作执行完成后需要重启服务器才可以生效,注意重启完不要忘记关闭防火墙
3 在三台服务器上下载所需要的epel源
[root@promote ~]# yum install epel-release -y
4 在master上安装salt-master,在节点服务器上安装salt-minion。
[root@master ~]# yum install salt-master -y #注意主控端安装的saltstack软件是master
[root@web01 ~]# yum install salt-minion -y #两台被控端安装的saltstack软件是minion
[root@web02 ~]# yum install salt-minion -y
5 修改主控端的配置文件,注意默认的master文件全部都是注释的
[root@master ~]# vim /etc/salt/master
15 interface: 192.168.199.129 #为了安全将监听地址改为本地地址
215 auto_accept: True #修改215行的主控端会自动认证被控端的认证,只要被控端在设置完主控端的IP地址后启动服务,主控端就会允许被控端自动认证,以避免以后每次都要运行salt-key来确认证书信任
416 file_roots: #修改416行的slatstack文件根目录位置,注意这个目录默认是没有的,需要创建
417 base:
418 - /srv/salt
710 nodegroups: #修改710行的组分类,将被控端服务器名添加到相对应的组中
711 group1: 'web01.saltstack.com'
712 group2: 'web02.saltstack.com'
552 pillar_opts: True #修改552行的pillar开启功能
529 pillar_roots: #修改529行的pillar的主目录,注意这个目录是没有的,需要创建
530 base:
531 - /srv/pillar
使用命令查看主控端修改了哪些内容
[root@master ~]# cat /etc/salt/master | grep -v ^$ | grep -v ^# #该命令是过滤掉文件中的空行开头的行
interface: 192.168.199.129
auto_accept: True
file_roots:
base:
- /srv/salt
pillar_roots:
base:
- /srv/pillar
pillar_opts: True
nodegroups:
group1: 'web01.saltstack.com'
group2: 'web02.saltstack.com'
6 创建salt文件根目录及pillar目录
[root@master ~]# mkdir /srv/salt
[root@master ~]# mkdir /srv/pillar
7 做完上述操作后就可以启动salt-master服务
[root@master ~]# systemctl start salt-master.service
[root@master ~]# netstat -ntap | egrep '4505|4506' #查看两个监听端口
tcp 0 0 192.168.199.129:4505 0.0.0.0:* LISTEN 1848/python
tcp 0 0 192.168.199.129:4506 0.0.0.0:* LISTEN 1860/python
8 配置两台被控端配置文件,被控端的配置文件默认也都是注释的
[root@web01 ~]# vim /etc/salt/minion
16 master: 192.168.199.129 #指定主控端IP
78 id: web01.saltstack.com #指定被控主机名
[root@web01 ~]# systemctl start salt-minion.service #开启服务
[root@web02 ~]# vim /etc/salt/minion
16 master: 192.168.199.129
78 id: web02.saltstack.com
[root@web02 ~]# systemctl start salt-minion.service
9 验证 在主控端上简单测试一下主控端与被控端的通信状态,如果返回都是True,则说明正常。注意这里的ping和平时用的ping命令不同,它只是test类下面的一个方法而已,用来验证主控端与被控端的通信状态。这里*表示所有通过认证的被控端,还可以支持其他很多正则表达式的匹配。
[root@master ~]# salt '*' test.ping
web02.saltstack.com:
True
web01.saltstack.com:
True #可以看到两台被控端与主控端是相通的