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的断连,会影响生产者和消费者正常的业务处理。

猜你喜欢

转载自blog.51cto.com/11676712/2478870