RabbitMQ不一致的集群

Sas*_* Ru 6 mnesia rabbitmq

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

[
  {rabbit, [
    {cluster_nodes, {['rabbit@rmq01', 'rabbit@rmq02'], ram}},
    {tcp_listeners, [5674]}
  ]}
].
Run Code Online (Sandbox Code Playgroud)

我已经看到了这样的问题,现在我再次看到它:当有时所有集群都关闭时,如果第二个节点(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.
Run Code Online (Sandbox Code Playgroud)

在此第一个节点(rmq01)无法启动之后,由于rmq2不同意群集:

{"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"}}}}
Run Code Online (Sandbox Code Playgroud)

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

[root@rmq2 rabbitmq]# rabbitmqctl join_cluster rabbit@rmq1
Clustering node 'rabbit@rmq2' with 'rabbit@rmq1' ...
Error: mnesia_unexpectedly_running
Run Code Online (Sandbox Code Playgroud)

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

[root@rmq2 ~]# cat /var/lib/rabbitmq/mnesia/rabbit\@rmq2/cluster_nodes.config 
{['rabbit@rmq2'],['rabbit@rmq2']}.
Run Code Online (Sandbox Code Playgroud)

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

[root@rmq1 ~]# cat /var/lib/rabbitmq/mnesia/rabbit\@rmq1/cluster_nodes.config 
{['rabbit@rmq1','rabbit@rmq2'],['rabbit@rmq1']}.
Run Code Online (Sandbox Code Playgroud)

问题:

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

Sas*_* Ru 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.
Run Code Online (Sandbox Code Playgroud)

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

  • 注意:对于 Windows,mnesia 文件夹位于`C:\Users\<username>\AppData\Roaming\RabbitMQ\db`。我在无法备份的节点上删除了该文件夹,但它工作正常。谢谢! (2认同)