rabbitmq_cluster 网络分区

通常我们使用rabbitmq 做消息队列,若我们是 cluster模式。若我们的网络不稳定很容易造成网络分区,监测是否发生网络分区可以使用rabbitmq的ui来看,也可以用命令来检测
rabbitmqctl cluster_status
若返回值为:
[{nodes,[{disc,[‘[email protected]‘, ‘[email protected]‘]}]},br/>{running_nodes,[‘[email protected]‘,‘[email protected]‘]},
{cluster_name,<<"[email protected]">>},
{partitions,[]}]

则集群状态为正常,若返回值为
[{nodes, [{disc, [‘[email protected]‘,‘[email protected]‘]}]},br/>{running_nodes,[‘[email protected]‘]},
{cluster_name,<<"[email protected]">>},
{partitions, [{‘[email protected]‘,[‘[email protected]‘]}]}]

则表示rabbitmq发生网络分区了。
此时我们要手动解决网络分区。
一、最简单的是我们重启rabbitmq集群服务,这样会造成以产生的消息队列失去了消费者,即用户的一些操作可能一直处于“转圈”等待中。
二、
为了从网络分区中恢复,首先需要挑选一个信任的分区,这个分区才有决定Mnesia内容的权限,发生在其他分区的改变将不被记录到Mnesia中而直接丢弃。手动恢复网络分区有两种思路:
1.)停止其他分区中的节点,然后重新启动这些节点。最后重启信任分区中的节点,以去除告警。
2.) 关闭整个集群的节点,然后再启动每一个节点,这里需确保你启动的第一个节点在你所信任的分区之中。
停止/启动节点有两种操作方式:

  1. rabbimqctl stop/ rabbitmq-server -detached
  2. rabbitmqctl stop_app/ rabbitmqctl start_app

此时我们也可以利用rabbimq自己的机制来解决网络分区
RabbitMQ提供了4种处理网络分区的方式,在rabbitmq.config中配置cluster_partition_handling参数即可,分别为:

  1. ignore
  2. pause_minority
  3. autoheal
    下面我们来一 一 赘述:
    1.ignore
    默认是ignore,如果不配置rabbitmq.config或者按如下配置:

    [
    {
    rabbit, [
    {cluster_partition_handling, ignore}
    ]

    }

    ].

ignore的配置是当网络分区的时候,RabbitMQ不会自动做任何处理,即需要手动处理。

2、pause_minority

在rabbitmq.config配置文件中配置:

[
{
rabbit, [
{cluster_partition_handling, pause_minority}
]
}
].

当发生网络分区时,集群中的节点在观察到某些节点down掉时,会自动检测其自身是否处于少数派(小于或者等于集群中一般的节点数)。少数派中的节点在分区发生时会自动关闭,当分区结束时又会启动。这里的关闭是指RabbitMQ application关闭,而Erlang VM并不关闭,这个类似于执行了rabbitmqctl stop_app命令。处于关闭的节点会每秒检测一次是否可连通到剩余集群中,如果可以则启动自身的应用,相当于执行rabbitmqctl start_app命令。

需要注意的是RabbitMQ也会关闭不是严格意义上的大多数。比如在一个集群中只有两个节点的时候并不适合采用pause-minority模式,因为由于其中任何一个节点失败而发生网络分区时,两个节点都会被关闭。当网络恢复时,有可能两个节点会自动启动恢复网络分区,也有可能还是保持关闭状态。然而如果集群中的节点远大于两个时,pause_minority模式比ignore模式更加的可靠,特别是网络分区通常是由于单个节点网络故障而脱离原有分区引起的。不过也需要考虑2v2, 3v3这种情况,可能会引起所有集群节点的关闭。这种处理方式适合集群节点数大于2个且最好为奇数的情况。

3. autoheal
在autoheal模式下,当认为发生网络分区时,RabbitMQ会自动决定一个获胜的(winning)分区,然后重启不在这个分区中的节点以恢复网络分区。一个获胜的分区是指客户端连接最多的一个分区。如果产生一个平局,既有两个或者多个分区的客户端连接数一样多,那么节点数最多的一个分区就是获胜的分区。如果此时节点数也一样多,将会以一种特殊的方式来挑选获胜分区。

配置示例如下:

[
{
rabbit, [
{cluster_partition_handling, autoheal}
]
}
].

rabbitmq_cluster 网络分区

原文地址:http://blog.51cto.com/shyln/2142635

时间: 2024-08-04 22:53:43

rabbitmq_cluster 网络分区的相关文章

