我在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高可用性: