我有一个负载均衡器,即aws elb 所有的酒吧/子将来自那个榆树 两名蚊子经纪人A&蚊子经纪人B在elb下 一个mosquitto经纪人在这两个经纪人之间同步主题(mosquitto.broker.sync)
这就是mosquitto代理在节点A和B之间同步主题的配置看起来很相似
mosquitto.broker.sync: ##
connection mosquitto-bridge
try_private false
address mosquitto.broker.A:1883 mosquitto.broker.B:1883
start_type automatic
round_robin true
notifications true
topic # both 2 "" ""
但这不起作用,只能连接到mosquitto.broker.A而不连接mosquitto.broker.B
首先撤消所有尝试
所以我尝试了其他方式 从mosquitto.broker.sync中删除了所有桥接配置(只是为了避免循环)
并将此配置添加到节点
mosquitto.broker.A:##
connection mosquitto-bridge
try_private false
address mosquitto.broker.sync:1883
start_type automatic
round_robin true
notifications true
topic # both 2 "" ""
mosquitto.broker.B:##
connection mosquitto-bridge
try_private false
address mosquitto.broker.sync:1883
start_type automatic
round_robin true
notifications true
topic # both 2 "" ""
mosquitto.broker.sync:##
#connection mosquitto-bridge
#try_private false
#address mosquitto.broker.A:1883 mosquitto.broker.B:1883
#start_type automatic
#round_robin true
#notifications true
#topic # both 2 "" ""
但在这种情况下,我发送邮件的节点已经复制到它上面
答案 0 :(得分:4)
对于第一次尝试,问题是因为address
字段是按顺序尝试连接的代理列表,而不是同时连接的代理列表。
如何解释此列表取决于round_robin
设置。
如果设置为 true ,则代理将连接到列表中的第一个,当连接断开时,它将尝试列表中的下一个,在每次重新连接时向下移动列表。
如果设置为 false ,它将连接到第一个并将其视为首选连接。当连接断开时,它将尝试重新连接,如果失败则会向下移动列表,但会定期尝试重新连接到列表中的拳头。
要真正解决您的问题,请尝试以下方法:
mosquitto.broker.A
connection sync-a
try_private false
address mosquitto.broker.sync:1883
notifications true
topic # out 2 "" A/
topic # in 2 "" B/
mosquitto.broker.B
connection sync-b
try_private false
address mosquitto.broker.sync:1883
notifications true
topic # out 2 "" B/
topic # in 2 "" A/
保持同步机原样。
这使用主题前缀来确保不形成循环。这也意味着您可以跟踪哪个代理正在同步机上执行什么操作,因为所有主题都以它们来自的机器为前缀。