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 NIO文章列表(强烈推荐 转)
IO流学习总结 一 Java IO,硬骨头也能变软 二 java IO体系的学习总结 三 Java IO面试题 NIO与AIO学习总结 一 Java NIO 概览 二 Java NIO 之 Buffe ...
- HTML网页随笔笔记
文档设置标记 1.格式标记 1.<br> 强制换行标记 让后面的文字.图片.表格等等,显示在下一行 2.<p> 换段落标记 换段落,由于多个空格和回车在HTML中会被等效为 ...
- Maven学习总结(七):Maven的聚合和继承
一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module&g ...
- LintCode2016年8月8日算法比赛----子树
子树 题目描述 有两个不同大小的二叉树:T1有上百万的节点:T2有好几百的节点.请设计一种算法,判定T2是否为T1的子树. 注意事项 若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 ...
- js重名的处理
### 关于重名的处理 > 在变量提升阶段,如果名字重复了,不会重新的进行声明,但是会重新的进行定义(后面赋的值会把前面赋的值给替换掉) ```javascript //=>变量提升:fn ...
- 算法之求质数(Java语言)
质数(Prime number) 又称素数,指在的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数). 算法原理 验证一个数字 n 是否为素数的一种简单但 ...
- 3.Bootstrap CSS 概述
1.HTML 5 文档类型(Doctype) Bootstrap 使用了一些 HTML5 元素和 CSS 属性.为了让这些正常工作,您需要使用 HTML5 文档类型(Doctype). 因此,请在使用 ...
- C# 装箱和拆箱[整理](转)
//1. // 装箱和拆箱是一个抽象的概念 //2. // 装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型 // 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互 ...
- 使用公钥和私钥实现LINUX下免密登录
linux公钥私钥实现无密码登录 首先本地主机生成公约和私钥 # ssh-keygen /生成公钥和私钥 不要更改默认路径,中途不要输入密码,直接两次回车. 2. 将生成 ...
- 《C++ Primer Plus》读书笔记之三—循环与关系表达式
第五章 循环与关系表达式 1.表达式是值或者值与操作符的结合,每个C++表达式都有值.表达式到语句的转换只要加一个分号就可以完成.但是,反过来,从语句中删除分号,并不一定能将它转化成表达式. 2.前缀 ...