RabbitMQ 3.6.1 升级至 3.7.9 版本(Windows 升级至Centos)
随着公司业务量的增加,原本部署在Windows服务器的RabbitMQ集群(3.6.1)总是出现莫名其妙的问题,经查询官方Issue,确认是RabbitMQ 3.6.1 版本的bug。查看从3.6.1 版本至 3.7.9 版本的变更日志,可以发现RabbitMQ官方修复了不少bug,本着版本越新 bug相对越少且 新版本修复了当前我们经常遇到的版本bug,因此我们决定将其中一个MQ集群(Windows)升级至3.7.9(Centos),毕竟开源软件对于Linux的支持是更好的。
公司的业务不可能会因为要升级MQ集群而暂停,因此采取哪种形式进行迁移是我们要重点考虑的,
- Full Stop升级
需要将整个MQ集群停止,然后整体升级,PASS。 - 滚动升级
滚动升级对MQ的版本有要求,从3.6.1 升级至 3.7.9 不满足官方介绍的版本要求,PASS。 - blue-green升级
blue-green升级也成为蓝绿升级,升级过程不需要停止原有MQ集群,升级过程安全可控,但需要额外搭建一个新的集群。鉴于我们要将Windows部署的3.6.1 版本的MQ集群升级至Centos部署的3.7.9 版本,必须新搭建集群,因此采用该方案。
Blue-Green蓝绿部署是一个升级策略,它是基于在当前集群(blue)旁边创建第二个集群(green)的想法。当迁移结束后,应用程序会切换到”green”集群,”blue”集群会关闭,为了简化切换,可以使用 federated queues把已排队的消息从“blue”传递高”green”集群。
具体的搭建步骤:
1.准备Green集群(3.7.9)
1.1 搭建3.7.9 版本的MQ集群 。具体可参考centos安装RabbitMQ 3.7.9 (使用RPM) 及 Centos 7安装RabbitMQ 3.7.8版本(单机版)-不使用RPM。
1.2 Green 集群创建完毕后导入定义:exchange、queue、bindings。
从Blue 集群导出exchange、queue、bindings 的 元数据定义,导入到新搭建的Green集群
1.3 配置Federation Queue
Federation 作为RabbitMQ的一个插件而存在,本质上是连接green集群的消费者,会获取发布到blue集群的消息。 具体可参考官方文档:Upgrading RabbitMQ Using Blue-Green Deployment Strategy
将Blue 集群设置为上游,将Green设置为下游。实现发送至Blue集群的消息可以被Green集群的消费者消费。 用武林小说中的招式就是 乾坤大挪移。
2. 切换消费者连接到Green集群
2.1 修改客户端连接MQ集群地址,将消费者连接MQ集群地址从Blue切换至Green
切换客户端MQ连接之后,消费者会连接至Green集群。但生产者仍旧会发送消息至Blue集群
3.耗尽积压的消息
3.1 在切换生产者连接至Green集群之前,先耗尽Blue集群中积压的消息。避免出现消息丢失,出现不可逆转的错误。
4.切换生产者连接到Green集群
4.1 修改生产者程序MQ连接,将消息发送至Green集群。
5.将Blue集群下线
遇到的挑战:
1.由于生产者未将连接从Blue切换至Green集群之前,我们希望耗尽积压的所有消息。但由于公司业务不会停止,因此发送端会持续的进行消息推送,就永远不会出现队列消息为空的情况。如果强行切换生产者,那么可能会造成消息丢失。
解决办法:Blue集群的消费者暂时保留,生产者从Blue切换至Green后,保留的消费者会继续消费Blue集群的消息,直至消费完毕。然后就可以下线Blue集群。
2.监控插件通过3.6.1 版本RabbitMQ API进行数据读取及上报,在3.7.9 中,部分API进行了调整,因此对应的监控插件也需要对应调整。
3.此次操作是将部署在Windows的3.6.1 版本RabbitMQ 升级至 Centos 3.7.9 ,其中涉及的操作命令及部署方式均存在变化,需提前了解。
4.出现故障时,基本的Centos操作命令,需要了解。
附简单的升级思路:

