RabbitMQ镜像模式双节点部署时故障转移过程中队列中消息的状态

时间:2021-12-10 04:14:56

场景

现有节点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”的警告,即发生主从消息不一致

RabbitMQ镜像模式双节点部署时故障转移过程中队列中消息的状态

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镜像模式双节点部署时故障转移过程中队列中消息的状态的更多相关文章

  1. MySQL 高可用MHA安装部署以及故障转移详细资料汇总 转

    http://blog.itpub.net/26230597/cid-87082-list-2/ 1,简介 .1mha简介 MHA,即MasterHigh Availability Manager a ...

  2. Ubuntu系统上双节点部署OpenStack

    安装和部署双节点OpenStack 介绍: 1.宿主机:Win10操作系统 2.在VMware下创建两台虚拟机: devstack-controller:控制节点 + 网络节点 + 块存储节点 + 计 ...

  3. rabbitmq镜像模式初体验

    rabbitmq-01: yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm wget ...

  4. MySQL高可用方案--MHA部署及故障转移

    架构设计及必要配置 主机环境 IP                 主机名             担任角色 192.168.192.128  node_master    MySQL-Master| ...

  5. kubeadm 双节点部署k8s v1.13.3+calico v3.3.4

    一.部署环境 VMware Workstation 10 centos7 二.主机配置(每台主机都要做) 主机名 ip cpu ram master 192.168.137.10 3G node1 1 ...

  6. MariaDB GALERA 集群双节点部署

    节点1:10.2.2.41 节点2:10.2.2.42 软件: mariadb-galera-10.0.22-linux-x86_64.tar.gz #galera相关参数:(两个节点配置文件类似) ...

  7. redhat6 + 11G RAC 双节点部署

      一.配置网络环境 node1 [root@node1 ~]#vi/etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME= ...

  8. rabbitmq在linux下单节点部署和基本使用

    RabbitMQ是基于erlang开发的消息服务,官网为:https://www.rabbitmq.com,RabbitMQ要依赖erlang运行,所以要先安装erlang环境,rabbitmq可以用 ...

  9. 检查Rabbitmq中队列及消息个数,还有清空的方法

    rabbitmqctl list_queues rabbitmqctl purge_queue kafka_queue (不推荐)使用reset方式重置rabbitmq即清空掉rabbitmq所有的队 ...

随机推荐

  1. js 日报 周报 月报 时间扩展 js

    当初做统计业务需要处理时间 周报:本周 上周 下周 近一周 月报上月 本月 等 需要使用时间处理 所以扩展了这些方法 <!DOCTYPE html> <html xmlns=&quo ...

  2. 中等难度SQL语句(存储过程,分页,拼接字段、游标&comma;日期类型转换,动态行转列,视图)汇总

    一.创建存储过程 if Exists(select name from sysobjects where NAME = 'sp1LoginUser' and type='P')drop procedu ...

  3. nginx 安装及代理配置。

    新建etc/yum.repos.d/nginx.repo文件,添加以下内容:[nginx] name=nginx repo baseurl=http://nginx.org/packages/cent ...

  4. 各大公司广泛使用的在线学习算法FTRL详解 - EE&lowbar;NovRain

    转载请注明本文链接:http://www.cnblogs.com/EE-NovRain/p/3810737.html 现在做在线学习和CTR常常会用到逻辑回归( Logistic Regression ...

  5. 使用FormData上传文件、图片

    关于FormData XMLHttpRequest Level 2添加了一个新的接口  ---- FormData 利用FormData对象,可以通过js用一些键值对来模拟一系列表单控件,可以使用XM ...

  6. codevs2034 01串2

    /* 一开始认为是个水题 直接模拟 没想到只得了50分 一看数据吓niao了 模拟妥妥的TLE 实在不好优化了0.0(最快O(m)) 然后借鉴别人的 DP+神奇的输出 DP:状态:f[i][j] 前i ...

  7. 你的第一个AngularJS应用--教程二:基架、建立和測试的工具

    介绍 有非常多可用的工具能够帮助你开发AngularJS 应用,那些非常复杂的框架不在我的讨论范围之中,这也是我開始这系列教程的原因. 在第一部分,我们掌握了AngularJS框架的基本结构,开发了第 ...

  8. Linux设置静态IP【转】

    一只小码 2016-08-16 10:32 测试服务器OS: Centos 6.5 x64 本机OS: Ubuntu 14.04 x64 由于Virtualbox当时安装Centos 6.5的时候设置 ...

  9. C&plus;&plus;实现引用和被引用对象分离

    上一篇博客简单介绍了C++中引用的底层实现,接下来,通过简单的代码验证如何将引用和被引用对象分离. 代码如下; #include <iostream> #include<string ...

  10. 【Angular】——TypeScript之胖箭头&lpar;&equals;&gt&semi;&rpar;函数

    前言:胖箭头(=>)函数是一种快速书写函数的简介语法. ES5和TypeScript比较:在ES5中,每当我们要用甘薯作为方法参数时,都必须用function关键字和紧随其后的花括号({})表示 ...