saltstack简介:
saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统。
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。
早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。系统管理员面临的问题主要是
1、系统配置管理;
2、远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric、puppet、chef、ansible、saltstack等,这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行。
通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。
系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等等。如果主机数量庞大,单靠人工维护实在让人难以忍受。
salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。
不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。
Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。
saltstack的运行方式
Local 本地运行,交付管理
Master/Minion <<< 常用方式
Salt SSH 不需要客户端
saltstack部署基本架构
在安装salt之前,先理解salt架构中各个角色,主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。
salt架构中的一种就是master > minion。
在远程执行系统中,salt用python通过函数调用完成任务。
运行salt依赖包
python
zeromq
pyzmp
pycrypto
msgpack-python
yaml
jinja2
解决依赖包最简单的办法就是用安装包管理器,yum工具服务器环境准备
服务器环境 | CentOS 7.4(Master) | CentOS 7.4(Slave) |
---|---|---|
ip地址 | 192.168.1.77 | 192.168.1.78 |
身份 | master | slave |
软件包 | salt-master | salt-minion |
Master端操作
1)配置hosts
[root@localhost ~]# vim /etc/hosts
代码语言:javascript复制192.168.1.77 master192.168.1.78 slave
2)配置主机名
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# su -
salt软件包需要epel源的支持,那么下载
EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。
3)安装salt-master
[root@master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@master ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#清空缓存 [root@master ~]# yum clean all
#生成yum缓存 [root@master ~]# yum makecache
#查看salt包 [root@master ~]# yum list salt
#安装salt-master
[root@master ~]# yum -y install salt-master
4)salt端口
安装好salt之后开始配置,salt-master默认监听两个端口:
4505 publish_port 提供远程命令发送功能
4506 ret_port 提供认证,文件服务,结果收集等功能
确保客户端可以通信服务器的此2个端口,保证防火墙允许端口通过。因此在测试环境直接关闭防火墙。
[root@master ~]# systemctl stop firewalld
5)salt配置文件
salt-master的配置文件是/etc/salt/master
salt-minion的配置文件是/etc/salt/minion
配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面
6)配置salt-master配置文件
代码语言:javascript复制# 监听地址interface: 0.0.0.0# salt运行的用户,影响到salt的执行权限user: root# salt的运行线程,开的线程越多一般处理的速度越快,但一般不要超过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#自动接收minion的keyauto_accept: True
7)启动salt-master
[root@master ~]# systemctl start salt-master
8)查询salt-master启动状态
[root@master ~]# systemctl status salt-master
[root@master ~]# netstat -lntup |egrep "4505|4506"
9)验证证书
[root@master salt]# salt-key -L
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:
#因为配置了master自动接受请求(也可以手动salt-key添加),此时slave已经出现在Accepted Keys中,说明minion已经和master联系,并且master已经获取了minion的公钥,等待下一步指令
10)验证测试
[root@master salt]# salt "*" test.ping
slave:
True
Slave端操作
1)配置hosts
[root@localhost ~]# vim /etc/hosts
代码语言:javascript复制192.168.1.77 master192.168.1.78 slave
2)配置主机名
[root@localhost ~]# hostnamectl set-hostname slave
[root@localhost ~]# su -
salt软件包需要epel源的支持,那么下载
EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。
3)安装salt-minion
[root@slave ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@slave ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#清空缓存 [root@slave ~]# yum clean all
#生成yum缓存 [root@slave ~]# yum makecache
#查看salt包 [root@slave ~]# yum list salt
#安装salt-minion
[root@slave ~]# yum -y install salt-minion
4)配置satl-minion文件
[root@slave ~]# vim /etc/salt/minion
代码语言:javascript复制# minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串id: slave# salt运行的用户权限user: root# master的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串master: 192.168.1.77# 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
5)启动salt-minion
[root@slave ~]# systemctl start salt-minion
6)检查salt-minion状态
[root@slave ~]# systemctl status salt-minion
salt-key命令
只有Master接受了Minion Key后,才能进行管理。具体的认证命令为salt-key常用的有如下命令。
[root@master ~]# salt-key -L
Accepted Keys: #已经接受的key
slave
Denied Keys: #拒绝的key
Unaccepted Keys: #未加入的key
Rejected Keys: #吊销的key
#常用参数
-L #查看KEY状态
-A #允许所有
-D #删除所有
-a #认证指定的key
-d #删除指定的key
-r #注销掉指定key(该状态为未被认证)
#在master端/etc/salt/master配置
auto_accept: True #如果对Minion信任,可以配置master自动接受请求
salt-key的使用
#列出当前所有的key
[root@master ~]# salt-key
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:
#添加指定minion的key
[root@master ~]# salt-key -a slave1 -y
#添加所有minion的key
[root@master ~]# salt-key -A -y
#删除指定的key
[root@master ~]# salt-key -d salt1-minion.example.com -y
#删除所有的key
[root@master ~]# salt-key -D -y
日常命令参数
首先知道master和minion都安装了什么文件,然后才知道怎么操作
master端
[root@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命令
slave端
[root@slave ~]# 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 ~]# salt '*' test.ping
slave:
True # salt 是一个命令 # * 表示目标主机, 在这里代表所有目标主机 # test.ping是salt远程执行的一个模块下面的方法。
这是条很简单的探测minion主机存活命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活。
test模块实际上还有许多其他的函数
test其他函数
[root@master ~]# salt '*' test.echo "www.yangxingzhen.com"
slave:
www.yangxingzhen.com
test.fib生成斐波那契数列
菲波那切数列定义是第0项是0,第1项是1,数列从第3项开始,每一项等于前两项之和。
[root@master ~]# salt '*' test.fib 50
slave:
|_
- 0
- 1
- 1
- 2
- 3
- 5
- 8
- 13
- 21
- 34
- 5.00679016113e-06