RabbitMQ 3.6.1 升级至 3.7.9 版本(Windows 升级至Centos)的更多相关文章
- Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要
Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要 作者:Eric.Zhang(花名:穿越者7号) 日期:2015年1 ...
- rabbitmq支持.net framwork 3.5的最后版本
方便后来人!!!经过一系列的确认!! rabbitmq支持.net framwork 3.5的最后版本是3.4.3, 安装步骤: 1.工具->Nuget程序包管理器,进入控制台 2.Instal ...
- nginx升级至1.12.1版本
nginx升级至1.12.1 编号 名称 说明 1 nginx-1.12.1.tar.gz nginx安装程序 2 nginx_upstream_check_module-master.zip 实现后 ...
- MAC Ruby版本需要升级至2.2.2以上
第一例: 默认情况下,Mac OS X 系统已经安装好 Ruby(最新的 Mavericks 随机的 Ruby 版本为 2.0.0p247),安装在 /System/Library/Framework ...
- Linux RabbitMQ的安装、环境配置、远程访问 , Windows 下安装的RabbitMQ远程访问
Linux RabbitMQ的安装和环境配置 1.安装 RabbitMQ是使用Erlang语言编写的,所以安装RabbitMQ之前,先要安装Erlang环境 #对原来的yum官方源做个备份 1.mv ...
- RabbitMQ Server安装及显示管理界面Installing on Windows
接上一篇文章,继续讲解 文件很小, 1.下载路径:http://www.rabbitmq.com/download.html 2.运行rabbitmq-server-3.6.5.exe,选择要安装的目 ...
- centos7 python2.7升级至python3.5.3版本
1.wget https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tgz #下载安装包 2.tar -zxvf Python-3.5.3 ...
- 三、RabbitMQ安装
安装前准备 Linux版本信息: 发行版本:CentOS Linux release 7.5.1804 (Core) 内核版本:Linux version 3.10.0-862.el7.x86_64 ...
- rabbitmq安装与使用总结
一.随着公司业务量的增加,原本部署在Windows服务器的RabbitMQ集群(3.6.1)总是出现莫名其妙的问题,经查询官方Issue,确认是RabbitMQ 3.6.1 版本的bug.查看从3.6 ...
随机推荐
- linux 下svn操作
* 前言: linux下的svn相比于gitlab,配置要求第一点:gitlab需要4G的内存,如果使用swap+内存的替代方案,理论上是可行的,但是实际操作中各种坑: 所以,由于条件限制,使 ...
- 2017 Pig-0.16.0安装
前提:已经装好hadoop2.7.3 单机版本: export PIG_HOME=/usr/local/pig export PATH=$PATH:$PIG_HOME/bin 运行:pig -x ...
- MSSQL sqlserver系统函数教程分享
摘要: 下文收集了sqlserver函数教程,为每一个函数都进行了相关举例说明, 如下所示: sqlserver聚合函数教程: mssql sqlserver avg聚合函数使用简介 mssql sq ...
- SQL SERVER 查询表的各字段长度
SELECT a.name,b.name,c.DATA_TYPE,b.max_length FROM sys.tables a join sys.columns b on b.object_id = ...
- EF Code First列名 'Discriminator' 无效的问题
新建了一个类继承EF Model类,运行报错 EF Code First列名 'Discriminator' 无效 EF会把项目中在DbContext中引用的所有的Model类及这些Model类对应 ...
- 简单易懂的程序语言入门小册子(6):基于文本替换的解释器,引入continuation
当我写到这里的时候,我自己都吃了一惊. 环境.存储这些比较让人耳熟的还没讲到,continuation先出来了. 维基百科里对continuation的翻译是“延续性”. 这翻译看着总有些违和感而且那 ...
- 【底层原理】深入理解Cache (上)
存储器是分层次的,离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也因此越小.寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(缓存也是分级,有L1,L2等缓存),再 ...
- C++实现第三方资源释放与载入过程(以DLL为例)
简介 我们经常看见有一些程序开始执行时会释放一些文件,以便于后续操作.例如一些病毒为了便于传播和隐藏,经常把一些需要用的动态库或是驱动文件打包进一个可执行文件中,再由需要使用的时候,再临时释放和加载. ...
- [福大软工] Z班 第1次成绩排行榜
作业地址 http://www.cnblogs.com/easteast/p/7403491.html 作业要求 (1)回想一下你初入大学时对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的? ...
- 爬楼梯的golang实现
假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 输入: 输出: 解释: 有两种方法可以爬到楼顶. ...