saltstack
slatstack
一、优势
1、使用的最小最快的网络负载,使用python开发,提供简单的编程接口
2、通讯层使用的zeroMQ,实现是的它肯快速
salt -master
master: 4505 发送
minion: 4506 返回结果
二、 安装:
使用yum 安装需要epel源
master:
yum install salt-master
minion
yum install salt-minion
还可以使用源码安装和pip安装
三、配置文件
[root@vm2 rpm-gpg]# ls /etc/salt/
minion
# 指定master 位置
#master: salt 指定maste 的主机名或者ip
master: 10.0.2.4
# clusters.
#id: salt - minion 需要唯一,默认不写是主机名
id: vm3.node.com
minion 配置文件
master:fqdn ,主机名,ip
id:minion的主机名,只要是唯一能够表示minion主机即可
然后依次启动master 和minion 的slat服务
1 | [root@vm1 yum.repos.d]# /etc/init.d/salt-master start |
1 | [root@vm1 yum.repos.d]# /etc/init.d/salt-minion start |
*master 上修改配置文件不需要重启
master启动后会生成一些文件:
1 2 | [root@vm1 yum.repos.d]# ls /etc/salt/pki/master/ master.pem master.pub minions(已认证的key) minions_autosign minions_denied minions_pre(待认证的key) minions_rejected(拒绝的key) |
1 2 3 4 5 6 7 8 9 | 待认证<br>[root@vm1 master]# ls minions_pre/ vm2.node.com [root@vm1 master]# salt-key -L Accepted Keys: vm3.node.com Denied Keys: Unaccepted Keys: vm2.node.com Rejected Keys:<br><br><br>已经认证的 |
[root@vm1 master]# ls minions
vm3.node.com
1 2 | [root@vm1 yum.repos.d]# ls /etc/salt/pki/master/master.pem /etc/salt/pki/master/master.pem |
1 2 | [root@vm1 yum.repos.d]# ls / var /cache/salt/master/.root_key / var /cache/salt/master/.root_key |
1 2 | [root@vm1 yum.repos.d]# ls / var /run/salt-master.pid / var /run/salt-master.pid |
minion端:
1 2 | [root@vm2 rpm-gpg]# ls /etc/salt/pki/minion/ minion_master.pub(master 认证以后就会有master的公钥) minion.pem(私钥) minion.pub(公钥) |
1 2 | [root@vm2 rpm-gpg]# ls /etc/salt/ minion (配置文件) minion.d minion_id(默认是minion的主机名) pki |
四、命令
salt 让所有minion执行
salt-key 管理minion 秘钥
salt-cp 复制
salt-syndic 代理使用
salt-call :
minion 端主动同步master配置文件
1、salt-key
-L 列出所有的key
-a 允许某台minion
-A 允许所有的minion
-r 拒绝莫一台
-R 拒绝所有
-d 删除指定的minion
-D 删除所有minion
-y 不用输入 “yes”
1 | <br>查看 |
1 2 3 4 5 6 | <br>[root@vm1 yum.repos.d]# salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: redir-proxy.core.ignum.cz vm2.node.com |
1 | 添加所有请求的minion申请 |
1 2 3 4 5 6 | [root@vm1 yum.repos.d]# salt-key -A The following keys are going to be accepted: Unaccepted Keys: redir-proxy.core.ignum.cz vm2.node.com Proceed? [n/Y] y |
删除所有已经通过的申请
1 2 3 4 5 6 | [root@vm1 yum.repos.d]# salt-key -D The following keys are going to be deleted: Accepted Keys: redir-proxy.core.ignum.cz vm2.node.com Proceed? [N/y] y |
测试所有minion 是否通 , (使用 test模块中的ping)
1 2 3 4 5 | [root@vm1 yum.repos.d]# salt "*" test.ping redir-proxy.core.ignum.cz: True vm2.node.com: True |
客户端修改主机名
1.修改主机名
2.修改minion端生成的minion_id (这个文件是自动读取minion 主机名生成的)
1 2 | [root@vm2 rpm-gpg]# cat /etc/salt/minion_id vm2.node.com |
3.master 删除已经注册的已修改的主机名的minion节点key重新认证
练习修改主机名:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | minion: [root@vm3 ~]# vim /etc/sysconfig/network [root@vm3 ~]# hostname vm3.node.com [root@vm3 ~]# echo vm3.node.com > /etc/salt/minion_id | 清空这个文件重启 | rm minion_id pki/ 然后重启minion [root@vm3 ~]# /etc/init.d/salt-minion restart master端操作:踢出原主机名 [root@vm1 yum.repos.d]# salt-key -d vm5.node.com The following keys are going to be deleted: Accepted Keys: vm5.node.com Proceed? [N/y] y Key for minion vm5.node.com deleted. minion: [root@vm3 ~]# /etc/init.d/salt-minion condrestart master端操作: [root@vm1 yum.repos.d]# salt-key -L Accepted Keys: vm2.node.com Denied Keys: Unaccepted Keys: vm3.node.com Rejected Keys: [root@vm1 yum.repos.d]# salt-key -a vm3.node.com -y The following keys are going to be accepted: Unaccepted Keys: vm3.node.com Key for minion vm3.node.com accepted. |
4、 查看minion执行过程
1 2 3 4 5 | import salt.utils. event event = salt.utils. event .MasterEvent( '/var/run/salt/master' ) for eachevent in event .iter_event(full=True): print eachevent print( "--------" ) |
五、执行命令
1 | salt "*" cmd.run "cat /etc/issus" |
六、return 你日志模块
七、执行分组:
执行:
1 | salt -N sec-web test.ping |
八,模块:
查看模块
1 | salt 'web-site-15-170.dev.xesv5.com' sys.doc |
九、执行脚本
1 | salt "*" cmd.script salt: //etc/script/* |
脚本文件的编写
/etc/resolv.conf: #同步到的位置 file.managed: #模块名称 - source: salt://xes/hosts/files/resolv.conf #源文件的位置 在salt的相对目录下 - user: root - group: root - mode: 644
[root@vm1 salt]# cat resove.sls /tmp/resove.conf: file.managed: - source: salt://etc/resolv.conf - user: root - group: root - mode: 600 [root@vm1 salt]# cat top.sls base: '*': - resove
1 | 下面的两个命令都可以将上面的/etc/resolve.conf 同步到 minion 主机的tmp目录下<br><br>[root@vm1 salt]# salt '*' state.highstate[root@vm1 salt]# salt '*' state.sls resove 这样指定配置文件执行就不需要top了。 |
cron
添加定时任务脚本rm-roommsg: #传输一个脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <em id= "__mceDel" > file.managed: - name: /root/scripts/rm_laoshi_roomsg_img.sh - source: salt: //xes/files/rm_laoshi_roomsg_img.sh - mode: 755 - user: root - group: root cron.present: #定义一个定时任务,每两天执行一次这个脚本<br> - name: /bin/bash rm_laoshi_roommsg_img.sh >/dev/ null 2>&1 - identifier: del laoshi roommsg 2 days ago img file - user: root - minute: '0' - hour: '1' - daymonth: "*/2" - require: - file: rm-roommsg </em> |
得到的结果

# SALT_CRON_IDENTIFIER:del laoshi roommsg 2 days ago img file 0 1 */2 * * /bin/bash rm_laoshi_roommsg_img.sh >/dev/null 2>&1
1 | <em id= "__mceDel" >identifier: 参数决定了是新增任务还是修改任务,如果不该这个参数后面的值,而只修改name 或者minute 等值,则他会查找 crontab中有没有相同的 indentifier 的任务,如果有则修改,没有则添加<br><br></em> |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 后端思维之高并发处理方案
· 想让你多爱自己一些的开源计时器
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
· Cursor预测程序员行业倒计时:CTO应做好50%裁员计划
· 上周热点回顾(3.24-3.30)