2016-04-15 221 views
0

我已经设置了一个RabbitMQ集群,它有3个节点:rabbit1,rabbit2和rabbit3,每个节点都在docker容器中运行。RabbitMQ集群不会选出新的主节点

所有队列在三个节点之间镜像,rabbit1是主节点。当我停止rabbit2或rabbit3的容器时,剩下的两个节点工作正常。如果我有一个队列中的3条消息,这些消息仍然存在于rabbit1和另一个仍在运行的节点上。

但是,如果我停止rabbit1,则会清空rabbit2和rabbit3的队列,直到我再次启动rabbit1。如果我向rabbit2或rabbit3发送消息,则收到该消息但未保存到队列中;而当rabbit1启动并且我发送了一些信息给rabbit2/rabbit3时,消息被保存并正确同步。

是否有任何方式或任何配置,我需要考虑,以便主机关闭时消息不从奴隶清空,但奴隶选择一个新的主人,或至少保存消息保存? 非常感谢您提前。

回答

0

设置群集是一回事,但您还需要配置队列镜像。默认情况下,不在其他节点上复制队列:您需要明确使用indicate which queue(s) must be replicated and how,使用策略。

以上链接的RabbitMQ文档作为几个用例的示例。

+0

我应该澄清一下:我设置了正确的策略来在所有备注中复制消息并自动进行同步。这就是为什么我很困惑,为什么它不工作。我的政策如下:rabbitmqctl set_policy ha-all“^ ha \”。 “{”“ha-mode”“:”“all”“”“ha-sync-mode”:“automatic”}“ – KaffeeKaethe

+0

所以根据这个”如果停止包含镜像队列主节点的RabbitMQ节点,某些其他节点上的一些从设备将被提升为主设备“它应该工作 – KaffeeKaethe

+0

您的队列的名称是什么? –

0

所以,我发现了问题:

我宣布我的代码中的队列,即使没有的RabbitMQ“计数”这些队列他们并不在管理和例如出现既与“被视为rabbitmqctl list_queues“。

如果我通过UI或通过rabbitmqadmin声明队列并让服务连接到已经存在的队列,那么它工作正常。

我想知道为什么队列没有出现在管理工具中,即使它们显然存在于某处(因为我可以读/推)。