本文说明如何将开源RabbitMQ集群元数据迁移到阿里云消息队列RabbitMQ版实例。

前提条件

您已完成以下操作:
  • 为要迁移元数据的RabbitMQ集群开启RabbitMQ管理插件。开启RabbitMQ管理插件后,您才可以通过RabbitMQ控制台或HTTP API导出RabbitMQ集群元数据。详情请参见开启RabbitMQ管理插件
  • 创建作为元数据迁移目标的消息队列RabbitMQ版实例。详情请参见创建消息队列RabbitMQ版实例

背景信息

RabbitMQ集群元数据是指RabbitMQ集群的信息,包括User、Vhost、Queue、Exchange、Binding Key、Permission、Parameter等信息。RabbitMQ集群元数据存储于RabbitMQ集群的内部数据库,在集群的各个节点之间自动复制。集群中的每个节点都有自己的元数据副本。当某个节点的元数据变更时,所有节点的元数据都会同步更新。因此,集群的各个节点的元数据被导出时都是相同的。RabbitMQ集群元数据可以被导出成一份JSON文件,然后被导入另一个RabbitMQ集群,实现RabbitMQ集群元数据备份。

迁移元数据上云是指将开源RabbitMQ集群的元数据迁移到阿里云消息队列RabbitMQ版实例。消息队列RabbitMQ版是阿里云提供的全托管消息队列服务,兼容开源RabbitMQ。您可以将RabbitMQ集群元数据导出,然后导入消息队列RabbitMQ版实例,消息队列RabbitMQ版会根据成功导入的元数据在目标消息队列RabbitMQ版实例中创建对应的Vhost、Queue、Exchange、Binding,实现RabbitMQ集群元数据迁移上云。

导入须知

  • 导入的JSON格式的元数据文件必须包含Vhost信息,即必须包括vhosts列表,且exchangesqueuesbindings列表中必须包括vhost。详情可参考sample.json
  • 导入的Vhost、Exchange、Queue、Binding必须符合消息队列RabbitMQ版的数量限制和字符限制。详情请参见使用限制
  • 如果要导入10个以上的Vhost,建议您拆分RabbitMQ集群元数据文件,然后再分批导入。详情请参见如何拆分元数据文件?
  • 如果您只需要导出部分Vhost,建议您先导出所有Vhost,然后在导出的JSON格式的元数据文件的vhosts列表中删除不需要的Vhost,最后导入元数据文件。详情请参见如何导出部分Vhost?

元数据兼容性

由于RabbitMQ和消息队列RabbitMQ版在权限管控机制等方面存在差异,部分RabbitMQ集群元数据不支持导入消息队列RabbitMQ版实例。这些RabbitMQ集群元数据在导入消息队列RabbitMQ版实例时会被自动忽略。消息队列RabbitMQ版实例的RabbitMQ集群元数据兼容性如下:

元数据 描述 兼容
rabbit_version RabbitMQ集群版本。
users RabbitMQ集群用户。
注意 如果您的RabbitMQ集群使用了用户,您可以通过访问控制RAM为消息队列RabbitMQ版实例实现对应的用户管理模式。详情请参见创建RAM用户
vhosts RabbitMQ集群的Vhost。
permissions RabbitMQ集群的用户管理Vhost的权限。
注意 如果您的RabbitMQ集群使用了用户管理Vhost的权限,您可以通过访问控制为消息队列RabbitMQ版实例实现对应的用户管理Vhost的权限。详情请参见RAM权限策略
parameters RabbitMQ集群的运行时参数。
global_parameters RabbitMQ集群的全局运行时参数。
policies RabbitMQ集群的一类Vhost运行时参数,用于为Vhost下的Exchange和Queue设置可选参数。
注意 如果您的RabbitMQ集群使用了Vhost域运行时参数配置,您可以在消息队列RabbitMQ版控制台创建对应的Exchange和Queue时,设置相应的可选参数。Exchange和Queue的可选参数设置后不支持修改。如需修改,您需要删除后重新创建。详情请参见创建Exchange创建Queue
queues RabbitMQ集群的Queue。
exchanges RabbitMQ集群的Exchange。
bindings RabbitMQ集群的Exchange和Queue的绑定关系。

迁移元数据

  1. 登录消息队列RabbitMQ版控制台
  2. 在顶部导航栏,选择地域。
  3. 在左侧导航栏,单击RabbitMQ一键上云
  4. RabbitMQ一键上云页面的1. 导出元数据页签下方,参考以下任一方式导出元数据,然后单击下一步
    • RabbitMQ控制台
      1. 在浏览器打开RabbitMQ控制台。

        RabbitMQ控制台地址:http://<您的RabbitMQ IP地址>:15672/

      2. 在登录页面的Username文本框输入您的用户名,在Password文本框输入您的密码,然后单击Loginpg_login
      3. Overview页签下方,单击Import/export definitions,从Export区域的Virtual host列表,选择All,然后单击Download broker definitionspg_ui_export
      4. 另存为对话框,选择RabbitMQ集群元数据文件保存路径,然后单击保存pg_export_source
    • RabbitMQ HTTP API
      1. 打开终端。
      2. 执行以下命令导出RabbitMQ集群元数据文件。
        wget --user <您的RabbitMQ账号> --password <您的RabbitMQ密码> http://<您的RabbitMQ IP地址>:15672/api/definitions -O <您的元数据文件保存路径>
    元数据文件保存路径下显示导出的RabbitMQ集群元数据文件。
  5. 2. 导入元数据页签下方,单击导入元数据
    pg_select_to_import
  6. 打开对话框,选择要导入的RabbitMQ集群元数据文件,然后单击打开
    pg_open
  7. 确认对话框,单击导入
    pg_import
    RabbitMQ一键上云页面的导入结果区域显示导入结果。
    注意 如果有导入失败的Vhost,您需要根据备注中的导入失败原因修改元数据文件后再次导入。导入的元数据会做幂等处理,已经导入的元数据再次导入不会有影响。
    pg_import-result
    参数 描述
    Vhost 本次导入的Vhost的名称。
    导入结果 本次导入的Vhost的情况。
    • 如果显示成功,说明该Vhost导入成功。
    • 如果显示失败,说明该Vhost导入失败。
    备注 导入结果的备注。
    • 如果该Vhost导入成功,备注显示两个连续的短划线(--)。
    • 如果该Vhost导入失败,备注显示导入失败的原因。