saltstack是一个批量远程管理工具,可以批量对多台服务器进行远程命令
通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等
Salt的核心功能:
- 使对远程系统的命令被并行而不是串行调用
- 使用安全且加密的协议
- 使用尽可能最小和最快的网络负载
- 提供一个简单的编程界面
Salt还向远程执行领域引入了更精细的控件,使系统不仅可以通过主机名来定位,还可以通过系统属性来定位
主要的组件其实就两个
master和minion
![](https://img-blog.csdnimg.cn/img_convert/d65a632510e0f96184247c004ab5d36d.png#clientId=u82058698-4d83-4&from=paste&height=324&id=u3dd13b58&margin=[object Object]&originHeight=324&originWidth=864&originalType=url&ratio=1&status=done&style=none&taskId=u1adc5efe-59a9-4517-9f7b-280cb21f720&width=864)
主节点上安装salt-master
从节点上安装salt-minion,并且向master进行认证
主机向客户端发布命令,然后客户端执行命令。在Salt生态系统中,Salt Master是运行salt-master服务的服务器。它向一个或多个Salt Minions发出命令,Salt Minions是运行该salt-minion服务并已在该特定Salt Master中注册的服务器
前提准备
准备三台服务器,设置静态ip,可以联网,关闭防火墙
服务器 | 主机名 | ip | 身份 | 软件包 |
---|---|---|---|---|
centos7 | salt-master | 172.16.20.60 | master | salt-master |
centos7 | web1 | 172.16.20.61 | minion | salt-minion |
centos7 | web2 | 172.16.20.62 | minion | salt-minion |
安装saltstack
1.安装saltstack存储库和密钥
三台服务器上都执行
[root@salt-master ~]# rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/3003/SALTSTACK-GPG-KEY.pub
[root@salt-master ~]# curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/3003.repo | sudo tee /etc/yum.repos.d/salt.repo
[salt-3003-repo]
name=Salt repo for RHEL/CentOS 7 PY3
baseurl=https://repo.saltproject.io/py3/redhat/7/x86_64/3003
skip_if_unavailable=True
failovermethod=priority
enabled=1
enabled_metadata=1
gpgcheck=1
gpgkey=https://repo.saltproject.io/py3/redhat/7/x86_64/3003/SALTSTACK-GPG-KEY.pub, https://repo.saltproject.io/py3/redhat/7/x86_64/3003/base/RPM-GPG-KEY-CentOS-7
2.清空yum缓存并生成缓存
三台服务器都执行
yum clean all
yum makecache
3.安装salt-master
master那台主机安装salt-master
[root@salt-master ~]# yum -y install salt-master
4.安装salt-minion
两台web上安装
[root@web1 ~]# yum -y install salt-minion
[root@web2 ~]# yum -y install salt-minion
配置saltstack
安装好了,需要对saltstack的配置文件进行配置
salt-master的配置文件是/etc/salt/master
salt-minion的配置文件是/etc/salt/minion
1.salt-master配置
[root@salt-master ~]# grep -v ^# /etc/salt/master|grep -v ^$
interface: 0.0.0.0 #绑定到本地的0.0.0.0地址
publish_port: 4505 #管理端口,命令发送
user: root #运行salt进程的用户
worker_threads: 2 #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
ret_port: 4506 #执行结果返回端口
pidfile: /var/run/salt-master.pid #pid文件位置
log_file: /var/log/salt/master #日志文件地址
#自动接收minion的key
auto_accept: False
2.salt-minion配置
[root@web1 ~]# grep -v ^# /etc/salt/minion|grep -v ^$
master: 172.16.20.62 #master主机位置
master_port: 4506
user: root
id: web1 #定义的名字
log_file: /var/log/salt/minion
[root@web2 ~]# grep -v ^# /etc/salt/minion|grep -v ^$
master: 172.16.20.62
master_port: 4506
user: root
id: web2
log_file: /var/log/salt/minion
启动saltstack
在master上启动
查看端口4505和4506都打开,服务正常
[root@salt-master ~]# systemctl start salt-master
[root@salt-master ~]# systemctl status salt-master
● salt-master.service - The Salt Master Server
Loaded: loaded (/usr/lib/systemd/system/salt-master.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2021-04-27 18:18:08 EDT; 5s ago
Docs: man:salt-master(1)
file:///usr/share/doc/salt/html/contents.html
https://docs.saltstack.com/en/latest/contents.html
Main PID: 2347 (salt-master)
CGroup: /system.slice/salt-master.service
├─2347 /usr/bin/python3 /usr/bin/salt-master
├─2353 /usr/bin/python3 /usr/bin/salt-master
├─2357 /usr/bin/python3 /usr/bin/salt-master
├─2358 /usr/bin/python3 /usr/bin/salt-master
├─2361 /usr/bin/python3 /usr/bin/salt-master
├─2362 /usr/bin/python3 /usr/bin/salt-master
├─2363 /usr/bin/python3 /usr/bin/salt-master
├─2370 /usr/bin/python3 /usr/bin/salt-master
├─2371 /usr/bin/python3 /usr/bin/salt-master
├─2372 /usr/bin/python3 /usr/bin/salt-master
├─2373 /usr/bin/python3 /usr/bin/salt-master
├─2374 /usr/bin/python3 /usr/bin/salt-master
└─2377 /usr/bin/python3 /usr/bin/salt-master
Apr 27 18:18:07 salt-master systemd[1]: Starting The Salt Master Server...
Apr 27 18:18:08 salt-master systemd[1]: Started The Salt Master Server.
[root@salt-master ~]# ss -antp |grep LISTEN |grep salt
LISTEN 0 128 *:4505 *:* users:(("salt-master",pid=2357,fd=18))
LISTEN 0 128 *:4506 *:* users:(("salt-master",pid=2363,fd=31))
在minion上启动
2台上面minion都要启动,minion没有监听端口,不用查看端口状态
[root@web1 ~]# systemctl start salt-minion
[root@web1 ~]# systemctl status salt-minion
● salt-minion.service - The Salt Minion
Loaded: loaded (/usr/lib/systemd/system/salt-minion.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-04-29 02:08:52 CST; 1s ago
Docs: man:salt-minion(1)
file:///usr/share/doc/salt/html/contents.html
https://docs.saltstack.com/en/latest/contents.html
Main PID: 9562 (salt-minion)
CGroup: /system.slice/salt-minion.service
├─9562 /usr/bin/python3 /usr/bin/salt-minion
├─9567 /usr/bin/python3 /usr/bin/salt-minion
└─9569 /usr/bin/python3 /usr/bin/salt-minion
Apr 29 02:08:52 web1 systemd[1]: Starting The Salt Minion...
Apr 29 02:08:52 web1 systemd[1]: Started The Salt Minion.
在master上接收minion密钥
在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的
1.在master上使用salt-key查看密钥状态
可以看到在master上面已经出现两个minion的密钥,说明master和minion已经连接,并且master已经获取到了minion的密钥,等待加入
[root@salt-master ~]# salt-key -L
Accepted Keys: #已经接受的key
Denied Keys: #拒绝的key
Unaccepted Keys:#未加入的key
web1
web2
Rejected Keys:#吊销的key
2.检查master和minion的秘钥匹配
在master上执行
[root@salt-master ~]# salt-key -f web*
Unaccepted Keys:
web1: 3f:1f:12:a7:c1:c5:6f:be:28:47:7f:b1:03:56:24:cb:e6:04:66:40:fc:53:88:cc:de:bc:63:23:d8:74:42:df
web2: f0:2f:fa:df:ef:3b:92:71:ae:a1:a1:22:4f:29:93:a5:fd:2d:8f:72:8b:3f:f1:ec:d5:82:57:39:e4:74:35:45
在两个minion上面执行
[root@web1 ~]# salt-call --local key.finger
local:
3f:1f:12:a7:c1:c5:6f:be:28:47:7f:b1:03:56:24:cb:e6:04:66:40:fc:53:88:cc:de:bc:63:23:d8:74:42:df
[root@web2 ~]# salt-call --local key.finger
local:
f0:2f:fa:df:ef:3b:92:71:ae:a1:a1:22:4f:29:93:a5:fd:2d:8f:72:8b:3f:f1:ec:d5:82:57:39:e4:74:35:45
确认两密钥匹配
3.在master上接收密钥
[root@salt-master ~]# salt-key -a web*
The following keys are going to be accepted:
Unaccepted Keys:
web1
web2
Proceed? [n/Y] y
Key for minion web1 accepted.
Key for minion web2 accepted.
4.再次查看密钥状态
已认证成功
[root@salt-master ~]# salt-key -L
Accepted Keys:
web1
web2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
ps:如果觉得接收密钥太麻烦,并且minion主机可信,那么可以直接在master配置文件中设置这个参数为keyauto_accept: True就可以了
minion的密钥在master中会自动被认证成功
执行第一条命令
[root@salt-master ~]# salt '*' test.ping
web1:
True
web2:
True
# salt 是命令
# * 表示目标主机, 在这里代表所有目标主机
# test.ping是salt远程执行的一个模块下面的方法
探测minion主机存活命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活
以上saltstack就安装成功了,并且可以远程执行命令了