RabbitMQ:如何创建同步集群

时间:2012-12-19 19:05:49

标签: synchronization cluster-computing rabbitmq high-availability

我有一个包含3个节点的RabbitMQ群集(版本3.0.1)。我想,我的队列每次都可以在所有3个节点上使用 我像这样创建集群:

node1:
node2:rabbitmqctl join_cluster rabbit @ node1
node3:rabbitmqctl join_cluster rabbit @ node1

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

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

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

3 个答案:

答案 0 :(得分:3)

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

  

可以通过设置队列将队列设置为自动同步   ha-sync-mode策略密钥自动。 ha-sync-mode也可以设置为   手册。如果未设置,则假定为手动。

查看http://www.rabbitmq.com/ha.html了解详情。

答案 1 :(得分:1)

对你而言,对不起,这是不受支持的。当新节点加入群集时,它不会收到任何现有消息。

来自非同步奴隶 http://www.rabbitmq.com/ha.html

  

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

<强>更新

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

答案 2 :(得分:1)

我决定通过编辑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

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