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                                       #可以看到两台被控端与主控端是相通的