【问题标题】:RabbitMQ Cluster does not elect new masterRabbitMQ Cluster 不选举新的 master
【发布时间】:2016-04-15 07:00:14
【问题描述】:

我已经建立了一个包含 3 个节点的 RabbitMQ 集群:rabbit1、rabbit2 和 rabbit3,每个节点都在 docker 容器中运行。

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

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

我是否需要考虑任何方式或任何配置,以便在主设备关闭时不会从从设备中清空消息,但从设备会选择新的主设备或至少保留消息? 非常感谢您。

【问题讨论】:

    标签: docker rabbitmq cluster-computing message-queue


    【解决方案1】:

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

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

    【讨论】:

    • 我应该澄清一下:我设置了正确的策略来复制所有笔记之间的消息并自动同步。这就是为什么我很困惑为什么它不起作用。我的政策是这样的:rabbitmqctl set_policy ha-all "^ha\." "{""ha-mode"":""all"", "ha-sync-mode":"automatic"}"
    • 所以根据这个“如果你停止一个包含镜像队列主节点的 RabbitMQ 节点,其他节点上的一些从节点将被提升为主节点”它应该可以工作
    • 您的队列名称是什么?
    • 我的队列被命名为 booking_cancelled、booking_confirmed、booking_deleted 和 booking_changed,并且使用 set_policy booking "^booking" "{"ha-mode":"all", "ha-sync-mode" 设置策略:"自动"}"
    【解决方案2】:

    所以我发现了问题:

    我在我的代码中声明了队列,即使 rabbitmq 确实“计算”了这些队列,它们也不会出现在管理之下,例如,也不能用“rabbitmqctl list_queues”查看。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 2015-06-21
      • 2019-05-16
      相关资源
      最近更新 更多