1)故障现象
# rabbitmqctl cluster_status
Cluster status of node 'rabbit@server-45' ...
[{nodes,[{disc,['rabbit@VM1','rabbit@VM2','rabbit@VM3']}]},
{running_nodes,['rabbit@VM2']},
{partitions,[{'rabbit@VM2',['rabbit@VM1','rabbit@VM3']}]}]
...done.
注意倒数第二行的partitions行,出现两个[]括号,则代表rabbitmq出现网络分区,一个分区是vm2,另一个是vm1和VM3
2)故障原因
若发生了network partition,cluster中的双方(或多方)将独立存在,每一方都将认为其他方已经崩溃了。Queues、bindings、exchanges可以各自独立的创 建、删除。对于Mirrored queues,处于不同network partition的每一方都会拥有各自的master,且各自独立的读写。(也可能发生其他诡异的行为)。若network partition恢复了,cluster的状态并不能自动恢复到network partition发生前的状态,直至采取措施进行修复。
a. 网络不稳定;
b. rabbitmq node虚拟机异常,但是异常后,快速恢复;
3)解决思路
从mq集群中选取一个主节点,然后重启从节点的mq服务。
4)问题解决
在3台vm中分别运行
lsof -nP -i:5672 |wc -l
选取其中数量最大的当选为主节点。然后重新启动从节点服务。若从节点服务重新启动失败,运行命令强制重启
rabbitmqctl force_boot VM2