saltstack
master 启动
REQSERVER
1 接收来自于client的请求,然后派发给空闲的Mworker
2 接收来自于minion的返回信息
4506 bind ROUTER
workers.ipc bind DEALER
Publisher
发布来自于client的请求给所有的minion
4505 bind PUB
publish_pull.ipc bind PULL
EVENTPUBLISHER
主要是通知client,任务执行的状态,结果!
master_event_pull.ipc bind pull
master_event_pub.ipc bind PUB
MWORKER
多进程,实际处理工作
wokers.ipc connect REP
minion
4505 connect SUB (接收执行任务,数据以字典格式发送)
4605 connect REQ (返回执行结果)
执行具体任务的时候
job flow
1 salt '*' test.ping
创建了一个client对象
2 client 4506 REQ connect
发送执行项目
3 REQSERVER把请求交给可用的MWOKER,通过wokers.ipc
4 首先,确定你有权利这么做。然后通过publish 把client交予的命令发送给所有的minion。ClearFuncs.publish()
MWokers 产生新的配对
publish_pull.ipc connect PUSH
5 你的woker宣告任务开始执行利用evnetpublish
master_event_pull.ipc connect push
然后eventpublish通过pub方式把消息传送给所有的client订阅者
(连接到master_event_pub.ipc)
6 消息加密以后通过Publisher发送给所有的mininon
7 所有的minion通过4505的订阅接收消息
8 minion先解密消息,再在本地执行操作,但是事先会判断对象是不是自己
9 minion把响应数据加密后发送给master的4506,master把数据交给可用Mwoker
10 Mwoker接收数据后解密,然后通过eventpublish 发送相对应的状态通知
11 此时你的LocalClient就接收到返回信息了。或者等待超时。
12 当所有的minion都返回了结果,或者超时,则此次任务结束。
salt-zmq.png
