SaltSack的工作机制
Master和Minion都以守护进程的方式运行
Master监听配置文件里定义的ret_port(接收minion请求),和publish_port(发布消息)的端口
当Minion运行时,它会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证
当Master和Minion可以正常通信后,就可以进行各种各样的配置管理工作了
搭建实验环境
三台rhel7.5的虚拟机
主机信息 主机功能
server1(172.25.15.1) master节点
server2(172.25.15.2) minion节点1
server3(172.25.15.3) minion节点2
在真机上搭建共享yum源,里面包含saltstack的安装包
到此为止基本的实验环境已经搭建完毕,下来部署saltstack
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执行结果,将结果输出到终端。
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包装库
saltstack的安装部署(yum安装)
官网地址:https://docs.saltstack.com
Centos服务器安装地址:https://repo.saltstack.com/#rhel
在server1上安装salt-master
在server2,3上安装salt-minion
查看master节点的配置文件,可以看出saltstack使用root用户通信,并且开启服务(主节点)
这里先保持默认配置直接启动服务,后面再涉及到配置文件的修改。
4505端口:用来链接slave,发布订阅
4506端口:请求响应,模式为:zmq(消息队列)
saltstack的master端监听4505与4506端口。
4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口;
修改minion节点的配置文件(从节点),开启服务
修改配置文件(注意每个冒号后面都要跟一个空格,这是书写规范)
指定master为server1
master: 172.25.15.1 #这里要指向salt-master服务器,可以是IP,也可以是域名,也可以是主机名,不过主机名就要写/etc/hosts了,
如果用的是内部DNS服务器的话可以用主机名或者域名的形式。
server3同理
基本的环境已经部署完毕
添加连接**(查看**并加入)/在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:下面表示已经通过了验证,可以建立通信了)
salt-key -a 可以指定添加minion
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
测试
测试服务器端是否能控制客户端
安装监听端口的命令lsof
监听状态是指网络服务端程序所处的一种状态,在该状态下,服务端程序等待客户端的链接
yum install -y lsof
通过端口查看,返现有两台机器与master端的端口建立了连接。
可以看到4505和4506两个端口的作用
安装python-setproctitle,查看python端口情况,每个进程的功能是啥
重启master
ps ax查看