RabbitMQ 队列主定位器在停止一个节点时不起作用

问题描述 投票:0回答:2

我们正在探索队列主定位器“min-masters”策略,当我们创建新队列时,它看起来工作正常,但是当由于某种原因我们需要停止集群的一个节点时,该节点上存在的每个队列节点被提升(master)到同一个节点,例如:

节点A有30个队列 节点 B 有 0 个队列 节点C有2个队列 节点 D 有 3 个队列

当我们停止节点 A 时,所有 30 个队列都会提升到节点 B,这就是预期的结果吗?我们希望这 30 个队列分布在节点 B、C 和 D 上...

请我们开始对此感到疯狂。大家都实验过这个场景吗?当以某种自动方式关闭节点 A 时,是否有可能实现我们期望发生的情况?

我们的政策定义如下:

上市政策... prod ha 队列 ^ {"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic","queue-master-locator":"min-masters"}

我们的集群中有 4 个节点,2 个 RAM 节点和 2 个磁盘节点。

当我们创建新队列时,该策略工作得很好,但当我们停止一个节点时,它什么也不做。

谢谢

rabbitmq high-availability policies
2个回答
1
投票

根据官方文档:

如果主服务器发生故障 [...] 运行时间最长的镜像将提升为主服务器

原因如下:

假设它最有可能与主机完全同步。

https://www.rabbitmq.com/ha.html


1
投票

我刚刚使用最新的预发布代码

3.6.13
尝试了您的特定场景,我可以重现它。问题是 RabbitMQ 不会移动现有的队列主控来重新平衡队列 - 它只会移动其主控存在于发生故障的节点上的队列。我已打开此问题来解决您在此处报告的内容。

您可以使用这个不支持的脚本来重新平衡集群中的队列主节点。如果您在运行脚本时遇到问题,请发布到

rabbitmq-users
,我会看到它。

© www.soinside.com 2019 - 2024. All rights reserved.