RabbitMQ不一致的集群

时间:2014-01-09 10:54:56

标签: rabbitmq mnesia

关于 RabbitMQ v3.1.5 群集的几个问题。 我有一个包含2个节点的集群, rabbitmq.config 在两个节点上都是这样的:

[
  {rabbit, [
    {cluster_nodes, {['rabbit@rmq01', 'rabbit@rmq02'], ram}},
    {tcp_listeners, [5674]}
  ]}
].

我已经看过这样的问题了,现在我又在看它了: 当有时所有集群都关闭时,如果第二个节点(rmq02)在第一个节点(rmq01)之前启动,它'忘记'关于rmq01:

[root@rmq2 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@rmq2' ...
[{nodes,[{disc,['rabbit@rmq2']}]},
 {running_nodes,['rabbit@rmq2']},
 {partitions,[]}]
...done.

由于rmq2对群集不一致,第一个节点(rmq01)无法启动之后:

{"init terminating in do_boot",{rabbit,failure_during_boot,{error,{inconsistent_cluster,"Node 'rabbit@rmq1' thinks it's clustered with node 'rabbit@rmq2', but 'rabbit@rmq2' disagrees"}}}}

我尝试将rmq01添加到rmq02,但在此之前我似乎必须使用stop_app:

[root@rmq2 rabbitmq]# rabbitmqctl join_cluster rabbit@rmq1
Clustering node 'rabbit@rmq2' with 'rabbit@rmq1' ...
Error: mnesia_unexpectedly_running

在这里,我看到rmq02忘记了rmq01:

[root@rmq2 ~]# cat /var/lib/rabbitmq/mnesia/rabbit\@rmq2/cluster_nodes.config 
{['rabbit@rmq2'],['rabbit@rmq2']}.

同时在rmq01上(正确配置):

[root@rmq1 ~]# cat /var/lib/rabbitmq/mnesia/rabbit\@rmq1/cluster_nodes.config 
{['rabbit@rmq1','rabbit@rmq2'],['rabbit@rmq1']}.

问题:

  1. rmq02 是否正常忘记 rmq01 ,或者我有一些错误配置?为什么会这样?
  2. 如果没问题,是否可以在没有 rmq02 停机时间的情况下修复群集运行状况(我的意思是没有stop_app)?

1 个答案:

答案 0 :(得分:12)

我找到了解决问题#2的方法,在没有停机的情况下修复群集运行状况,我们需要删除不一致节点上的所有mnesia数据:

[root@rmq01 ~]# rm -rf /var/lib/rabbitmq/mnesia/

[root@rmq01 ~]# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.
[root@rmq01 ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@rmq01' ...
[{nodes,[{disc,['rabbit@rmq02']},{ram,['rabbit@rmq01']}]},
 {running_nodes,['rabbit@rmq02','rabbit@rmq01']},
 {partitions,[]}]
...done.

我仍然不明白如何避免这种情况(问题#1),也许一些mnesia自定义将有所帮助。