关于 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']}.
问题:
答案 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自定义将有所帮助。