一种RabbitMQ网络分区问题的解决方案

本文详述了在RabbitMQ集群中遇到的网络分区问题,分析了其原因和影响,并提出了一套实时监测与恢复服务的解决方案,包括通过Keepalived实现主备监控切换,以及利用haproxy和状态检测脚本确保集群状态的自动恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件。本文研究在日常测试中发现的RabbitMQ的一个问题——网络分区。叙述从发现问题,分析问题到解决问题的每一步思考,最后实现一套RabbitMQ检测恢复服务,保证RabbitMQ服务的可靠性。

发现问题——网络测试结果异常:

1、 场景复现

基本环境信息:

RabbitMQ版本

rabbitmq-server-3.6.6

erlang版本

erlang-R16B-03.17.el7

RabbitMQ集群节点数量

3

操作系统

CentOS 7.2

测试步骤以及现象:

在集群某两个个RabbitMQ节点执行管理网网卡闪断操作30次,持续大概一分半钟;

闪断结束后,查看集群健康状态,通过RabbitMQweb管理界面看到警告

 

通过rabbitmqctl cluster_status命令查到的确发生网络分区,并且无法自动恢复,集群服务不可用

2、 初步结论

环境网络异常会导致某一个或者某几个RabbitMQ节点不能与另外节点取得联系,那么Mnesia会认为另外一部分节点服务异常,同理另外一部分节点也会如此认为在此情况下,可能出现网络分区的问题。

分析问题——网络分区从中作梗:

1、 网络分区

官网对此的描述是RabbitMQ clusters do not tolerate network partitions well,即RabbitMQ集群无法很好的应对网络分区情况。RabbitMQ会将信息保存在Erlang的分布式数据库Mnesia中。而和网络分区相关的许多细节问题都和Mnesia的行为相关。Mnesia判定某个node失效的根据是,如果其他node无法连接该node的时间达到net_ticktime定义的时间以上。当这两个node恢复到能联系上的状态时,都会认为对端node

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值