一.什么是SaltStack
SaltStack是一个服务器基础设施管理工具,它具有配置管理,远程执行,监控等功能,SaltStack由Python语言编写,是非常简单易用和轻量级的管理工具。
二.为什么使用SaltStack
为同时管理多台机器,与传统的Xshell不同的是它不需要与每台主机手动建立链接,而是在客户端安装客户端应用程序Minion,由客户端应用程序主动连接服务端Master。
三.SaltStack原理
SaltStack由Master和Minion构成,Master是服务端,表示一台服务器,Minion是客户服务器端,表示多台服务器
在 Master 上发送命令给符合条件的 Minion,Minion 就会执行相应的命令。Master 和 Minion 之间是通过 ZeroMQ(消息队列)进行通信。
Saltstack 的 Master 端监听 4505与 4506 端口,4505为 Saltstack 的消息发布端口,4506为 Saltstack 客户端与服务端通信的端口。Saltstack 客户端程序并不监听端口,当客户端启动后,会主动连接 Master 端注册,然后一直保持该 TCP 连接,而 Master 通过这条 TCP 连接对客户端进行控制。如果连接断开,aster 对客户端将不能进行控制。但是,当客户端检查到连接断开后,会定期的向Master 端请求注册连接。
四.SaltStack部署
1.设置系统基础环境
(1)修改host文件
192.168.10.101 master
192.168.10.102 minion01
192.168.10.103 minion02
(2)关闭防火墙和内核安全机制
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
(2)按要求设置主机名称
hostnamectl set-hostname 名称
2.安装Master
将所需rpm包拷贝到服务器
rpm -ivh salt-3006.4-0.x86_64.rpm
rpm -ivh salt-master-3006.4-0.x86_64.rpm
备注:
以下软件包为扩展 saltstack 的可选组件。
salt-ssh:主要作用是不需要安装 minion,只要 ssh 协议开放,即可远程执行命令,可用作拿到一批新机器,批量配置时使用,也可以直接通过 salt-ssh 不安装 minion 进行管理。
salt-syndic:通过 Syndic,可以建立多层级的Salt拓扑,Syndic 下的Minions 即可通过 syndic所在的 Master 进行管理,也可以通过 MasterOfMaster 及更高层级的 Master 进行管理,架构变得异常灵活,
salt-cloud:salt cloud 目前已经提供了对腾讯云平台的管理支持,一些常见的云平台管理功能、管理操作已经都可以做到通过 salt cloud 集成到自有的技术平台上做统一的资源管理了。
salt-api:salt-api 是我们通过 restful-api 调用 salt-master 的接口,且调用的时候必须通过认证才能调用,认证的用户为系统用户
3. 配置Master
(1)修改Master的配置文件
[root@master ~]# vim /etc/salt/master
interface: 192.168.10.101
auto_accept: True
file_roots:
base:
- /srv/salt
nodegroups:
group1: 'web01'
group2: 'web02'
pillar_opts: True
pillar_roots:
base:
- /srv/pillar
备注:
file_roots:
base:
- /srv/salt
开启SaltStack文件根目录位置,注意这个目录默认没有创建,需要手动创建
pillar_opts: True
开启pillar功能,同步文件功能
pillar_roots:
base:
- /srv/pillar
pillar的主目录,需要自己创建
nodegroups:
group1: 'web01'
group2: 'web02'
设置主机组,group1:“web01”组中有多个成员就用逗号隔开——》group: 'web01,web02'
(2)创建相关目录
mkdir /srv/salt
mkdir /srv/pillar
(3)开启Master并设置为开机自启
systemctl start salt-master
systemctl enable salt-master
(4)查看相关端口(4505,4506),确保Master正常开启
[root@master ~]# netstat -anpt | grep salt
tcp 0 0 192.168.10.101:4505 0.0.0.0:* LISTEN 1760/salt-master Pu
tcp 0 0 192.168.10.101:4506 0.0.0.0:* LISTEN 1766/salt-master Re
4.安装Minion
将所需rpm包拷贝到服务器
rpm -ivh salt-3006.4-0.x86_64.rpm
rpm -ivh salt-master-3006.4-0.x86_64.rpm
5.配置Minion
(1)修改Minion的配置文件
vim /etc/salt/minion
master: 192.168.10.101
id: web01 #添加到相关组
注意:
如果修改了 minion 端的 id, minion 会重新注册,向 master 发送新的 key,老的注册信息就失效了,但此时 master 仍然会连接老的 minion,于是就会报错,
解决方法:可以删除掉老的 minion 注册信息,Master目录/etc/salt/pki/master/minions,默认会使用minion 端的 ip 地址作为 key 名称。将以前注册的 ID 删掉,即可。
(2) 启动Minion并设置为开机自启
systemctl start salt-minion
systemctl enable salt-minion
备注:
当 Minion 启动后,会自动生成公钥和私钥,并将公钥发送到Master端。Minion不监听端口,全靠和Master保持长连接,可通过netstat -anpt | grep salt命令查看是否连接成功,到此SaltStack安装完成。
(3)查看端口验证
[root@minion01 ~]# netstat -anpt | grep salt
tcp 0 0 192.168.10.102:42312 192.168.10.101:4506 ESTABLISHED 2153/salt-minion Mu
tcp 0 0 192.168.10.102:48640 192.168.10.101:4505 ESTABLISHED 2153/salt-minion Mu
(4)Master查看连接
[root@master minions]# netstat -anpt | grep salt
tcp 0 0 192.168.10.101:4505 0.0.0.0:* LISTEN 1760/salt-master Pu
tcp 0 0 192.168.10.101:4506 0.0.0.0:* LISTEN 1766/salt-master Re
tcp 0 0 192.168.10.101:4506 192.168.10.103:60084 ESTABLISHED 1766/salt-master Re
tcp 0 0 192.168.10.101:4505 192.168.10.102:48640 ESTABLISHED 1760/salt-master Pu
tcp 0 0 192.168.10.101:4505 192.168.10.103:60734 ESTABLISHED 1760/salt-master Pu
tcp 0 0 192.168.10.101:4506 192.168.10.102:42312 ESTABLISHED 1766/salt-master Re
6.Master端查看Minion密钥
在 minion 启动后,会连接master,并且会请求 master 为其签发证书,待证书签发完成后,代表master 可以信任该 minion,并且 minion 和 master 端的通信是经过加密的。我们可以通过 salt-key命令管理 minion 秘钥。
(1)Master端查看介绍的Minion端
[root@master minions]# salt-key -L
Accepted Keys:
web01
web02
Denied Keys:
Unaccepted Keys:
Rejected Keys:
(2)获取Minion端指纹码
[root@master minions]# salt-key -f web01
Accepted Keys:
web01: 05:28:c4:39:b1:55:24:2b:42:18:6a:70:d9:9f:51:fa:a3:c3:66:df:0c:bd:0c:47:d9:26:f7:c9:7c:9a:05:4e
(3)前往Minion端验证指纹码
[root@minion01 ~]# salt-call --local key.finger
local:
05:28:c4:39:b1:55:24:2b:42:18:6a:70:d9:9f:51:fa:a3:c3:66:df:0c:bd:0c:47:d9:26:f7:c9:7c:9a:05:4e