You need to enable JavaScript to run this app.
导航

RabbitMQ 迁移上云(方案一)

最近更新时间2022.10.17 19:17:58

首次发布时间2022.05.31 11:12:33

本文介绍通过方案一将开源 RabbitMQ 集群或单机迁移到火山引擎消息队列 RabbitMQ版的操作步骤。

注意事项

  • 业务迁移只迁移消息生产和消费链路,并不会迁移 RabbitMQ 旧集群上的消息数据。
  • 创建 RabbitMQ 实例、迁移消息收发链路之前,请先确定 RabbitMQ 实例可正常访问,以免因访问异常造成迁移失败。您可以访问 RabbitMQ 实例详情页中对应协议的接入点,确认实例的网络连通性。
  • 业务迁移之前,请确认您已根据业务需求选择了对应迁移方案。迁移方案对比请参考迁移概述

1 环境准备

迁移之前,您需要根据业务量合理评估资源需求,并创建 RabbitMQ 实例及相关的依赖资源。

1.1 迁移评估

根据现有业务量和消息量估算所需的消息队列 RabbitMQ版资源,例如 TPS 峰值、建议队列数和最大连接数等。不同规格的 RabbitMQ 实例代表不同的计算能力及存储空间,请根据业务量合理评估资源需求。

1.2 准备相关资源

确认资源需求之后,还需要准备相关资源,例如私有网络和子网、ECS 云服务器和 RabbitMQ 实例。

  • 搭建环境。
    您需要创建私有网络和子网、购买 ECS 云服务器。迁移后您的服务需要和 RabbitMQ 实例处于相同的区域(Region)和VPC内,才能正常访问实例。
    详细说明请参考准备环境

  • 购买 RabbitMQ 实例。
    请根据业务量评估结果合理选择 RabbitMQ 实例的计算规格和存储规格,保证资源充足。
    详细操作步骤请参考创建 RabbitMQ 实例

2 迁移元数据

迁移元数据的步骤将开源 RabbitMQ 的Vhost、Exchange 和 Queue 等配置信息迁移到消息队列 RabbitMQ版的新实例中。迁移元数据时,并不会迁移队列中的消息数据。

  1. 从开源 RabbitMQ 中导出 Vhost 元数据。

    1. 通过浏览器登录开源 RabbitMQ 控制台。

    2. 在Overview页签中,展开Export definitions,并填写文件名。

    3. 设置 Virtual host

      您可以选择 All 导出全部Vhost的元数据文件,或者选择某个 Vhost 名称,即导出指定 Vhost 的元数据文件。

    4. 单击 Download broker definitions
      成功下载元数据文件之后,请妥善保管。

  2. 在消息队列 RabbitMQ版中导入 Vhost 元数据。

    1. 登录消息队列 RabbitMQ版实例的详情页面,复制Web UI接入点的域名。

    2. 通过 Web UI 接入点访问 RabbitMQ 开源控制台,并通过用户名及密码登录。
      详细步骤请参考连接 RabbitMQ 管理地址

    3. 在Overview页签中,展开 Import definitions ,并选择前文中下载的元数据文件。

    4. 单击 Upload broker definetions 将元数据导入 RabbitMQ 实例中。
      alt

3 迁移消息服务

业务迁移的方案一先启动新的消费端和生产端,让新集群的生产和消费正常运行。再下线旧的生产端,待旧集群的消息被旧 Consumer 消费完成后,再关闭旧消费端,完成迁移上云。

该方案无法保障消息消费的有序性,适用于对消息消费时序不敏感或对有序消息无依赖的业务场景,例如高并发场景下的订单提交。

迁移步骤如下:

  1. 下线自建 RabbitMQ 集群的生产者,并启动新的消费者和生产者。

    为新建的消息队列 RabbitMQ版实例开启新的消费者和生产者,在云端搭建新的消息生产和消费流程,并启动消息的生产与消费。
    如果 RabbitMQ 实例开启了公网访问,您可以直接修改生产端和消费端代码中的接入点,由自建集群接入点改为消息队列 RabbitMQ版的公网接入点。

  2. 维持旧的消费者。
    此时旧消费者仍在持续消费存量的旧消息,即同时有两个消费端在同时消费不同的消息。

  3. 在旧 RabbitMQ 集群的消息全部被旧消费者消费后,下线旧消费者以及旧 RabbitMQ 集群。
    成功下线自建 RabbitMQ 集群之后,表示您已完成开源 RabbitMQ 迁移上云。如何确认旧消息已被消费完成,请参考如何确认集群消息已被消费完毕