首页 > 其他分享 >RabbitMQ集群脑裂故障处理

RabbitMQ集群脑裂故障处理

时间:2022-09-20 16:47:25浏览次数:53  
标签:mqcluster rabbit1 RabbitMQ cluster 脑裂 集群 rabbit2

网络抖动或故障均可能会导致RabbitMQ集群发生脑裂故障,在不同节点的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. 

此时集群的节点与节点间通讯失败了,但是各自都能独立提供服务,这种情况也可能导致数据处理出现异常。

故障分析与处理:

分别到集群各个节点上,执行rabbitmqctl cluster_status命令,查看RabbitMQ集群信息。

注意看partitions值为空数组,意思是集群网络没有分区:

# rabbitmqctl cluster_status
Cluster status of node rabbit1@mqcluster ...
[{nodes,[{disc,[rabbit1@mqcluster,rabbit2@mqcluster]}]},
{running_nodes,[rabbit1@mqcluster,rabbit2@mqcluster]},
{partitions,[]}]

脑裂故障发生时partitions值非空,意思是集群网络出现分区:

# rabbitmqctl cluster_status
Cluster status of node rabbit1@mqcluster ...
[{nodes,[{disc,[rabbit1@mqcluster,rabbit2@mqcluster]}]},
{running_nodes,[rabbit1@mqcluster,rabbit2@mqcluster]},
{partitions,[{rabbit1@mqcluster,[rabbit2@mqcluster]},{rabbit2@mqcluster,[rabbit1@mqcluster]}]}]

参考网上的一些解决方案后,处理如下:

在出现以上网络分区问题的节点上执行: 

rabbitmqctl stop_app

rabbitmqctl start_app

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

---------------

脑裂后自动修复的方法
修改节点的配置文件
在/etc/rabbitmq下新建rabbitmq.conf,加入:

[
  {
    rabbit,
   	[
   	  {tcp_listeners,[5672]},
   	  {cluster_partition_handling, autoheal}
   	]
  }
]

  

若已有配置文件,则直接添加{cluster_partition_handling, autoheal}配置,详情介绍可去官网搜索。

然后重启RabbitMQ:systemctl restart rabbitmq-server

 

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

标签:mqcluster,rabbit1,RabbitMQ,cluster,脑裂,集群,rabbit2
From: https://www.cnblogs.com/Don/p/16711567.html

相关文章

  • Hadoop集群启动没有DataNode进程
    问题状况:问题原因:在启动Hadoop之前,进行了多次格式化,导致DataNode的ID发生了变化解决方案:我们可以删除从节点所有的DataNode资料,并重新格式化解决流程1、根据core-si......
  • 集群启动/停止方式总结
    1)各个模块分开启动/停止(配置ssh是前提)常用(1)整体启动/停止HDFSstart-dfs.sh/stop-dfs.sh(2)整体启动/停止YARNstart-yarn.sh/stop-yarn.sh2)各个服务组件逐一启动/停......
  • MongoDB集群的variety执行
    创建结果数据库   1.创建一个新的存储数据库用来保存分析结果     usekeyTest     db.createUser({       user:"root",   ......
  • DSC集群更换IP步骤
    1、    通过监视器关闭DB[dmdba@localhostbin]$./dmcssmINI_PATH=/home/dmdba/dsc_config/dmcssm.iniepstopGRP_DAMENG(数据库组名)2、    导出并修改dmdc......
  • redis集群槽位16384
    单机模式主从模式哨兵模式(sentinel)集群模式(cluster)RedisCluster采用虚拟槽分区,所有的键根据哈希函数映射到0~16383个整数槽内,每个节点负责维护一部分槽以及槽......
  • Redis集群:Sentinel哨兵模式
    Redis集群:Sentinel哨兵模式(详细图解)(biancheng.net)在Redis主从复制模式中,因为系统不具备自动恢复的功能,所以当主服务器(master)宕机后,需要手动把一台从服务器(slave)切......
  • centos安装rabbitMQ
    rabbitmq下载地址https://github.com/rabbitmq/rabbitmq-server/releaseserlang下载地址https://github.com/rabbitmq/erlang-rpm/releases如:CentOS7可以选择 rabbitmq-s......
  • 连接RabbitMQ
    varfactory=newConnectionFactory();factory.HostName="localhost";factory.UserName="guest";factory.Password="guest"......
  • rabbitMQ中将ReadOnlyMemory转换为byte []
    rabbitmq-C#将ReadOnlyMemory转换为byte[]发布于2020-07-3111:16:05给定ReadOnlyMemory结构,我想将流转换为字符串我有以下代码:varbody=ea.Body;//ea.Bod......
  • 集群分发脚本
    在root用户下的bin目录下创建xsync文件vimxsync在文件中编写如下代码#!/bin/bash#1获取输入参数个数,如果没有参数,直接退出pcount=$#if((pcount==0));thenecho......