一、saltstack的由来
saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统。
系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等等。如果主机数量庞大,单靠人工维护实在让人难以忍受。
早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。系统管理员面临的问题主要是
- 1、系统配置管理
- 2、远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric、puppet、chef、ansible、saltstack等
- 3、这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行。
saltstack便是远程执行软件中的一种。
二、saltstack的特点
salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。
不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。
Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。
三、saltstack基本架构
在远程执行系统中,salt用python通过函数调用完成任务。
四、安装saltstack
salt软件包需要epel源的支持,那么下载
epel的全称叫 Extra Packages for Enterprise Linux 。epel是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 epel之后,就相当于添加了一个第三方源。
安装epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空缓存
yum makecache #生成yum缓存
安装salt
安装salt-master
yum install salt-master -y
安装salt-minion
yum install salt-minion -y
五、saltstack配置
saltstack端口说明
安装好salt之后开始配置,salt-master默认监听两个端口:
4505 publish_port 提供远程命令发送功能
4506 ret_port 提供认证,文件服务,结果收集等功能
确保客户端可以通信服务器的此2个端口,保证防火墙允许端口通过。因此在测试环境直接关闭防火墙。
saltstack配置文件
salt-master的配置文件是/etc/salt/mastersalt-minion的配置文件是/etc/salt/minion
配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面
配置/etc/salt/master
# salt运行的用户,影响到salt的执行权限
user: root#s alt的运行线程,开的线程越多一般处理的速度越快,但一般不要超过CPU的个数
worker_threads: 10# master的管理端口
publish_port : 4505# master跟minion的通讯端口,用于文件服务,认证,接受返回结果等
ret_port : 4506# 如果这个master运行的salt-syndic连接到了一个更高层级的master,那么这个参数需要配置成连接到的这个高层级master的监听端口
syndic_master_port : 4506# 指定pid文件位置
pidfile: /var/run/salt-master.pid
配置/etc/salt/minion(master 为必填)
# master的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
master : master# minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串,不改它的话默认会以hostname的值为id,主机名的全称。
id: slaveID# salt运行的用户权限
user: root# master通信端口
master_port: 4506# 备份模式,minion是本地备份,当进行文件管理时的文件备份模式
backup_mode: minion# 执行salt-call时候的输出方式
output: nested# minion等待master接受认证的时间
acceptance_wait_time: 10# 失败重连次数,0表示无限次,非零会不断尝试到设置值后停止尝试
acceptance_wait_time_max: 0# 重新认证延迟时间,可以避免因为master的key改变导致minion需要重新认证的syn风暴
random_reauth_delay: 60# 日志文件位置
log_file: /var/logs/salt_minion.log
启动salt-master和salt-minion
systemctl start salt-minion
systemctl start salt-master#检查salt状态
systemctl status salt-minion
systemctl status salt-master
六、在master上接收minion秘钥
在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。
在salt-master执行
salt-key命令用于管理mionion秘钥
[root@master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
slave #这个就是之前在/etc/salt/minion中配置的id字段
Rejected Keys:
此时slave已经出现在unaccepted keys中,说明minion已经和master联系,并且master已经获取了minion的公钥,等待下一步指令。
检查master和minion的秘钥匹配(正常情况下也可以不检查)
在master上执行:(查看slave密钥)
[root@master ~]# salt-key -f slave
Unaccepted Keys:
slave: 0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea
然后可以在minion上查看minion的秘钥
[root@slave ~]# salt-call --local key.finger
local:0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea
因此可确认两者秘钥匹配,在master上接收秘钥
在master上接收秘钥
[root@master ~]# salt-key -a slave
The following keys are going to be accepted:
Unaccepted Keys:
slave
Proceed? [n/Y] y
Key for minion slave accepted.
确认接收秘钥后,检验minion秘钥是否被接收
[root@master ~]# salt-key -L
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:
七、salt-key 命令说明
只有Master接受了Minion Key后,才能进行管理。具体的认证命令为salt-key,常用的参数有如下。
#常用参数
-L #查看KEY状态
-A #允许所有
-D #删除所有
-a #认证指定的key
-d #删除指定的key
-r #注销掉指定key(该状态为未被认证)
八、master和minion都安装了些什么文件
master端:
rpm -ql salt-master
/etc/salt/master # salt master主配置文件
/usr/bin/salt #salt master 核心操作命令
/usr/bin/salt-cp #salt 文件传输命令
/usr/bin/salt-key #salt证书管理
/usr/bin/salt-master #salt master 服务命令
/usr/bin/salt-run #salt master runner命令
minion端:
rpm -ql salt-minion
/etc/salt/minion #minion配置文件
/usr/bin/salt-call #拉取命令
/usr/bin/salt-minion #minion服务命令
/usr/lib/systemd/system/salt-minion.service #minion启动脚本
salt命令的组成结构
在命令行输入的命令都是 执行模块
等到命令写入到文件中, 就叫做状态模块
[root@master 192.168.199.155 ~]$salt --help
Usage: salt [options] '<target>' <function> [arguments]salt命令 参数 目标 salt模块的函数 远程执行的参数
第一条saltstack命令
[root@master ~]# salt '*' test.ping
slave:True# salt 是一个命令
# * 表示目标主机, 在这里代表所有目标主机
# test.ping是salt远程执行的一个模块下面的方法。
这是条很简单的探测minion主机存活命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活。
远程执行命令模块
cmd是超级模块,所有shell命令都能执行
例如查看id为slave 的minion的中的python进程情况:
[root@master 192.168.11.72 ~]$salt 'slave' cmd.run 'ps -ef|grep python'
slave:root 905 1 0 07:31 ? 00:00:02 /usr/bin/python -Es /usr/sbin/tuned -l -Proot 3843 1 0 11:05 ? 00:00:00 /usr/bin/python /usr/bin/salt-minionroot 3846 3843 0 11:05 ? 00:00:01 /usr/bin/python /usr/bin/salt-minionroot 4031 1 0 11:31 ? 00:00:00 /usr/bin/python /usr/bin/salt-minionroot 4032 4031 0 11:31 ? 00:00:00 /bin/sh -c ps -ef|grep pythonroot 4034 4032 0 11:31 ? 00:00:00 grep python
参考:
https://www.cnblogs.com/xintiao-/p/10380656.html