1.先了解基础知识
saltstack是基于python开发的一套C/S架构配置管理工具,它的底层使用ZeroMQ消息队列pub/sub方式通信,
使用SSL证书签发的方式进行认证管理。ZeroMQ使SaltStack能快速在成千上万台机器上进行各种操作,
而且采用RSA Key方式确认身份,传输采用AES加密,使传输的安全性得到保障。
saltstack是基于C/S架构的服务模式,服务器端叫做Master,客户端叫作Minion
并且有消息队列中的发布与订阅(pub/sub)服务模式,minion与master之间通过ZeroMQ消息队列通信
Master和Minion端都以守护进程的模式运行,一直监听配置文件里面定义的ret_port也就是4506端口(接收minion请求)
和publish_port也就是4505端口(ZMQ的发布消息)
当minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证
如下图(salt-master端的4505和4506端口,被两个客户端(172.25.2.2和172.25.2.3)所连接)
2.SaltSack的工作机制
Master和Minion都以守护进程的方式运行
Master监听配置文件里定义的ret_port(接收minion请求),和publish_port(发布消息)的端口
当Minion运行时,它会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证
当Master和Minion可以正常通信后,就可以进行各种各样的配置管理工作了
3.搭建实验环境
三台rhel7.3的虚拟机
主机信息 | 主机功能 |
---|---|
server1(172.25.2.1) | master节点 |
server2(172.25.2.2) | minion节点1 |
server3(172.25.2.3) | minion节点2 |
(1)在真机上创建三个全新的快照
(2)用真机连接三台虚拟机
(3)在真机上搭建共享yum源,里面包含saltstack的安装包=
到此为止基本的实验环境已经搭建完毕,接下来我将部署saltstack
4.salt的具体步骤如下:
第一步:salt stack的master与minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc。
第二步:salt命令,以ls查看为例,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jobid,根据jobid获取命令执行结果。
第三步:master接收到命令后,将要执行的命令发送给客户端minion。
第四步:minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理。
第五步:minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。
线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master。
第六步:master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中。
第七步:salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。
5.saltstack工具的软件依赖
saltstack对于python版本和python模块有一定的要求
Python | 版本大于2.6或版本小于3.0 |
---|---|
msgpack-python | saltstack消息交换库 |
YAML | saltstack配置解析定义语法 |
Jinja2 | saltstack states配置模板 |
MarkupSafe | Python unicode转换库 |
apache-libcloud | saltstack对云架构编排库 |
Requests | HTTP Python库 |
ZeroMQ | saltstack消息系统 |
pyzmq | ZeroMQ Python库 |
PyCrypto | Python密码库 |
M2Crypto | Openssl Python包装库 |
6.saltstack的安装部署(yum安装)
官网地址:https://docs.saltstack.com
Centos服务器安装地址:https://repo.saltstack.com/#rhel
(1)在server1上编写yum源的配置文件
(2)server2和server3也需要使用网络yum源文件
(3)在server1上安装master节点
(4)在server2和server3上安装minio节点
(5)查看master节点的配置文件,可以看出saltstack使用root用户通信,并且开启服务(主节点)
这里先保持默认配置直接启动服务,后面再涉及到配置文件的修改。
4505端口:用来链接slave,发布订阅
4506端口:请求响应,模式为:zmq(消息队列)
(6)修改minion节点的配置文件(从节点),开启服务
修改配置文件(注意每个冒号后面都要跟一个空格,这是书写规范)
指定master为server1
master: 172.25.2.1 #这里要指向salt-master服务器,可以是IP,也可以是域名,也可以是主机名,不过主机名就要写/etc/hosts了,
如果用的是内部DNS服务器的话可以用主机名或者域名的形式。
到这里基本的环境已经部署完毕
(7)添加连接密钥(查看密钥并加入)/在master添加minion
第一次查看server2和server3没有与master建立连接的原因:
是因为启动minion服务后,会产生/etc/salt/minion_id ,而这个文件里面的内容不会因为你主机名的改变、服务的重启、机器的重启而改变,所以如果你的主机名发送了变化,想让master端那里的证书认证名称也跟着发送变化的话,就要删除/etc/salt/minion_id文件或者清空/etc/salt/minion_id文件里面的内容,然后重启minion服务。
salt-key -L #查看当前证书的签证情况(第一次客户端的证书在未验证Unaccepted Keys:的下面)
salt-key -A通过此证书的验证
salt-key -L #再次查看(发现出现在了Accepted Keys:下面表示已经通过了验证,可以建立通信了)
master 秘钥对默认存储在/etc/salt/pki/master/master.pub /etc/salt/pki/master/master.pem
master 端认证的公钥存储在:/etc/salt/pki/master/minions/
minion 秘钥对默认存储在/etc/salt/pki/minion/minion.pub /etc/salt/pki/minion/minion.pem
minion 存放的master公钥/etc/salt/pki/minion/minion_master.pub
minion_id 默认存储在/etc/salt/minion_id
(8)测试
测试服务器端是否能控制客户端
(9)安装监听端口的命令lsof
监听状态是指网络服务端程序所处的一种状态,在该状态下,服务端程序等待客户端的链接
通过端口查看,返现有两台机器与master端的端口建立了连接。
可以看到4505和4506两个端口的作用
查看进程
安装python-setproctitle,查看python端口情况,每个进程的功能是啥