salt的网络底层, 是基于ZeroMQ(2014.7之前). 所以其网络实现, 对应ZeroMQ里的数据模型.
由于Salt的数据通信, 是由Minion先发起的, 其通信流程如下:
(1) Minion启动时, 会连接Master的4506端口进行认证. 对应的模型为 REQ(minion)/ROUTER(Master). key认证通过后, master会返回自己的publisher端口(默认为4505)地址给minion
(2) Minion接收到master的publisher端口后, 会建立连接到Master的publisher端口(默认4505). 对应的模型为 SUB(minion)/PUB(master). 这就是为什么minion端只需要配置一个master port, 而无需配置master的publish port的原因.
(3) Master端通过salt command或API发送远程执行指令, 由于为PUB/SUB模型中, 所有的Minions均能收到该指令, 然后在minion本地进行targeting匹配, 如果匹配, 则进行执行, 反之直接忽略. 另外PUB/SUB是单向数据传递模型, 只能PUB-->SUB, 无法SUB-->PUB
(4) Minion执行完毕后, 会连接master的4506端口进行结果的发送, 对应的数据模型为(1)中的REQ/ROUTER. 与此同时, Master端也会监听event bus, 捕捉minion的返回结果, 并显示在控制台上.
在 2014年8月26日星期二UTC+8上午11时14分29秒,pierce写道: