RabbitMQ脑裂

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ脑裂相关的知识,希望对你有一定的参考价值。

网络原因导致MQ脑裂:
问题重现:
Network partition detected

Mnesia reports that this RabbitMQ cluster has experienced a network partition. There is a risk of losing data. Please read RabbitMQ documentation about network partitions and the possible solutions.

当出现网络分区时,不同分区里的节点会认为不属于自身所在分区的节点都已经挂了,对 queue、exchange、binding 的操作仅对当前分区有效。在 RabbitMQ 的默认配置下,即使网络恢复了也不会自动处理网络分区带来的问题从而恢复集群。RabbitMQ(3.1+)会自动探测网络分区,并且提供了配置来解决这个问题。

[
{rabbit,
[{tcp_listeners,[5672]},
{cluster_partition_handling, ignore}]
}
].
RabbitMQ 提供了三种配置:
1、ignore:默认配置,发生网络分区时不作处理,当认为网络是可靠时选用该配置
2、autoheal:各分区协商后重启客户端连接最少的分区节点,恢复集群(CAP 中保证 AP,有状态丢失)
3、pause_minority:分区发生后判断自己所在分区内节点是否超过集群总节点数一半,如果没有超过则暂停这些节点(保证 CP,总节点数为奇数个)

解决:
在出现问题的节点上执行:
sbin/rabbitmqctl stop_app
sbin/rabbitmqctl start_app

注意:rabbitmq集群不能采用kill -9 杀死进程,否则生产者和消费者不能及时识别mq的断连,会影响生产者和消费者正常的业务处理。

以上是关于RabbitMQ脑裂的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ 分区脑裂处理策略

rabbitmq 脑裂(网络分区)

rabbitmq脑裂以及监控添加

Mac 启动和关闭rabbitmq

RabbitMQ手册之rabbitmq-env.conf

rabbitmq页面出现/etc/rabbitmq/rabbitmq.config(not found)解决方法