全部产品
Search
文档中心

云消息队列 RabbitMQ 版:开源RabbitMQ迁移上云

更新时间:Nov 27, 2024

在使用开源RabbitMQ集群时,当您希望能够解决各种稳定性痛点(例如消息堆积、脑裂等问题)、实现高并发、分布式、灵活扩缩容时,您可以将开源RabbitMQ集群迁移至云消息队列 RabbitMQ 版,本文介绍迁移上云的前提条件、操作步骤、注意事项等。

迁移前须知

云消息队列 RabbitMQ 版是阿里云基于专有的分布式消息存储技术开发的高级消息队列服务。它严格遵循AMQP 0-9-1协议,但并不是开源RabbitMQ的简单托管版本。云消息队列 RabbitMQ 版的架构有效避免了因消息积压导致的内存泄漏和服务器故障等稳定性问题,并成功解决了分布式系统中的脑裂难题。此外,它还提供了高度的可伸缩性和灵活的按量计费模式,进一步增强了服务的弹性、降低了成本。

然而,与开源RabbitMQ相比,云消息队列 RabbitMQ 版在某些功能实现上存在差异。因此,在考虑迁移至云消息队列 RabbitMQ 版之前,您需要进行技术能力和成本效益评估,以确保选型符合您的需求。

迁移前评估

技术评估

  • 云消息队列 RabbitMQ 版和开源RabbitMQ在功能、服务和性能、Exchange和Queue等几个方面存在差异,在迁移至云消息队列 RabbitMQ 版之前,请查看差异项并评估云消息队列 RabbitMQ 版的功能是否符合您的预期。具体差异点,请参见开源对比

  • 云消息队列 RabbitMQ 版对集群、接口调用以及字符进行了限制,在使用时不能超过相应的限制值,在迁移之前,请评估限制值是否能满足您的业务要求。更多信息,请参见实例类型

费用评估

云消息队列 RabbitMQ 版提供了预付费系列实例和Serverless系列实例,涵盖多种实例规格。不同实例规格间的差异,请参见实例类型

相比预付费系列实例,Serverless系列实例具备更好的弹性能力和费用优势。计费规则,请参见Serverless系列计费说明

开源RabbitMQ集群的消息收发次数、Queue数量及消息量可通过如下途径评估。

  • Queue数量:在开源RabbitMQ控制台上的Overview页面查看Global counts,获取Queues、Exchanges等各个元数据的数量。image

  • 消息收发次数、消息量:

    • 方法一:在开源RabbitMQ控制台上的Overview页面查看Message rates,计算Publish、Deliver(manual ack)/Deliver (auto ack)、Redelivered指标的总和。image

    • 方法二:通过Prometheus Grafana大盘查看集群总的消息写入和消息流出的QPS和消息量。

迁移上云

迁移元数据

迁移元数据是指将开源RabbitMQ集群的元数据导出,并将其导入到阿里云云消息队列 RabbitMQ 版实例。云消息队列 RabbitMQ 版会根据成功导入的元数据在目标云消息队列 RabbitMQ 版实例中创建对应的Vhost、Queue、Exchange、Binding,实现RabbitMQ集群元数据迁移上云。详细步骤,请参见迁移元数据上云

创建用户名、密码并授权

开源客户端访问云消息队列 RabbitMQ 版服务端时,需要传入用户名和密码进行权限认证,认证通过才允许访问服务端。不同于开源RabbitMQ中自定义用户名密码的方式,云消息队列 RabbitMQ 版的用户名和密码可通过阿里云访问控制(RAM)的AccessKey和AccessKey Secret生成。详细信息,请参见静态用户名密码管理

打通网络

云消息队列 RabbitMQ 版提供私网连接接入点,使用私网连接接入点能够支持云企业网(CEN)上云组网,详情请参见私网连接接入点

迁移消息数据

迁移方案

以VirtualHost为最小迁移单位,使用Shovel插件迁移消息数据

方案优势

  • 平滑迁移业务,数据不丢失。

  • 无需梳理应用间调用的网状拓步结构。

  • 不需要逐个迁移生产者和消费者的调用链路,解决环形调用链路等的迁移问题。

迁移步骤

image
  1. 梳理出VirtualHost A的所有生产者和消费者。

  2. 迁移VirtualHost A下所有的生产者和消费者,即修改URL、用户名、密码配置使其访问云消息队列 RabbitMQ 版服务。

  3. 观察开源RabbitMQ集群中,VirtualHost A下所有队列的堆积情况。

  4. 在开源集群中开启Shovel插件,将有消息堆积的队列配置Shovel临时迁移同步任务sync a,将堆积的消息转发到云消息队列 RabbitMQ 版实例。这里将开源集群中的队列设置为同步任务的源,云消息队列 RabbitMQ 版实例的队列设置为同步任务的目标。

  5. 如果在开源集群中,VirtualHost A有来自其它VirtualHost B的Shovel同步任务sync B,则需要将同步任务sync B的目标设置为云消息队列 RabbitMQ 版实例的队列。

  6. 观察开源集群VirtualHost A下的队列是否有消息堆积,当堆积的消息全部被迁移至云上实例后,删除临时迁移同步任务sync a。

  7. 以上步骤完成了最小迁移单元VirtualHost A的迁移,剩余的VirtualHost都可以按照最小迁移单元迁移。

相关文档

更多关于Shovel插件的信息,请参见Shovel Plugin