[转帖]Mnesia reports that this RabbitMQ cluster has experienced a network partition.
一 问题描述
双节点RabbitMQ集群发生了脑裂,节点日志报错:
[error] <0.6318.0> Mnesia(rabbit@pc2): ** ERROR ** mnesia_event got {inconsistent_database, running_partitioned_network, rabbit@pc1}
Rabbitmq管理界面上也提示报错:
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.

两个RabbitMQ节点互相识别不到对方:


/*
可以这样模拟脑裂故障:
在其中一台服务器上封禁默认的内部通信端口25672:
iptables -A INPUT -p tcp --dport 25672 -j DROP
iptables -A OUTPUT -p tcp --dport 25672 -j DROP
观察两台服务器的日志,会有如下输出:
节点1:

节点2:

注意此时只判定出net_tick_timeout,要等网络恢复之后,即解封25672端口之后才会判定出现网络分区。
解封25672端口:
iptables -D INPUT 1
iptables -D OUTPUT 1
两个节点的日志都会提示发生了脑裂:
2021-04-13 01:55:35.219 [error] <0.6318.0> Mnesia(rabbit@pc2): ** ERROR ** mnesia_event got {inconsistent_database, running_partitioned_network, rabbit@pc1}

*/
二 出错原因
这是由于网络问题导致集群出现了脑裂。
正常情况下,通过rabbitmqctl cluster_status命令查看到的信息中partitions那一项是空的,就像这样:
-
# rabbitmqctl cluster_status
-
Cluster status of node rabbit@smacmullen ...
-
[{nodes,[{disc,[hare@smacmullen,rabbit@smacmullen]}]},
-
{running_nodes,[rabbit@smacmullen,hare@smacmullen]},
-
{partitions,[]}]
-
...done.
然而当网络分区发生时,会变成这样:
-
# rabbitmqctl cluster_status
-
Cluster status of node rabbit@smacmullen ...
-
[{nodes,[{disc,[hare@smacmullen,rabbit@smacmullen]}]},
-
{running_nodes,[rabbit@smacmullen,hare@smacmullen]},
-
{partitions,[{rabbit@smacmullen,[hare@smacmullen]},
-
{hare@smacmullen,[rabbit@smacmullen]}]}]
-
...done.
三 临时解决办法
在出现问题的节点上执行: rabbitmqctl stop_app
在出现问题的节点上执行: rabbitmqctl start_app
注意:mq集群不能采用kill -9 杀死进程,否则生产者和消费者不能及时识别mq的断连,会影响生产者和消费者正常的业务处理。
四 配置脑裂后自动修复
4.1 修改节点的配置文件
在/etc/rabbitmq下新建rabbitmq.conf,加入:
[
{rabbit,
[{tcp_listeners,[5672]},
{cluster_partition_handling, autoheal}
]}
]
若已有配置文件,则直接添加{cluster_partition_handling, autoheal}配置,示例:
vi /etc/rabbitmq/rabbitmq.config

4.2 重启rabbitmq
systemctl restart rabbitmq-server
再次模拟脑裂,发现会通过重启其中一个节点自动恢复此问题:

