Broken RabbitMQ集群不会重新启动

我在3台服务器上运行RabbitMQ,同一版本的Erlang和RabbitMQ:RabbitMQ 3.4.1,Erlang 17.3

一个节点在服务器2上崩溃。另外两个节点没有连接在一起:

服务器1:

[CentOS-62-64-minimal ~]$ sudo rabbitmqctl cluster_status Cluster status of node 'rabbit@CentOS-62-64-minimal' ... [{nodes,[{disc,['rabbit@CentOS-62-64-minimal',rabbit@de3,rabbit@mysql]}]}, {running_nodes,['rabbit@CentOS-62-64-minimal']}, {cluster_name,<<"rabbit@CentOS-62-64-minimal">>}, {partitions,[]}] 

服务器3:

 [de3 ~]$ sudo rabbitmqctl cluster_status Cluster status of node rabbit@de3 ... [{nodes,[{disc,['rabbit@CentOS-62-64-minimal',rabbit@de3,rabbit@mysql]}]}, {running_nodes,[rabbit@de3]}, {cluster_name,<<"rabbit@CentOS-62-64-minimal">>}, {partitions,[]}] 

重新启动并重新启动服务器3上的rabbitmq后,它终于连接到server1:

 [CentOS-62-64-minimal ~]$ sudo rabbitmqctl cluster_status Cluster status of node 'rabbit@CentOS-62-64-minimal' ... [{nodes,[{disc,['rabbit@CentOS-62-64-minimal',rabbit@de3,rabbit@mysql]}]}, {running_nodes,['rabbit@CentOS-62-64-minimal']}, {cluster_name,<<"rabbit@CentOS-62-64-minimal">>}, {partitions,[]}] 

为什么集群“打破”只有一个节点? 服务器3工作正常,但服务器1不是:“队列位于服务器closures”。

至于服务器2,它没有重新启动。 手动重新启动后,即使经过多次重置并删除/ var / lib / rabbitmq / mnesia /,我也无法重新连接到群集:

 [root@mysql ~]# rabbitmqctl cluster_status Cluster status of node rabbit@mysql ... [{nodes,[{disc,[rabbit@mysql]}]}, {running_nodes,[rabbit@mysql]}, {cluster_name,<<"[email protected]">>}, {partitions,[]}] [mysql ~]# rabbitmqctl stop_app Stopping node rabbit@mysql ... [root@mysql ~]# rabbitmqctl force_reset Forcefully resetting node rabbit@mysql ... [ysql ~]# rabbitmqctl join_cluster rabbit@CentOS-62-64-minimal Clustering node rabbit@mysql with 'rabbit@CentOS-62-64-minimal' ... Error: {ok,already_member} [mysql ~]# rabbitmqctl start_app Starting node rabbit@mysql ... [mysql ~]# rabbitmqctl cluster_status Cluster status of node rabbit@mysql ... [{nodes,[{disc,[rabbit@mysql]}]}, {running_nodes,[rabbit@mysql]}, {cluster_name,<<"[email protected]">>}, {partitions,[]}] 

我不知道哪里出了问题。 上次发生这种情况,我升级了RabbitMQ qnd Erlang到最新版本。

今天我有这个问题devise了一个故障breakfix事件中断文件,教我们的操作团队如何修复的东西。 我故意将一个节点非集群化,并且无法成功运行rabbitmqctl join_cluster因为集群认为该节点已经是成员。

将节点'rabbit @ node-1'与'rabbit @ node-0'聚类… done(already_member)。

最终,我工作的是rabbitmqctl forget_cluster_node rabbit@node-1从一个工作的集群节点。 一旦我这样做,我能够成功运行rabbtmqctl join_cluster rabbit@node-0

基于RabbitMQ集群文档,您的rabbitmqctl cluster_status输出看起来是错误的; running_nodes应该不仅包含运行命令的本地节点。 这表明他们不能正确对话,节点之间是否有防火墙?

Bodgit是正确的,我可以告诉你有一个可操作的兔子群集,你的configuration是错误的。 看起来每个节点都是自己的集群,只有自己作为当前运行的节点。

请参考关于设置群集的RabbitMQ文档。

您应该在每个节点上看到更类似于以下内容的内容:

  root@rabbit0:~# rabbitmqctl cluster_status Cluster status of node 'rabbit@rabbit0' ... [{nodes,[{disc,['rabbit@rabbit0','rabbit@rabbit1']}]}, {running_nodes,['rabbit@rabbit1','rabbit@rabbit0']}, {cluster_name,<<"[email protected]">>}, {partitions,[]}] ...done. root@rabbit1:~# rabbitmqctl cluster_status Cluster status of node 'rabbit@rabbit1' ... [{nodes,[{disc,['rabbit@rabbit0','rabbit@rabbit1']}]}, {running_nodes,['rabbit@rabbit0','rabbit@rabbit1']}, {cluster_name,<<"[email protected]">>}, {partitions,[]}] ...done. 

这是消毒,但订单和意图保持。

如果您希望队列故障切换,还需要configuration高可用性:

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