【问题标题】:RabbitMQ: How can i create a synchronised ClusterRabbitMQ:如何创建同步集群
【发布时间】:2013-06-12 05:00:20
【问题描述】:

我有一个带有 3 个节点的 RabbitMQ 集群(版本 3.0.1)。我希望我的队列每次都在所有 3 个可用节点上。
我这样创建集群:

节点1:
节点2:rabbitmqctl join_cluster rabbit@node1
node3:rabbitmqctl join_cluster rabbit@node1

在此之后,我设置了以下策略:

模式:^(?!amq.).*
定义:ha-mode: all

如果我现在开始我的 3 个节点并在我的 1 个节点中写入一些想法,那么我在所有 3 个节点上都有它并且它可以工作。但是,如果与其中 1 个节点的连接断开,并且该节点在一段时间后又回来了,则该节点不再与其他节点同步。
我该如何解决这个问题?我希望所有节点每次都同步,即使在停机之后也是如此。

【问题讨论】:

    标签: synchronization cluster-computing rabbitmq high-availability


    【解决方案1】:

    现在 3.1.x 版本有一个选项 ha-sync-mode 可以设置为自动,这可以解决您的问题:

    队列可以设置为自动同步,方法是设置 ha-sync-mode 策略键为自动。 ha-sync-mode 也可以设置为 手动的。如果未设置,则假定为手动。

    查看http://www.rabbitmq.com/ha.html了解更多信息。

    【讨论】:

      【解决方案2】:

      我决定通过编辑 rabbitmq-server init.d 脚本 (/etc/init.d/rabbitmq-server) 来解决这个问题。

      在成功启动后添加以下行(在 rabbitmq_start 函数中)将导致新加入的成员同步所有队列:

      $CONTROL list_queues | cut -f1 | tail -n +2 | head -n -1 | xargs -n 1 $CONTROL sync_queue > /dev/null
      

      即使它不是最干净的解决方案,它仍然是一个解决方案。不喜欢修改分发文件。

      【讨论】:

        【解决方案3】:

        抱歉,您的坏消息,但这是不受支持的。当新节点加入集群时,它不会收到任何现有消息。

        来自非同步从站 http://www.rabbitmq.com/ha.html

        节点可以随时加入集群。根据队列的配置,当一个节点加入集群时,队列可能会在新节点上添加一个从属节点。此时,新的 slave 将是空的:它不会包含任何现有的队列内容,并且目前没有同步协议。这样的从站将接收发布到队列的新消息,因此随着时间的推移将准确地表示镜像队列的尾部。

        更新:

        答案适用于 2.8.x 版本的 RabbitMQ

        【讨论】:

          猜你喜欢
          • 2015-12-17
          • 2014-08-15
          • 2016-03-28
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多