saltstack
自动化运维,可实现日常设备监控、主动发现问题、自动分析定位、基于标准化流程工具规范化处理、通过自动化运维操作工具处理修复等功能,最终实现监管治自动化运维。
监控自动化 数据采集自动化 数据分析自动化 日常巡检自动化 设备配置比对自动化 故障定位自动化 故障处理自动化 流程处理自动化 日常备份自动化 系统优化自动化 大批量配置自动化
自动化运维工具
saltstack
• SaltStack管理理工具允许管理理员对多个操作系统创建一个一致的管理理系统
• Saltstack最主要的两个功能是:配置管理与远程执行
• Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利器
• 采用订阅者模式的分布式管理工具 管理节点【发命令】——>被管理节点 【去执行 返回结果】
• 采用自定义协议zeromq 比SSH(一对一)速度更快
salt-master安装
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
yum install salt-master
yum install salt-syndic #分布式代理
yum install sal-cloud 也是基于openstack来做的,它可以支持多种云的使用。
如:Aliyun、Azure、DigitalOcean、EC2、Google Compute Engine、HP Cloud OpenStack
Salt-minion 安装 yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm yum install salt-minion
修改配置文件 [root@master ~]# cat /etc/salt/master |head -5 master: 192.168.10.42 user: root [root@minion01 ~]# head -10 /etc/salt/minion master: 192.168.10.42 user: root id: minion-01
Salt原理
SaltStack 采用C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信
minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信
master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了。它们通常位于你的python库中,这些模块是
python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt"cmd.run uptime'的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。
关于zeroMQ
master监听4505和4506端口:
4505对应的是ZMQ的PUB system,用来发送消息;
4506对应的是REP system是来接受消息的。
salt命令
Salt-key
salt-key -L 列列出来认大哥的
salt-key -A 所有小弟都认
salt-key -a 单个认
salt-key -D 剔除所有小弟
salt-key -d 删除某
查看minion状态
#查看minion的状态 [root@master salt]# salt-run manage.status down: up: - minion-01 #查看minion在线状态 [root@master salt]# salt-run manage.up - minion-01 #查看minion不在线状态 [root@master salt]# salt-run manage.down
文件分发 salt-cp
#salt-cp 分发文件到minion上,不支持目录分发,通常在master运行 #考本单个文件 [root@master salt]# salt-cp minion-01 /root/salt-repo-latest-2.el7.noarch.rpm /tmp minion-01: ---------- /tmp/salt-repo-latest-2.el7.noarch.rpm: True #拷贝单个文件到minion的目标目录下并改名 [root@master salt]# salt-cp minion-01 /root/anaconda-ks.cfg /tmp/abc minion-01: ---------- /tmp/abc: True
minion本地执行命令:salt-call
#salt-call minion本地执行命令,自己执可执行模块,不是通过master下发job [root@minion01 tmp]# salt-call test.ping local: True
批量操作
#执行单个salt命令 salt "*" test.ping *代表所有主机 test.ping 命令 #执行一个linux命令
salt "*" cmd.run "whoami" cmd.run 告诉客户端执⾏什么命令 #执行一个脚本
salt "*" cmd.script "salt://脚本名" #/srv/salt 脚本路径 默认
查看salt minion在执行什么操作
[root@master ~]# salt-run jobs.active
20181029231137078329:
----------
Arguments:
- yum -y update
Function:
cmd.run
Returned:
Running:
|_
----------
minion-01:
2651
StartTime:
2018, Oct 29 23:11:37.078329
Target:
minion-01
Target-type:
glob
User:
root
查看正在运行的任务,找到jid
[root@master ~]# salt 'minion-01' saltutil.running minion-01: |_ ---------- arg: - yum -y update fun: cmd.run jid: 20181029231137078329 pid: 2651 ret: tgt: minion-01 tgt_type: glob user: root
根据jid杀掉任务
[root@master ~]# salt 'minion-01' saltutil.kill_job 20181029231137078329 minion-01: Signal 9 sent to job 20181029231137078329 at pid 2651 #清除minion缓存 [root@master ~]# salt '*' saltutil.clear_cache minion-01: True