【跨站点DAG】启用DAC模式,防止数据库级别上出现网络分区

数据中心激活协调模式又称DAC模式,应为具有两个或多个使用连续复制的节点的DAG 启用该模式.该模式用于控制 DAG 的启动数据库装入行为,在数据中心故障恢复期间,此控件可以防止数据库级别上出现网络分区故障.譬如主数据中心断电,所有副本都断开连接,这时候活动副本切换到灾备站点.当主数据中心恢复供电时(这时服务器恢复,但站点间WAN 连接尚未恢复),主数据中心的数据库会自动Mount,这时就出现了网络分区错误. 活动管理器在内存中存储一个数位(0 或 1),该数位告诉 DAG 是否允许装入服务器上

vsan网络分区不在同一组

问题描述:建设南京机房的时候,为vsan单独配置个vlan信息,然后集群开启vsan后,发现每个主机的网络分区都是独立的,不在同一网络分区中,造成vsan无法正常工作. 解决方法:第一种解决方法:把vlan信息删掉,在虚拟交换机中把vlan标签删掉即可. 第二种解决方法:把交换机端口开启trunk即可.

rabbitmq 网络分区错误

介绍: 系统 centos6.5 应用 rabbitmq集群(2台) 版本 rabbitmq3.3.5 rabbitmq.config 是默认配置 {vm_memory_high_watermark,0.4}, 遇到问题:近两天出现了rabbitmq集群(磁盘持久化2台)2次网络分区错误,看监控均是由内存耗尽导致. 解决问题: 1. 登录服务器,查看集群状态 [[email protected] rabbitmq]# /mnt/rabbitmq/sbin/rabbitmqctl cluster_

RabbitMQ 集群与网络分区

关于network partition 网络设备故障导致的网络分裂.比如,存在A\B\C\D\E五个节点,A\B处于同一子网,B\C\D处于另外一子网,中间通过交换机相连.若两个子网间的交换机故障了即发生了网络分区,A\B和C\D\E便不能通讯. 某些系统是partition-tolerant的,也即,即使发生了网络分区系统分裂为了多个子系统,整个系统仍能正常工作. RabbitMQ cluster不能很好地处理Network Partition.RabbitMQ将queue.exchange.

RabbitMQ 集群与网络分区(理论知识)

关于network partition 网络设备故障导致的网络分裂.比如,存在A\B\C\D\E五个节点,A\B处于同一子网,B\C\D处于另外一子网,中间通过交换机相连.若两个子网间的交换机故障了即发生了网络分区,A\B和C\D\E便不能通讯.某些系统是partition-tolerant的,也即,即使发生了网络分区系统分裂为了多个子系统,整个系统仍能正常工作. RabbitMQ cluster不能很好地处理Network Partition.RabbitMQ将queue.exchange.b

Apache StratOS 云分区

云分区 下面章节详细解释何为云分区: 分区 StratOS的分区可以映射为IaaS的一个逻辑分区.这个逻辑分区可以是以下级别中的一种:Provider级别.Region级别.Zone级别或者Rack级别.一个逻辑分区至少需要定义一个Provider.逻辑分区定义时也可指定区分组.DevOps用户为了实现高可用,可以定义复合区域,将资源实例创建到不同的区域,比如不同的region.zone或者rack.例如如果将资源实例创建到EC2的不同可用ZONE,这样在其中一个ZONE出现问题时部署的应用仍然

数据一致性(consistency)、服务可用性(availability)、分区容错性(partition-tolerance)

分布式系统理论基础 - CAP 2016-04-04 18:27 by bangerlee, 135 阅读, 0 评论, 收藏, 编辑 引言 CAP是分布式系统.特别是分布式存储领域中被讨论最多的理论,“什么是CAP定理?”在Quora 分布式系统分类下排名 FAQ 的 No.1.CAP在程序员中也有较广的普及,它不仅仅是“C.A.P不能同时满足,最多只能3选2”,以下尝试综合各方观点,从发展历史.工程实践等角度讲述CAP理论.希望大家透过本文对CAP理论有更多地了解和认识. CAP定理 CAP

网络编程(七):CAP原理推导和应用

在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性 (Consistency)(等同于所有节点访问同一份最新的数据副本) 可用性(Availability)(对数据更新具备高可用性) 网络分区容忍性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求.系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A

[转载] Google数据中心网络技术漫谈

原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1&sukey=fc78a68049a14bb247c537e229e9301ea4dca80236df4f4e775535c08f0a24420a9ac4d726c99dad63a9f6e4c88271ed 真羡慕 google 强大的网络基础设施啊,