自建 RabbitMQ 迁移到阿里云消息队列 RabbitMQ 版

一、适用场景

本方案适用于 自建 RabbitMQ 迁移至 阿里云消息队列 RabbitMQ 场景。

迁移类型适用于:元数据迁移。

二、阿里云消息队列 RabbitMQ 对比自建 RabbitMQ 的优势

对比项

阿里云 RabbitMQ

自建 RabbitMQ

集群TPS上限

无上限。云消息队列 RabbitMQ 版采用集群分布式部署,无主架构,能够横向扩容、缩容集群规模。

有上限。受机器性能限制,扩容依赖升级机器硬件规格,且有上限。

单个QueueTPS上限

无上限。云消息队列 RabbitMQ 版支持单队列的横向扩展,性能上无并发限制,容量无上限。

有上限,单队列性能上限为单节点上限。

连接数

无上限。云消息队列 RabbitMQ 版实例能承载的连接数可随集群规模扩大而增加,不受连接数增加的影响。

有上限。受机器性能限制,单机的连接数有上限,且无法扩容。

定时消息

秒级精确度、高性能、开箱即用。

使用复杂。

服务可用性和数据可靠性

  • 多可用区高可用。

  • 存算分离架构,故障计算节点可快速摘除隔离。

  • 数据三副本存储。

通过镜像队列或仲裁队列实现,容易出现脑裂问题。

消息堆积能力

在海量消息堆积的情况下,始终保持高性能,不影响集群的正常服务。

大量消息堆积容易引起内存问题,可能导致服务宕机。

弹性能力

  • 通过增减集群节点数量实现扩缩容。

  • Serverless系列按照消息生产消费量收费,无需评估容量。

单机容量就是集群并发容量的上限,扩容需要通过升配机器规格或拆分集群实现。

巡检系统

自动发现并修复死锁、宕机等问题。

无。

三、迁移相关工具介绍

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_parameterspolicies元数据不支持导入云消息队列 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 definitionsVirtual host列表参数说明如下:

  • All:表示导出全部Vhost元数据。

  • Vhost名称:表示导出指定Vhost元数据。

  • 将下载的元数据文件保存至本地。

1.2 将元数据导入云消息队列 RabbitMQ 版

  • 登录云消息队列 RabbitMQ 版控制台,在左侧导航栏,单击迁移上云。

  • 在迁移上云页面顶部菜单栏选择地域,然后在页面左上角单击创建任务。

  • 在创建任务面板,设置相关参数,单击确定

参数

描述

示例值

实例

元数据要迁移到的目标实例名称。

amqp-cn-7mz2cjgk****

导入模式

  • ALL:将开源RabbitMQ全部Vhost元数据导入云消息队列 RabbitMQ 版实例。

  • Vhost:将开源RabbitMQ指定Vhost元数据导入云消息队列 RabbitMQ 版实例的Vhost中。

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_parameterspolicies元数据不支持导入云消息队列 RabbitMQ 版实例,在导入时会被自动忽略。

  • 自建 RabbitMQ 的 Queue 名称、Exchange 名称、Bindings 等等支持特殊字符,云上实例不支持包含特殊字符,如空格、$、#、%等。

  • 云上实例不支持插件,从自建RabbitMQ迁移上云需评估已安装插件能力,是否通过其他方案代替。其中自建 RabbitMQ 通过插件支持延迟消息,云上实例通过延迟消息来支持(非插件方式提供)。

  • 自建 RabbitMQ 默认消息最大延迟是30分钟(过期后删除),云上实例默认是5分钟(根据规格不同时间也不同,迁移前确保线下最大延迟与云上延迟保持一致。

  • 云上实例支持失败或超时后重新投递消息,需要关注上云后是否会触发重复投递,避免因重复投递导致消息激增。

  • 云上实例的用户密码只支持根据 AK/SK 重新生成,无法定义为用户已有的用户密码。