文档

开源RabbitMQ迁移上云

更新时间:
一键部署

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

迁移前须知

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

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

迁移前评估

技术评估

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

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

费用评估

云消息队列 RabbitMQ 版提供了Serverless版、专业版、企业版、铂金版四种实例类型以满足您不同的业务场景需求。不同实例类型间的差异,请参见实例类型

相比其他实例类型,Serverless版实例具备更好的弹性能力和费用优势。计费项目包括消息收发次数、Queue数量、消息存储空间、公网下行流量(可选)和消息轨迹(可选)。计费规则,请参见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集群元数据迁移上云。详细步骤,请参见如何导出全部Vhost或者指定Vhost元数据

创建用户名、密码并授权

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

迁移消息数据

使用Shovel插件迁移消息数据

Shovel迁移数据的原理是消费开源RabbitMQ集群中的消息,将消息生产到云上实例中,迁移后开源RabbitMQ集群中的消息被清空,完成迁移。

图片2.png

  1. 在开源集群启动Shovel插件。

  2. 创建Shovel任务,将Source配置为开源RabbitMQ集群的服务地址和队列名称,Destination配置为云消息队列 RabbitMQ 版的EndPoint和队列名称。EndPoint的查看方式,请参见查看实例详情

  3. 修改开源RabbitMQ队列消费者的接入点、用户名、密码,连接到云上实例消费。

  4. 修改开源RabbitMQ队列生产者的接入点、用户名、密码,将消息发送到云上实例。

  5. 待开源RabbitMQ集群里队列里没有消息堆积后,关闭Shovel任务。

使用双读模式迁移消息数据

消费完旧集群的消息即可。由于Producer和Consumer都是集群化的,您可以通过一台一台操作的方式实现上层业务无感知。

图片3.png

  1. 修改应用中部分节点消费者的接入点、用户名和密码,连接到云上实例消费;其他的消费者节点仍然连接开源集群消费。

  2. 修改队列生产者的接入点、用户名和密码,将消息发送到云上实例。

  3. 待开源集群里队列里没有消息堆积后,将剩余节点消费者连接到云上消费。

相关文档

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

  • 本页导读 (1)
文档反馈