迁移其他RocketMQ的元数据到RocketMQ实例
本章节指导您迁移其他RocketMQ的元数据到云上RocketMQ实例。
主要提供以下两种迁移方法,请根据实际情况选择:
- 方法一:通过mqadmin命令导出源实例的元数据,然后在云上RocketMQ实例中创建迁移任务。
- 方法二:导出源实例的Topic和消费组列表(适用于不支持通过mqadmin命令导出元数据的场景),然后通过脚本将Topic和消费组列表导入到云上RocketMQ实例中。
迁移元数据导入Topic和消费组时,Topic和消费组会创建在所有代理上。因此,在4.8.0版本中,迁移能导入的Topic上限为单个代理的Topic上限。例如,rocketmq.4u8g.cluster*2代理的实例,单个代理Topic上限为4000,则通过迁移整个实例最多能导入4000个Topic。
前提条件
- 已购买RocketMQ实例。
- 准备一台Linux系统的主机,在主机中安装Java Development Kit 1.8.111或以上版本,并完成环境变量配置,具体操作可参见快速连接RocketMQ并生产消费消息。
- 准备网络环境。
RocketMQ实例分内网地址以及公网地址两种网络连接方式。如果使用公网地址,则消息生产与消费客户端需要有公网访问权限,并配置如下安全组。
表1 安全组规则(RocketMQ实例4.8.0版本) 方向
协议
端口
源地址
说明
入方向
TCP
8200
RocketMQ客户端所在的IP地址或地址段。
使用TCP协议,通过公网访问元数据节点的端口。
入方向
TCP
10101-10199
使用TCP协议,通过公网访问业务节点的端口。
表2 安全组规则(RocketMQ实例5.x版本) 方向
协议
端口
源地址
说明
入方向
TCP
8200
RocketMQ客户端所在的IP地址或地址段。
使用TCP协议,通过公网访问实例的端口。
入方向
TCP
8081
使用gRPC协议,通过公网访问实例的端口。
入方向
TCP
10101
使用TCP协议,通过公网访问业务节点的端口。
方法一:通过mqadmin命令导出源实例的元数据,然后在华为云上RocketMQ实例中创建迁移任务
获取其他厂商、自建RocketMQ或华为云上另一个RocketMQ实例的元数据
- 登录已准备的Linux系统主机,下载RocketMQ软件包。
wget https://archive.apache.org/dist/rocketmq/4.9.8/rocketmq-all-4.9.8-bin-release.zip
- 解压软件包。
unzip rocketmq-all-4.9.8-bin-release.zip
- (可选)如果RocketMQ实例开启了ACL访问控制,执行mqadmin命令时,需要鉴权。
切换到解压后的软件包目录下,在“conf/tools.yml”文件中,增加如下内容。
accessKey:******* secretKey:*******
accessKey和secretKey表示在控制台“用户管理”页面,创建的用户名和密钥,具体可参见创建用户。
- 进入解压后的软件包目录下,执行以下命令,查询集群名称。
sh ./bin/mqadmin clusterList -n {nameserver地址及端口号}
例如:“nameserver地址及端口号”为“192.168.0.65:8100”。
sh ./bin/mqadmin clusterList -n 192.168.0.65:8100
- 执行以下命令,导出元数据。
- 未开启SSL的实例,执行以下命令。
sh ./bin/mqadmin exportMetadata -n {nameserver地址及端口号} -c {RocketMQ集群名称} -f {导出的元数据文件的存放路径}
例如:“nameserver地址及端口号”为“192.168.0.65:8100”,“RocketMQ集群名称”为“DmsCluster”,“导出的元数据文件的存放路径”为“/tmp/rocketmq/export”。
sh ./bin/mqadmin exportMetadata -n 192.168.0.65:8100 -c DmsCluster -f /tmp/rocketmq/export
- 已开启SSL的实例,执行以下命令。
JAVA_OPT=-Dtls.enable=true sh ./bin/mqadmin exportMetadata -n {nameserver地址及端口号} -c {RocketMQ集群名称} -f {导出的元数据文件的存放路径}
例如:“nameserver地址及端口号”为“192.168.0.65:8100”,“RocketMQ集群名称”为“DmsCluster”,“导出的元数据文件的存放路径”为“/tmp/rocketmq/export”。
JAVA_OPT=-Dtls.enable=true sh ./bin/mqadmin exportMetadata -n 192.168.0.65:8100 -c DmsCluster -f /tmp/rocketmq/export
- 未开启SSL的实例,执行以下命令。
在控制台迁移元数据
- 登录管理控制台。
- 在管理控制台左上角单击,选择区域。
请选择RocketMQ实例所在的区域。
- 在管理控制台左上角单击,选择“应用中间件 > 分布式消息服务RocketMQ版”,进入分布式消息服务RocketMQ专享版页面。
- 单击RocketMQ实例的名称,进入实例详情页面。
- 在左侧导航栏,选择“元数据迁移”,进入迁移任务列表页面。
- 单击“创建迁移任务”,弹出“创建迁移任务”对话框。
- 参考表3,设置迁移任务的参数。
表3 迁移任务参数说明 参数
说明
任务类型
选择“自建RocketMQ上云”。
任务名称
您可以自定义迁移任务的名称,用于区分不同的迁移任务。
任务名称命名规则如下:- 长度为4~64个字符。
- 只能由英文字符、数字、中划线、下划线组成,且开头须为英文字母。
是否同名覆盖
元数据
上传元数据。
- 单击“确定”。
迁移完成后,在迁移任务列表页面查看“任务状态”。
- 当“任务状态”为“迁移完成”,表示所有元数据都已成功迁移。
- 当“任务状态”为“迁移失败”,表示元数据中部分或全部元数据迁移失败。单击迁移任务名称,进入迁移任务详情页,在“迁移结果”中查看迁移失败的Topic/消费组名称,以及失败原因及解决方法。解决问题后,再执行后面的步骤。
- 迁移生产消息至分布式消息服务RocketMQ版实例。
将生产客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启生产业务,使得生产者将新的消息发送到分布式消息服务RocketMQ版实例中。
- 迁移消费消息至分布式消息服务RocketMQ版实例。
待消费组中的消息消费完之后,将消费客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启消费业务,使得消费者从分布式消息服务RocketMQ版实例中消费消息。
- 如果有多个RocketMQ实例需要迁移到同一个分布式消息服务RocketMQ版实例中,请依次执行1~10进行迁移。
方法二:导出源实例的Topic和消费组列表,然后通过脚本将Topic和消费组列表导入到华为云上RocketMQ实例中
获取其他厂商、自建RocketMQ或华为云上另一个RocketMQ实例的元数据
- 登录其他厂商控制台,导出源实例的Topic和消费组列表。
- 将Topic和消费组列表分别放入“topics.txt”和“groups.txt”中,格式为每行一个Topic名称/消费组名称,例如:
topic-01 topic-02 ... topic-n
在“groups.txt”中不能存在空行(例如在消费组名称后多增加了一个换行符),否则导入云上RocketMQ实例时,会多创建名称为空的消费组。
通过脚本将Topic和消费组列表导入到华为云上RocketMQ实例中
- 登录已准备的Linux系统主机,下载RocketMQ软件包。
wget https://archive.apache.org/dist/rocketmq/4.9.8/rocketmq-all-4.9.8-bin-release.zip
- 解压软件包。
unzip rocketmq-all-4.9.8-bin-release.zip
- (可选)如果RocketMQ实例开启了ACL访问控制,执行mqadmin命令时,需要鉴权。
切换到解压后的软件包目录下,在“conf/tools.yml”文件中,增加如下内容。
accessKey:******* secretKey:*******
accessKey和secretKey表示在控制台“用户管理”页面,创建的用户名和密钥。
- 进入解压后软件包的bin目录下,将“topics.txt”和“groups.txt”上传到此目录中。
- 执行以下脚本,将Topic和消费组列表导入到云上RocketMQ实例中。
#!/bin/bash # Read groups from groups.txt file groups=() while read -r group; do groups+=("$group") done < "groups.txt" # Read topics from topic.txt file topics=() while read -r topic; do topics+=("$topic") done < "topics.txt" # Add topics for topic in "${topics[@]}"; do echo "Adding topic: $topic" sh mqadmin updateTopic -n <namesrvIp:8100> -c DmsCluster -t "$topic" done # Add consumer groups for group in "${groups[@]}"; do echo "Adding consumer group: $group" sh mqadmin updateSubGroup -n <namesrvIp:8100> -c DmsCluster -g "$group" done
其中“namesrvIp:8100”为云上RocketMQ实例的连接地址。
- 登录管理控制台。
- 在管理控制台左上角单击,选择区域。
请选择RocketMQ实例所在的区域。
- 在管理控制台左上角单击,选择“应用中间件 > 分布式消息服务RocketMQ版”,进入分布式消息服务RocketMQ专享版页面。
- 单击RocketMQ实例的名称,进入实例详情页面。
- 在左侧导航栏,选择“元数据迁移”,进入迁移任务列表页面。
- 单击任务名称,进入任务详情页面,可在“迁移结果”中分别查看到Topic和消费组列表是否成功导入。
- 迁移生产消息至分布式消息服务RocketMQ版实例。
将生产客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启生产业务,使得生产者将新的消息发送到分布式消息服务RocketMQ版实例中。
- 迁移消费消息至分布式消息服务RocketMQ版实例。
待消费组中的消息消费完之后,将消费客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启消费业务,使得消费者从分布式消息服务RocketMQ版实例中消费消息。
- 如果有多个RocketMQ实例需要迁移到同一个分布式消息服务RocketMQ版实例中,请依次执行1~10进行迁移。