一、适用场景
本方案适用于 自建 RabbitMQ 迁移至 阿里云消息队列 RabbitMQ 场景。
迁移类型适用于:元数据迁移。
二、阿里云消息队列 RabbitMQ 对比自建 RabbitMQ 的优势
对比项 | 阿里云 RabbitMQ | 自建 RabbitMQ |
集群TPS上限 | 无上限。云消息队列 RabbitMQ 版采用集群分布式部署,无主架构,能够横向扩容、缩容集群规模。 | 有上限。受机器性能限制,扩容依赖升级机器硬件规格,且有上限。 |
单个Queue的TPS上限 | 无上限。云消息队列 RabbitMQ 版支持单队列的横向扩展,性能上无并发限制,容量无上限。 | 有上限,单队列性能上限为单节点上限。 |
连接数 | 无上限。云消息队列 RabbitMQ 版实例能承载的连接数可随集群规模扩大而增加,不受连接数增加的影响。 | 有上限。受机器性能限制,单机的连接数有上限,且无法扩容。 |
定时消息 | 秒级精确度、高性能、开箱即用。 | 使用复杂。 |
服务可用性和数据可靠性 |
| 通过镜像队列或仲裁队列实现,容易出现脑裂问题。 |
消息堆积能力 | 在海量消息堆积的情况下,始终保持高性能,不影响集群的正常服务。 | 大量消息堆积容易引起内存问题,可能导致服务宕机。 |
弹性能力 |
| 单机容量就是集群并发容量的上限,扩容需要通过升配机器规格或拆分集群实现。 |
巡检系统 | 自动发现并修复死锁、宕机等问题。 | 无。 |
三、迁移相关工具介绍
1、阿里云消息队列 RabbitMQ 控制台迁移工具
阿里云消息队列 RabbitMQ 控制台迁移工具,将开源 RabbitMQ 导出的元数据文件,通过创建迁移任务形式,导入到已创建好的阿里云消息队列 RabbitMQ 实例中。支持 ALL、VHost 两种导入模式,最终实现创建对应的 Vhost、Queue、Exchange、Binding。
迁移工具只支持元数据迁移,不支持消息数据迁移。
四、迁移方案
1、迁移整体流程
实例创建:在阿里云创建对应的规格的云消息队列 RabbitMQ 实例。
数据迁移:
元数据迁移:通过使用阿里云 RabbitMQ 控制台迁移工具,进行元数据迁移
数据校验:
元数据校验:通过检查迁移前后 vhost 的条数、Queue 的条数来校验元数据的一致性。
2、数据迁移方案
2.1、使用阿里云 RabbitMQ 控制台迁移工具进行元数据迁移
迁移原理:
迁移元数据是指将开源 RabbitMQ 集群的元数据导出,并将其导入到阿里云云消息队列 RabbitMQ 版实例。云消息队列 RabbitMQ 版会根据成功导入的元数据在目标云消息队列 RabbitMQ 版实例中创建对应的Vhost、Queue、Exchange、Binding,实现RabbitMQ集群元数据迁移上云。
前置条件:
自建源端需开启 RabbitMQ 插件。
创建作为元数据迁移目标的云消息队列 RabbitMQ 版实例和 Vhost。
风险及注意项:
由于RabbitMQ和云消息队列 RabbitMQ 版在权限管控机制等方面存在差异,rabbit_version、users、permissions、parameters、global_parameters和policies元数据不支持导入云消息队列 RabbitMQ 版实例,在导入时会被自动忽略。
3、数据校验方案
3.1 元数据校验:
通过检查迁移前后 vhost 的条数、Queue 的条数来校验元数据的一致性。
五、实施迁移过程
1、使用阿里云 RabbitMQ 控制台迁移工具进行元数据迁移
1.1 导出开源 RabbitMQ 元数据
在浏览器中打开开源 RabbitMQ 控制台。开源 RabbitMQ 控制台地址:http://{RabbitMQ IP地址}:1567;
在登录页面的Username文本框输入您的用户名,在Password文本框输入您的密码,然后单击Login。
在 Overview 页签下方,单击 Export definitions,从Virtual host列表选择All或者指定的Vhost名称,然后单击Download broker definitions。Virtual host列表参数说明如下:
All:表示导出全部Vhost元数据。
Vhost名称:表示导出指定Vhost元数据。
将下载的元数据文件保存至本地。
1.2 将元数据导入云消息队列 RabbitMQ 版
登录云消息队列 RabbitMQ 版控制台,在左侧导航栏,单击迁移上云。
在迁移上云页面顶部菜单栏选择地域,然后在页面左上角单击创建任务。
在创建任务面板,设置相关参数,单击确定
参数 | 描述 | 示例值 |
实例 | 元数据要迁移到的目标实例名称。 | amqp-cn-7mz2cjgk**** |
导入模式 |
| Vhost |
Vhost | 迁移元数据至 云消息队列 RabbitMQ 版实例指定的Vhost。 导入模式选择Vhost时,显示该参数。 | test-vhost**** |
元数据 | 需要迁移的元数据文件。单击选择文件,选择本地的元数据文件后,单击打开。 说明 元数据文件的大小不超过20 MB。 | rabbit_mq-amqp-load-test011122063**** |
通过创建任务迁移的元数据,支持查看元数据的详细信息和任务执行失败时的失败原因。
查看导入成功的元数据信息
在迁移上云页面,目标任务所在行目标实例列,单击实例名称。
在左侧导航栏,单击Vhost 列表,目标Vhost所在行操作列,单击详情,查看Vhost详细信息。更多信息,请参见Vhost管理。
查看执行失败的任务详情
在迁移上云页面,目标任务所在行操作列,单击详情。您也可以在迁移上云页面,目标实例所在行同步元数据数量列,单击同步数量。
在迁移详情页面,单击Vhost、Exchange、Queue、Binding对应的页签,查看失败原因。
六、数据校验过程
元数据校验:
进入 RabbitMQ 控制台,查看通过检查迁移前后 vhost 的条数、Queue 的条数,对比源 RabbitMQ 控制台元数据,来校验元数据的一致性。
七、迁移注意事项
由于自建 RabbitMQ和云消息队列 RabbitMQ 版在权限管控机制等方面存在差异,rabbit_version、users、permissions、parameters、global_parameters和policies元数据不支持导入云消息队列 RabbitMQ 版实例,在导入时会被自动忽略。
自建 RabbitMQ 的 Queue 名称、Exchange 名称、Bindings 等等支持特殊字符,云上实例不支持包含特殊字符,如空格、$、#、%等。
云上实例不支持插件,从自建RabbitMQ迁移上云需评估已安装插件能力,是否通过其他方案代替。其中自建 RabbitMQ 通过插件支持延迟消息,云上实例通过延迟消息来支持(非插件方式提供)。
自建 RabbitMQ 默认消息最大延迟是30分钟(过期后删除),云上实例默认是5分钟(根据规格不同时间也不同,迁移前确保线下最大延迟与云上延迟保持一致。
云上实例支持失败或超时后重新投递消息,需要关注上云后是否会触发重复投递,避免因重复投递导致消息激增。
云上实例的用户密码只支持根据 AK/SK 重新生成,无法定义为用户已有的用户密码。