1. 一次rabbitmq故障问题解决记录
测试环境的rabbitmq集群,因为虚拟化平台故障,导致三台rabbitmq集群节点全部关机。修复虚拟化平台的故障,启动3台rabbitmq集群节点。故障如下:
1. rabbitmq磁盘节点正常;
2. rabbitmq两个内存节点无法启动;报错大体如下:
[root@SZ6FTST0MQ00104 rabbit@SZ6FTST0MQ00104]# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.
[root@SZ6FTST0MQ00104 rabbit@SZ6FTST0MQ00104]# tail -f /usr/local/rabbitmq_server/var/log/rabbitmq/rabbit\@SZ6FTST0MQ00104.log
=INFO REPORT==== 25-Jun-2019::16:17:22 ===
Error description:
{could_not_start,rabbit,
{cannot_create_standalone_ram_node,{rabbit,start,[normal,[]]}}}
Log files (may contain more information):
/usr/local/rabbitmq_server/var/log/rabbitmq/[email protected]
/usr/local/rabbitmq_server/var/log/rabbitmq/[email protected]
解决方案主要如下:
#1. 出现故障的内存节点操作:
cd /usr/local/rabbitmq_server/var/lib/rabbitmq/mnesia
[root@SZ6FTST0MQ00104 mnesia]# ll
total 8
drwxr-xr-x 5 root root 4096 Jun 25 16:54 rabbit@SZ6FTST0MQ00104
drwxr-xr-x 9 root root 4096 Jun 25 16:53 rabbit@SZ6FTST0MQ00104-plugins-expand
[root@SZ6FTST0MQ00104 mnesia]#
# 将两个目录删除掉,这两个目录是元数据信息
# 然后重新启动rabbitmq的服务 service rabbitmq-server start 发现服务已经启动成功
# 服务启动成功之后马上重新加入到rabbitmq的主节点(磁盘节点),会出现以下的报错:
Clustering node rabbit@SZ6FTST0MQ00104 with rabbit@SZ6FTST0MQ00101 ...
Error: {inconsistent_cluster,"Node rabbit@SZ6FTST0MQ00101 thinks it's clustered with node rabbit@SZ6FTST0MQ00104, but rabbit@SZ6FTST0MQ00104 disagrees"}
# 解决的办法就是在主节点(磁盘节点)上面强制删除两个内存节点的信息
2.2 磁盘节点操作
# 因为我们的master节点属于管理节点,内存节点都需要加入到以磁盘节点为主的集群,首先从磁盘节点删除掉两个内存节点的信息
rabbitmqctl forget_cluster_node rabbit@SZ6FTST0MQ00104
rabbitmqctl forget_cluster_node rabbit@SZ6FTST0MQ00100
# 在两个内存节点操作
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@SZ6FTST0MQ00101
abbitmqctl start_app
rabbitmqctl cluster_status
[root@SZ6FTST0MQ00100 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@SZ6FTST0MQ00100 ...
[{nodes,[{disc,[rabbit@SZ6FTST0MQ00101]},
{ram,[rabbit@SZ6FTST0MQ00104,rabbit@SZ6FTST0MQ00100]}]},
{running_nodes,[rabbit@SZ6FTST0MQ00104,rabbit@SZ6FTST0MQ00101,
rabbit@SZ6FTST0MQ00100]},
{cluster_name,<<"[email protected]">>},
{partitions,[]},
{alarms,[{rabbit@SZ6FTST0MQ00104,[]},
{rabbit@SZ6FTST0MQ00101,[]},
{rabbit@SZ6FTST0MQ00100,[]}]}]
[root@SZ6FTST0MQ00100 ~]#
#删除mnesia这个的目的就是清除集群的元数据信息,然后节点就会独立了,必须重新加入集群才可以。重新加入集群的时候报错的原因是因为master节点上面已经有两个内存节点的信息,需要先删除掉,然后再重新加入到集群,是吧。
还有我发现删除掉mnesia之后,重启rabbitmq服务,这个节点就会有集群信息,但是集群信息里面只有自己一个节点的信息;