1 RabbitMQ的GUI界面报错

报错: Network partition detected,Mnesia reports that this RabbitMQ cluster has experienced a network partition.
日志信息:Jul 14 14:04:30 k8s-master Keepalived_vrrp[27774]: /etc/keepalived/haproxy_check.sh exited with status 1

如果一个节点在一段时间内(默认是60秒)无法与对等端节点联系,则节点将认为其对等节点是否已关闭。如果两个节点重新接触,都认为另一个已关闭,则这些节点将确定已发生分区

原因:集群脑裂

2 裂脑恢复的方法

(1)方法一

  • 首先选择一个最信任的分区(master多的节点)。这个分区将有系统状态(模式、消息)使用的权限;其他分区上发生的任何更改都将丢失。
  • 停止其他分区中的所有节点,然后重新启动。这些节点重新加入集群时,将从受信任的分区恢复状态。
  • 重新启动受信任分区中的所有节点以清除警告。

(2)方法二

  • 停止整个集群并重新启动,但是确保启动的第一个节点来自受信任的分区

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

3 网络分区处理策略

参考官网:https://www.rabbitmq.com/partitions.html

(1)pause-minority模式:必须奇数节点,rabbitmq节点感知集群中其他节点down掉时,会判断与自己形成集群的节点个数在整个集群中的比例是否超过一半。如果是多数派,则正常工作,如果是少数派,则会停止rabbit应用(rabbitmqctl stop_app)并不断检测直到自己成为多数派的一员后再次启动rabbit应用
(2)pause-if-all-down 模式:RabbitMQ会自动关闭不能和list中节点通信的节点,如果一个节点与list中的所有节点都无法通信时,自关闭其自身。如果list中的所有节点都down时,其余节点如果是ok的话,也会根据这个规则去关闭其自身,此时集群中所有的节点会关闭。如果某节点能够与list中的节点恢复通信,那么会启动其自身的RabbitMQ应用,慢慢的集群可以恢复。
(3)autoheal模式:当认为发生网络分区时,RabbitMQ会自动决定一个获胜的(winning)分区,然后重启不在这个分区中的节点以恢复网络分区。一个获胜的分区是指客户端连接最多的一个分区。如果产生一个平局,既有两个或者多个分区的客户端连接数一样多,那么节点数最多的一个分区就是获胜的分区。如果此时节点数也一样多,将会以一种特殊的方式来挑选获胜分区。
(4)默认行为称为忽略模式。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