SaltStack介绍简单配置安装及通信原理
Posted warren
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaltStack介绍简单配置安装及通信原理相关的知识,希望对你有一定的参考价值。
SaltStack介绍
一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。
salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等.
通信原理
SaltStack 采用 C/S模式
master和minion之间是通过秘钥对建立信任关系,建立信任关系以后,master进程起来会监听2个端口(4505和4506)
4505端口对应的是ZMQ的PUB system, 用于和minion建立长连接并发送数据
4506端口对应的是REP system,用于接受minion的数据
在minion端口启动minion进程,不会监听任何端口,minion会用随机的端口和master通信
master和minion之间的通信用到了zeromq消息队列
master每一次下发任务所有的minion都会收到任务,minion会根据任务条件判断是否需要返回数据给master
具体步骤如下
-
Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc
-
salt命令,将
cmd.run ls
命令从salt.client.LocalClient.cmd_cli
发布到master,获取一个Jodid,根据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执行结果,将结果输出到终端。
环境说明
CentOS7.2 64bit linux-node1.example.com 192.168.56.11 (salt-master和salt-minion) CentOS7.2 64bit linux-node2.example.com 192.168.56.12 (salt-minion)
在192.168..56.11安装salt-master和salt-minion并启动master
[[email protected] ~]# yum install -y salt-master salt-minion [[email protected]-node1 ~]# systemctl start salt-master
master上进入salt目录查看目录结构
[[email protected] ~]# cd /etc/salt/ [[email protected]-node1 salt]# ls master minion pki [[email protected]-node1 salt]# tree pki/ pki/ └── master ├── master.pem #私钥 ├── master.pub ├── minions ├── minions_autosign ├── minions_denied ├── minions_pre └── minions_rejected 6 directories, 2 files
在192.168.56.12和192.168.56.11上面安装salt-minon,修改minion配置文件master
[[email protected] ~]# yum install -y salt-minion
[[email protected] ~]vi /etc/salt/minion #修改master 和id默认是主机名
[[email protected]-node2 salt]# grep -n ^master minion 16:master: 192.168.56.11
[[email protected]-node2 ~]#systemctl start salt-minion
#在node1上面做同样的设置
在192.168.56.11上面查看pki情况,显示已经有2个minion准备加入
[[email protected]node1 salt]# tree pki pki ├── master │ ├── master.pem │ ├── master.pub │ ├── minions │ ├── minions_autosign │ ├── minions_denied │ ├── minions_pre #minion启动以后给master发送申请,master在这里可以看到正在申请加入的minion-id │ │ ├── linux-node1.example.com │ │ └── linux-node2.example.com │ └── minions_rejected └── minion ├── minion.pem └── minion.pub 7 directories, 6 files
在master上面接受minion加入
[[email protected] salt]# salt-key -A The following keys are going to be accepted: Unaccepted Keys: linux-node1.example.com linux-node2.example.com Proceed? [n/Y] Y Key for minion linux-node1.example.com accepted. Key for minion linux-node2.example.com accepted.
秘钥接受后,查看pki的密码变化,秘钥名称是和minionID名称一样(公钥)
[[email protected]node1 salt]# tree pki pki ├── master │ ├── master.pem │ ├── master.pub │ ├── minions #已经进入到master的minion │ │ ├── linux-node1.example.com │ │ └── linux-node2.example.com │ ├── minions_autosign │ ├── minions_denied │ ├── minions_pre │ └── minions_rejected └── minion ├── minion_master.pub ├── minion.pem └── minion.pub 7 directories, 7 files
在minion节点查看 master的公钥也给到了minion后面就可以正常通信了
[[email protected] salt]# tree pki/ pki/ └── minion ├── minion_master.pub #这个会传送给master,在master上面存放的文件名称是minionID ├── minion.pem └── minion.pub
在master上面查看key的信任关系
Accepted Keys: linux-node1.example.com linux-node2.example.com Denied Keys: Unaccepted Keys: Rejected Keys:
检查master和minion之间通信是否正常,如果返回True则说明正常
[[email protected] ~]# salt "*" test.ping linux-node1.example.com: True linux-node2.example.com: True
使用salt的执行模块进行维护管理 ,一般在公司使用会通过web界面包装定义作业,然后进行审批执行
[[email protected] ~]# salt "*" cmd.run "w" # "*" 是执行对象 cmd 是执行模块 run是cmd的方法 "w" 是方法的参数 也就是命令 linux-node2.example.com: 14:23:31 up 8:38, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root pts/0 192.168.56.1 13:46 21:23 0.15s 0.15s -bash linux-node1.example.com: 14:23:30 up 8:38, 1 user, load average: 0.01, 0.03, 0.05 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root pts/0 192.168.56.1 13:46 2.00s 0.43s 0.32s /usr/bin/python /usr/bin/salt * cmd.run w [[email protected]-node1 ~]# salt "*" cmd.run "date" linux-node2.example.com: Sun Oct 15 14:23:39 EDT 2017 linux-node1.example.com: Sun Oct 15 14:23:38 EDT 2017
以上是关于SaltStack介绍简单配置安装及通信原理的主要内容,如果未能解决你的问题,请参考以下文章