[转帖]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是什么 消 ...
随机推荐
- DVWA Command Injection(命令注入)全等级
Command Injection(命令注入) 目录: Command Injection(命令注入) 1. Low 利用 1.nc反弹shell 2.msf上马 2.Medium 3. High 4 ...
- java:JDBC使用步骤(mysql)java小白的第一篇博客
1:环境要求 先在你的mysql里面创造一个数据库(并添加一点数据) 下载并导入驱动 2:jdbc的五大步骤 第一步:加载mysql驱动: 1 Class.forName("com.mysq ...
- Java并发(二十二)----wait notify的正确姿势
开始之前先看看,sleep(long n) 和 wait(long n) 的区别: 1) sleep 是 Thread 的静态方法,而 wait 是 Object 的方法 2) sleep 不需要强制 ...
- Ynoi
P4688 [Ynoi2016] 掉进兔子洞 序列,静态,求三个区间的可重集的交的大小,离线,\(n,Q\le 10^5\),3s,500MB 缺乏性质 \(\rightarrow\) bitset ...
- C#数据结构与算法系列(十七):时间复杂度(下)
1.常见的时间复杂度 常数阶:O(1) 对数阶:O(log2n) 线性阶:O(n) 线性对数阶:O(nlog2n) 平方阶:O(n^2) 立方阶:O(n^3) k次方阶:O(2^n) 常见的算法时间复 ...
- Ascend CL两种数据预处理的方式:AIPP和DVPP
摘要:本文介绍了昇腾CANN提供的两种数据预处理的方式:DVPP和AIPP,介绍了两者的功能.差别及联系,并以具体代码示例介绍了如何使用DVPP和AIPP的功能. 本文分享自华为云社区<了解As ...
- 华为云张昆:支持全场景全业务,GaussDB加速企业数字化转型
云.AI.5G等技术驱动,数据库行业迎来新的需求,云数据库也在不断演进升级.依托华为云与华为云Stack,通过全栈软硬件优化,华为云GaussDB进行了进阶与革新,以统一的架构,支持关系型与非关系型的 ...
- 8款最佳实践,保护你的 IaC 安全!
基础设施即代码(IaC) 是一种快速发展的技术,利用软件开发原则和实践,用软件配置基础设施.与传统的 IT 基础架构相比,IaC 可以更高效地交付软件.自动化还解锁了弹性配置的能力,该功能可在不同的负 ...
- 一文读懂火山引擎A/B测试的实验类型(2)——可视化实验
一. 概述 可视化实验,通过所见即所得的在线编辑(比如对页面中的图片.文字.颜色.位置等元素和属性进行编辑),降低在Web/H5页面优化的场景下,产品方和运营方使用A/B实验工具的成本,免除编码. 前 ...
- 抖音"凶猛"的幕后英雄,火山引擎 DataTester 累计做过 150 万次 A/B 测试
在国内互联网领域,字节跳动是最为推崇 A/B 测试的公司,旗下"抖音"."今日头条"两大最著名产品,连 APP 的名字都是来源于 A/B 测试. A/B 测试( ...