一 问题描述

双节点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那一项是空的,就像这样:


  1. # rabbitmqctl cluster_status
  2. Cluster status of node rabbit@smacmullen ...
  3. [{nodes,[{disc,[hare@smacmullen,rabbit@smacmullen]}]},
  4. {running_nodes,[rabbit@smacmullen,hare@smacmullen]},
  5. {partitions,[]}]
  6. ...done.

然而当网络分区发生时,会变成这样:


  1. # rabbitmqctl cluster_status
  2. Cluster status of node rabbit@smacmullen ...
  3. [{nodes,[{disc,[hare@smacmullen,rabbit@smacmullen]}]},
  4. {running_nodes,[rabbit@smacmullen,hare@smacmullen]},
  5. {partitions,[{rabbit@smacmullen,[hare@smacmullen]},
  6. {hare@smacmullen,[rabbit@smacmullen]}]}]
  7. ...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

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

--本篇文章主要参考自:

https://blog.csdn.net/u013256816/article/details/74998896,

https://www.cnblogs.com/liyongsan/p/9640361.html

</article>

[转帖]Mnesia reports that this RabbitMQ cluster has experienced a network partition.的更多相关文章

  1. RabbitMQ概念及环境搭建(三)RabbitMQ cluster

    测试环境:VMS00781 VMS00782 VMS00386 (centos5.8) 1.先在三台机器上分别安装RabbitMQ Server 2.读取其中一个节点的cookie,并复制到其他节点( ...

  2. Centos7 安装配置 Rabbitmq Cluster

    Rabbitmq介绍 RabbitMQ是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能.健壮以及可伸缩性出名的 ...

  3. RabbitMQ Cluster群集安装配置

    #RabbitMQ Cluster群集安装配置 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ########## ...

  4. Linux下面安装RabbitMQ Cluster

    安装rabbitmq cluster: 设置 Erlang Cookie安装完RabbitMQ之后,在第一台机器上面启动RabbitMQ,然后在停止.复制node1上的/var/lib/rabbitm ...

  5. rabbit-mq cluster安装

    Centos6.5 安装 RabbitMQ3.6.5 一.安装编译工具 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel op ...

  6. RabbitMQ Network Partitions的预警和处理策略

    网络分区的意义 RabbitMQ的模型类似交换机模型,且采用erlang这种电信网络方面的专用语言实现.RabbitMQ集群是不能跨LAN部署(如果要WAN部署需要采用专门的插件)的,也就是基于网络情 ...

  7. RabbitMQ脑裂问题解决方案调查

    现象: RabbitMQ GUI上显示 Network partition detectedMnesia reports that this RabbitMQ cluster has experien ...

  8. RabbitMQ脑裂

    在RabbitMQ3.4.x中会出现脑裂的现象,本文通过实验验证此脑裂现象,愿小伙伴们少走弯路. Preview 网上有两篇帖子(需要FQ) https://groups.google.com/for ...

  9. rabbitmq重装之后无法加入原有cluster的bug解析

    背景: 一台controller node,一台compute1节点 两台机器的host文件均已经进行hostname解析 两节点本已经加入了同一rabbitmq cluster 但controlle ...

  10. 分享 rabbitMQ入门详解

    原文地址http://blog.csdn.net/cugb1004101218/article/details/21243927 目录(?)[-] rabbitMQ说明文档 rabbitMQ是什么 消 ...

随机推荐

  1. Python——第四章:生成器(Generators)

    生成器(generator):    生成器的本质就是迭代器 创建生成器的两种方案:        1. 生成器函数        2. 生成器表达式 生成器函数        生成器函数中有一个关键 ...

  2. 部署堡垒机5——安装Core

    部署jumpserver服务核心组件Core 一.前期准备 一个后台程序,基本上都是需要依赖于数据库才能运行,后台程序在启动的时候,代码就回去连接数据库,保证数据库,正确启动,且可以正确连接,否则后台 ...

  3. grafana添加组件

    ###安装grafana插件需联网安装[root@zabbix grafana]# grafana-cli plugins list-remote #查询可用的插件id: abhisant-druid ...

  4. ClickHouse(21)ClickHouse集成Kafka表引擎详细解析

    目录 Kafka表集成引擎 配置 Kerberos 支持 虚拟列 资料分享 参考文章 Kafka表集成引擎 此引擎与Apache Kafka结合使用. Kafka 特性: 发布或者订阅数据流. 容错存 ...

  5. 十分钟从入门到精通(上)——OBS权限配置

    [摘要]作为公有云的数据底座,大量的应用场景产生的数据都会存储到OBS对象存储服务中,如直播.电商.大数据可视化.机器学习.物联网等.作为公有云的海量存储基础服务, OBS提供了灵活的权限配置功能,解 ...

  6. C++多线程强制终止

    摘要:实际上,没有任何语言或操作系统可以为你提供异步突然终止线程的便利,且不会警告你不要使用它们. 本文分享自华为云社区<如何编写高效.优雅.可信代码系列(1)--C++多线程强制终止>, ...

  7. 对话 BitSail Contributor | 吴畅:从好奇,到深入

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 2022 年 10 月,字节跳动 BitSail 数据引擎正式开源.同期,社区推出 Contributor 激励计 ...

  8. Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号

    Jenkins Pipeline SSH Publisher 环境变量.参数引用 要用双引号 在 Pipeline 脚本中,如果要使用变量,就必须使用 " 双引号 pipeline { ag ...

  9. MySQL 添加用户,分配权限

    1. 添加用户 CREATE USER `vipsoft`@`%` IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 2. 权限配置 GRANT 权限1,权限 ...

  10. Flutter如何有效地退出程序

    今天博主来谈一个开发Flutter App的小技巧--怎样有效地退出程序. 这种方法典型的应用场景就是用户许可协议的同意与否.从用户的角度讲,虽然大部分人都会无脑点击"同意",但我 ...