关于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)
问题:
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自定义将有所帮助.
| 归档时间: |
|
| 查看次数: |
10635 次 |
| 最近记录: |