RabbitMQ镜像模式双节点部署时故障转移过程中队列中消息的状态
场景
现有节点Node1和Node2,建立Exchange:yu.exchange,创建队列yu1.queue镜像队列master位于Node1,yu2.queue镜像队列位于Node2,使用topic模式绑定到Exchange;
当队列发送时设置DeliveryMode=1 No-Persistent 不进行度列持久化时
过程:
1.客户端向Exchange发送消息10条,停掉Node1上的RabbitMQ实例,队列yu1.queue将master切换到Node2,队列正常继续接受,不影响后续的消息接收。(当前消息条数10)
2.客户端继续发送消息5条,然后启动Node1实例,Node1会以从节点的身份恢复到集群中(当前消息条数15条),Node1会以从节点的身份恢复到集群中,此时队列上显示消息不一致“+0+1”的警告,即发生主从消息不一致

3.客户端继续发送消息5条(此时队列内消息为20条),此时队列上依然显示消息不一致“+0+1”的警告
4.暂停Node2实例,此时队列会全部切换master到Node2,队列正常运行,但此刻队列消息条数为5,由于只剩一个节点,所以不再存在消息不一致的“+0+1”警告
5.客户端继续发送5条,启动Node1实例,队列内消息为10条,继续队列上显示消息不一致“+0+1”的警告,即发生主从消息不一致(队列条数10)
小结:对于未设置持久化的消息队列,如果无订阅客户端进行消息消费的话,当发生主从切换时,master实例在关闭到重启为slaver的过程中,如果队列持续接收消息会发生不一致的警告。同时如果该场景重复发生,如果不设置参数“ha-sync-mode: automatic”的话(默认为ha-sync-mode: manual),队列内消息不会进行同步,消息内容以最近master实例内的消息为主。(https://www.rabbitmq.com/admin-guide.html)
当队列发送时设置DeliveryMode=2 Persistent 进行度列持久化时
1.客户端向Exchange发送消息10条,停掉Node1上的RabbitMQ实例,队列yu1.queue将master切换到Node2,队列正常继续接受,不影响后续的消息接收。(当前消息条数10)
2.客户端继续发送消息5条,然后启动Node1实例,Node1会以从节点的身份恢复到集群中(当前消息条数15条),Node1会以从节点的身份恢复到集群中,此时队列上显示消息不一致“+0+1”的警告,即发生主从消息不一致
3.客户端继续发送消息5条(此时队列内消息为20条),此时队列上依然显示消息不一致“+0+1”的警告
4.暂停Node2实例,此时队列会全部切换master到Node2,队列正常运行,但此刻队列消息条数为0!!!!,由于只剩一个节点,所以不再存在消息不一致的“+0+1”警告
5.客户端继续发送5条,启动Node1实例,队列内消息为5条,继续队列上显示消息不一致“+0+1”的警告,即发生主从消息不一致(队列条数5)
6.再次关闭Node2实例,master又会切回到Node1,但此处队列内消息再次归0!!!!
当镜像队列部署到多于两个节点时需要注意ha-mode的参数设置 镜像队列数量越少处理速度越快,多一些当然数据的一致性会更高,但吞吐量会下降
RabbitMQ镜像模式双节点部署时故障转移过程中队列中消息的状态的更多相关文章
- MySQL 高可用MHA安装部署以及故障转移详细资料汇总 转
http://blog.itpub.net/26230597/cid-87082-list-2/ 1,简介 .1mha简介 MHA,即MasterHigh Availability Manager a ...
- Ubuntu系统上双节点部署OpenStack
安装和部署双节点OpenStack 介绍: 1.宿主机:Win10操作系统 2.在VMware下创建两台虚拟机: devstack-controller:控制节点 + 网络节点 + 块存储节点 + 计 ...
- rabbitmq镜像模式初体验
rabbitmq-01: yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm wget ...
- MySQL高可用方案--MHA部署及故障转移
架构设计及必要配置 主机环境 IP 主机名 担任角色 192.168.192.128 node_master MySQL-Master| ...
- kubeadm 双节点部署k8s v1.13.3+calico v3.3.4
一.部署环境 VMware Workstation 10 centos7 二.主机配置(每台主机都要做) 主机名 ip cpu ram master 192.168.137.10 3G node1 1 ...
- MariaDB GALERA 集群双节点部署
节点1:10.2.2.41 节点2:10.2.2.42 软件: mariadb-galera-10.0.22-linux-x86_64.tar.gz #galera相关参数:(两个节点配置文件类似) ...
- redhat6 + 11G RAC 双节点部署
一.配置网络环境 node1 [root@node1 ~]#vi/etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME= ...
- rabbitmq在linux下单节点部署和基本使用
RabbitMQ是基于erlang开发的消息服务,官网为:https://www.rabbitmq.com,RabbitMQ要依赖erlang运行,所以要先安装erlang环境,rabbitmq可以用 ...
- 检查Rabbitmq中队列及消息个数,还有清空的方法
rabbitmqctl list_queues rabbitmqctl purge_queue kafka_queue (不推荐)使用reset方式重置rabbitmq即清空掉rabbitmq所有的队 ...
随机推荐
- 关于java赋值运算的一个小例子
直接贴代码,这个也是做题目中遇见的,觉得很好奇,查了一波,然后自己编写代码看了一下,果真如此,哈哈哈...... public class 关于Boolean的赋值运算 { public static ...
- line-height和height的区别
line-height 是指每行的高度, 假如定义p标签的行高为line-heigth:20px; 文字在浏览器中显示为一行时,这个p标签的高度会为20px,如果为两行,则p标签的高度为40px; l ...
- Nuget Tips
Install-Package时老是提示找不到Available Source,研究了下Nuget Package Manager的配置.发现有两个地方可以改: 1.Visual Studio中Too ...
- Android LinkedList和ArrayList的区别
LinkedeList和ArrayList都实现了List接口,但是它们的工作原理却不一样.它们之间最主要的区别在于ArrayList是可改变大小的数组,而LinkedList是双向链接串列(doub ...
- 下载 github 项目文件到本地方法
下载 github 项目文件到本地方法 本篇终极,收集 3 种方法 最厉害 666 的方法 直接访问网站: 操作如下: 本地工具版下载方法 首先需要下载 git 客户端 我就不转载了,上面有客户端的使 ...
- RAP, 高效前后端联调框架,接口文档管理工具
RAP通过GUI工具帮助WEB工程师更高效的管理接口文档,同时通过分析接口结构自动生成Mock数据.校验真实接口的正确性,使接口文档成为开发流程中的强依赖.有了结构化的API数据,RAP可以做的更多, ...
- Linux crontab命令详解与实例
内容有重复的,不过本着宁多勿少的原则就都看看吧,就当加深印象啦 基本格式 :* * * * * command分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示第2列表示小时 ...
- Shell使用手册
1.循环数组 list=(20180531 20180430 20180331 20180228 20180131 20171231 20171130 20171031 20170930 201708 ...
- 音乐MP4网站 车辆工程 冯大昕
- Android sdk manager 更新 5.0 太难了,终于解决
由于众所周知的原因,必须在hosts中增加一些网址对应,才可以更新 203.208.46.146 www.google.com 203.208.46.1 plus.google.com 203.208 ...