--本篇文章主要参考自:
</article>
[转帖]Mnesia reports that this RabbitMQ cluster has experienced a network partition.的更多相关文章
- RabbitMQ概念及环境搭建(三)RabbitMQ cluster
测试环境:VMS00781 VMS00782 VMS00386 (centos5.8) 1.先在三台机器上分别安装RabbitMQ Server 2.读取其中一个节点的cookie,并复制到其他节点( ...
- Centos7 安装配置 Rabbitmq Cluster
Rabbitmq介绍 RabbitMQ是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能.健壮以及可伸缩性出名的 ...
- RabbitMQ Cluster群集安装配置
#RabbitMQ Cluster群集安装配置 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ########## ...
- Linux下面安装RabbitMQ Cluster
安装rabbitmq cluster: 设置 Erlang Cookie安装完RabbitMQ之后,在第一台机器上面启动RabbitMQ,然后在停止.复制node1上的/var/lib/rabbitm ...
- rabbit-mq cluster安装
Centos6.5 安装 RabbitMQ3.6.5 一.安装编译工具 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel op ...
- RabbitMQ Network Partitions的预警和处理策略
网络分区的意义 RabbitMQ的模型类似交换机模型,且采用erlang这种电信网络方面的专用语言实现.RabbitMQ集群是不能跨LAN部署(如果要WAN部署需要采用专门的插件)的,也就是基于网络情 ...
- RabbitMQ脑裂问题解决方案调查
现象: RabbitMQ GUI上显示 Network partition detectedMnesia reports that this RabbitMQ cluster has experien ...
- RabbitMQ脑裂
在RabbitMQ3.4.x中会出现脑裂的现象,本文通过实验验证此脑裂现象,愿小伙伴们少走弯路. Preview 网上有两篇帖子(需要FQ) https://groups.google.com/for ...
- rabbitmq重装之后无法加入原有cluster的bug解析
背景: 一台controller node,一台compute1节点 两台机器的host文件均已经进行hostname解析 两节点本已经加入了同一rabbitmq cluster 但controlle ...
- 分享 rabbitMQ入门详解
原文地址http://blog.csdn.net/cugb1004101218/article/details/21243927 目录(?)[-] rabbitMQ说明文档 rabbitMQ是什么 消 ...
随机推荐
- 2023-08-26:请用go语言编写。开心一下的智力题: 有一个村庄,一共250人, 每一个村民要么一定说谎,要么只说真话, 村里有A、B、C、D四个球队,且每个村民只会喜欢其中的一支球队, 但是说
2023-08-26:请用go语言编写.开心一下的智力题: 有一个村庄,一共250人, 每一个村民要么一定说谎,要么只说真话, 村里有A.B.C.D四个球队,且每个村民只会喜欢其中的一支球队, 但是说 ...
- 华为云 UCS (On-Premises):运行在您本地数据中心的CCE集群
摘要:华为云分布式云原生UCS服务,是面向分布式云场景下的新一代云原生产品,提供UCS (Huawei Cloud).UCS (Partner Cloud).UCS (Multi-Cloud).UCS ...
- 关于 DataLeap 中的 Notebook,你想知道的都在这
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 DataLeap 是火山引擎数智平台 VeDI 旗下的大数据研发治理套件产品,帮助用户快速完成数据集成.开发.运维 ...
- 配置阿里云docker镜像加速
配置好后 重新加载一下 daemon [root@centos-linux jimmy]# systemctl daemon-reload [root@centos-linux jimmy]# sys ...
- Python网络编程:ZeroMQ
大家好,我是老胡.最近在和小伙伴们一起搞事情,我是学统计出身,编程能力其实很差,有点拖后腿了.所以需要恶补基础,这个系列会更新几篇,感兴趣的同学可以一起学习交流. ZeroMQ概述 ZeroMQ(又名 ...
- 从数据链路到神秘的MAC地址和ARP协议
引言 链路是指从一个结点到相邻结点的一段物理线路.数据链路是在链路的基础上增加了一些必要的硬件和软件.这些硬件包括网络适配器,而软件则包括协议的实现.在网络中,主机.路由器等设备都必须实现数据链路层. ...
- CH0304 IncDec Sequence (差分)
题目链接: https://ac.nowcoder.com/acm/contest/999/B 思路:(见图中解释) AC代码: #include<bits/stdc++.h> using ...
- 🚀Flutter应用程序的加固原理
在移动应用开发中,Flutter已经成为一种非常流行的技术选项,可以同时在Android和iOS平台上构建高性能.高质量的移动应用程序.但是,由于其跨平台特性,Flutter应用程序也面临着一些安 ...
- CPLEX通过Python API获取Gap值的方法
写在前面 最近在使用Cplex求解模型,尽管Cplex的Python API会自动输出引擎日志,但在多次求解中一次次看引擎日志找Gap值并做实验记录很麻烦,所以需要找到获取Gap值的方法.然而我在Cp ...
- 【驱动】以太网扫盲(三)PHY的控制器驱动框架分析
1. 概述 PHY芯片为OSI的最底层-物理层(Physical Layer),通过MII/GMII/RMII/SGMII/XGMII等多种媒体独立接口(介质无关接口)与数据链路层的MAC芯片相连,并 ...