Salt多主架构扩展问题:新增Master of Masters后结果异常
解决Salt多MOM+Syndic架构下结果拆分的问题
从你的描述来看,问题的核心在于Syndic默认只会将Minion的返回发送给第一个成功连接的MOM,加上两个MOM的Jobs缓存相互独立,导致每个MOM只能看到部分执行结果。以下是针对性的解决方案:
1. 配置Syndic向所有MOM同步返回结果
编辑Syndic的配置文件(通常为/etc/salt/syndic),添加或修改以下参数:
syndic_multimaster_return: True
这个参数会强制Syndic把Minion的执行结果同时发送给syndic_master列表中配置的所有MOM,而不是仅发送给第一个建立连接的节点。
2. 实现MOM之间的Jobs缓存共享
两个MOM默认各自维护独立的Jobs缓存,即使Syndic把结果同步过来,另一个MOM也无法读取不属于自己的任务数据。需要让它们共享同一个缓存后端,以Redis为例:
在两个MOM的/etc/salt/master中添加以下配置:
# 指定Redis作为共享缓存后端 job_cache: redis # Redis连接参数(根据你的实际环境调整) redis.host: 10.xxx.xxx.xxx redis.port: 6379 # 如果Redis设置了密码,补充以下配置 # redis.password: your_secure_password
你也可以选择MySQL、PostgreSQL或Memcached作为共享后端,只需替换对应配置参数即可。
3. 验证Syndic对所有MOM的信任状态
确保Syndic已经信任了两个MOM的Master密钥:
在Syndic节点上执行:
salt-key -L
检查Accepted Keys列表中是否包含两个MOM的master_id。如果没有,需要在Syndic上手动接受:
salt-key -a <mom1_master_id> salt-key -a <mom2_master_id>
4. 重启相关服务使配置生效
完成上述配置后,依次重启Syndic和两个MOM的Master服务:
# 重启Syndic服务 systemctl restart salt-syndic # 重启第一个MOM的Master服务 systemctl restart salt-master # 重启第二个MOM的Master服务 systemctl restart salt-master
验证效果
- 在两个MOM上分别执行
salt '*' test.ping,现在应该能收到所有Minion的返回结果,不会再出现部分Minion提示无响应的情况。 - 取其中一个任务的JID,在两个MOM上执行
salt-run jobs.lookup_jid <JID>,确认两个节点都能查询到完整的任务执行结果。
内容的提问来源于stack exchange,提问作者arkpoah
相关产品推荐
相关产品推荐

