文档章节

【转载】RabbitMQ 网络分区问题

摩云飞
 摩云飞
发布于 2014/09/09 18:43
字数 463
阅读 427
收藏 2

RabbitMQ 集群的 网络分区容错性 并不是非常高,在网络经常发生分区时会有些问题,最明显的就是 脑裂问题

官方文档是这样介绍的:
RabbitMQ clusters do not tolerate network partitions well. If you are thinking of clustering across a WAN, don't. You should use federation or the shovel instead.
从中我们可以看出, 广域网环境下不应该使用集群,而应该使用 federation 或者 shovel 来解决
不过即使是 局域网 环境下 ,网络分区也不可能完全避免 网络设备(比如中继设备、网卡)出现故障也会导致网络分区。  
Network partition detected: Mnesia reports that this RabbitMQ cluster has experienced a network partition. This is a dangerous situation. RabbitMQ clusters should not be installed on networks which can experience partitions.
      当出现网络分区时,不同分区里的节点会认为不属于自身所在分区的节点都已经挂了,对 queue、exchange、binding 的操作仅对当前分区有效。在 RabbitMQ 的默认配置下,即使网络恢复了也不会自动处理网络分区带来的问题从而恢复集群。RabbitMQ(3.1+)会自动探测网络分区,并且提供了配置来解决这个问题。
[
    {rabbit,
       [{tcp_listeners,[5672]},
        {cluster_partition_handling, ignore}]
    }
].
RabbitMQ 提供了三种配置:
  • ignore:默认配置,发生网络分区时不作处理,当认为网络是可靠时选用该配置
  • autoheal:各分区协商后重启客户端连接最少的分区节点,恢复集群(CAP 中保证 AP,有状态丢失)
  • pause_minority:分区发生后判断自己所在分区内节点是否超过集群总节点数一半,如果没有超过则暂停这些节点(保证 CP,总节点数为奇数个)
参考:

本文转载自:http://symphony.b3log.org/article/1395108384839

摩云飞
粉丝 375
博文 534
码字总数 952694
作品 0
徐汇
程序员
私信 提问
rabbitmq对network partition的处理

rabbitmq没有很好的分区容错性,因此,如果需要在广域网里使用rabbitmq集群,建议使用federation或者shovel进行替代。那么即使rabbitmq集群运行在局域网内也不能完全避免网络分区现象(netwo...

hncscwc
2013/11/05
2.3K
4
rabbitmq_cluster 网络分区

通常我们使用rabbitmq 做消息队列,若我们是 cluster模式。若我们的网络不稳定很容易造成网络分区,监测是否发生网络分区可以使用rabbitmq的ui来看,也可以用命令来检测 rabbitmqctl cluste...

shy润物无声
2018/07/15
0
0
RabbitMQ在分布式系统的应用

由于之前做的项目中需要在多个节点之间可靠地通信,所以废弃了之前使用的Redis pub/sub(因为集群有单点问题,且有诸多限制),改用了RabbitMQ。 使用期间得到不少收获,也踩了不少坑,所以在...

力谱宿云
2016/05/05
1K
0
RabbitMQ在分布式系统的应用

由于之前做的项目中需要在多个节点之间可靠地通信,所以废弃了之前使用的Redis pub/sub(因为集群有单点问题,且有诸多限制),改用了RabbitMQ。 使用期间得到不少收获,也踩了不少坑,所以在...

力谱宿云
2016/05/05
882
2
17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列

     来源:http://t.cn/RVDWcfe   前两天,师长发了一篇:大家都觉得分析得不错,有的人就说,但是我用的是ActiveMQ....好的,这次,我们从17个角度,分别详细对比下Kafka、RabbitMQ、...

java进阶架构师
11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

02.日志系统:一条SQL更新语句是如何执行的?

我们还是从一个表的一条更新语句说起,我们创建下面一张表: create table T(ID int primary key, c int); 如果要将ID=2这一行c的值加1,SQL可以这么写: update T set c=c+1 where ID=2; 前...

scgaopan
今天
9
0
【五分钟系列】掌握vscode调试技巧

调试前端js 准备一个前端项目 index.html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1......

aoping
今天
8
0
PhotoShop 高级应用:USM锐化/S锐化/防抖

、 高反差锐化+混合模式:叠加模式 【将更多的边缘细节添加到图像中】

东方墨天
今天
9
0
Python数据可视化之matplotlib

常用模块导入 import numpy as npimport matplotlibimport matplotlib.mlab as mlabimport matplotlib.pyplot as pltimport matplotlib.font_manager as fmfrom mpl_toolkits.mplot3d i......

松鼠大帝
昨天
7
0
我用Bash编写了一个扫雷游戏

我在编程教学方面不是专家,但当我想更好掌握某一样东西时,会试着找出让自己乐在其中的方法。比方说,当我想在 shell 编程方面更进一步时,我决定用 Bash 编写一个扫雷游戏来加以练习。 我在...

老孟的Linux私房菜
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部