客户在使用 TDMQ RocketMQ 版时,通常会面临着存量业务的切换,例如从自建的 RocketMQ 或者其他平台的托管版 RocketMQ 迁移到 TDMQ-RocketMQ 版上。
在进行迁移时,客户一般有两种迁移方式:有感迁移和无感迁移。
有感迁移指客户先进行元数据的导入和导出,后续按照 数据流迁移指引,依次对消费者和生产者切换接入地址。但是这种迁移方式对于客户的在线业务有一定侵入性,在接入点的切换时,会对线上业务有影响,因此更加适合对业务连续性不高或者没有要求的迁移场景。 操作场景
目前,腾讯云 TDMQ RocketMQ 版支持客户在不中断业务的前提下,进行整个集群的迁移,且在整个迁移的各个阶段中,客户可以在控制台可视化查看迁移任务的进度,并且支持任务的暂停和回滚。
该任务指导您将开源的 RocketMQ 集群的无感迁移至腾讯云消息队列 RocketMQ 版。
迁移步骤
前提条件
在正式开始迁移前,您需要在迁移上云页面选择新建集群无感迁移类型的任务,按照如下指引填写任务的相关信息。在创建任务前,建议您评估好源集群当前的流量情况,选择合适的腾讯云 RocketMQ 集群进行购买,避免出现迁移到云上后,因为云上的集群规格过小导致出现限流情况。
任务名称:迁移任务的名称,按照实际业务情况命名即可。
源集群名称:用户自建的集群名称,按照实际业务情况命名即可。
目标集群类型:目前支持 RocketMQ 4.x 专享集群和 RocketMQ 5.x 集群。
目标集群地域:根据实际业务需要选择,仅展示存在目标集群的地域。
目标集群:可以根据实际需要选择 RocketMQ 4.x 通用集群和专享集群或者 RocketMQ 5.x 集群,注意保证目标集群的规格能够完全承载源集群的流量。
说明:
由于适配迁移上云的集群需要单独安装迁移组件,因此需要单独购买支持无感迁移的 4.x 专享集群。您也可以在购买专享集群时就打开迁移上云组件 的开关,如下图所示。RocketMQ 4.x 通用集群和 5.x 全系列不受迁移组件的影响,可以直接使用您之前购买的对应集群。
信息填写完成后,单击创建任务后,正式进入任务第一步。
在任务详情页,您可以随时查看已经创建好的任务的进度和当前的架构示意图等。
步骤1:连接源集群
在这一步,您需要确认网络连接类型,填写源集群的相关信息:
网络连接类型:腾讯云上的 RocketMQ 集群连接源集群时使用的网络连接类型。根据实际情况可以选择公网和 VPC 网络,后续步骤中会对网络连接进行校验。如您选择的是 VPC 网络,需要再次选择具体的 VPC 和子网。
说明:
如您选择的是使用公网,为了保证迁移能够顺利进行,您需要允许腾讯云访问您对应网络内的资源。您可以在下表中选择您的地域,将对应地域的腾讯云的 IP 地址加入到您自建集群的公网白名单内。
|
北京 | 152.136.0.0/16 81.70.0.0/16 |
上海 | 121.4.0.0/16 106.54.0.0/16 49.234.0.0/16 49.235.0.0/16 175.24.0.0/16 |
广州 | 119.29.0.0/16 106.52.0.0/16 106.53.0.0/16 106.55.0.0/16 118.89.0.0/16 81.71.0.0/16 42.194.0.0/16 |
南京 | 119.45.0.0/16 129.211.0.0/16 146.56.0.0/16 175.25.0.0/16 |
中国香港 | 119.28.0.0/16 101.32.0.0/16 |
新加坡 | 43.134.0.0/16 101.32.0.0/16 |
硅谷 | 170.106.0.0/16 49.51.0.0/16 |
弗吉尼亚 | 43.130.0.0/16 170.103.0.0/16 |
上海金融 | 212.129.0.0/16 |
NameServer 地址:根据上一步填写的网络连接类型,填写源集群的 NameServer 地址,格式为 IP + 端口,多个地址用分号隔开。
NameServer 地址类型:仅在使用 VPC 网络访问源集群时需要填写。根据不同客户的使用习惯,NameServer 地址可能为腾讯云上的 CVM 地址或是 CLB 地址,请如实填写。此处仅用于区分网络打通场景,对后续的操作没有影响。
源集群是否开启 ACL:如实填写,如果您的源集群开启了 Admin API 的 ACL 管理,为了保证迁移顺利,您需要填写源集群的 accessKey 和 secretKey(此处为调用 Admin API 的ak 和 ak,而非收发消息使用的 ak sk,这里需要注意区分)。
注意:
根据不同客户的迁移场景,存在多个源集群迁移到同一个腾讯云 RocketMQ 集群(目标集群)的场景,这种场景下需要注意以下问题:
1. 同一个目标集群仅能同时在一个迁移任务中,因此如果出现上述情况,请多个源集群分批次迁移。
2. 多个迁移任务时,不同的源集群(假设分别为源集群 A 和 B)可能 ACL 的开启情况不一样。假设第一次迁移任务时迁移源集群 A,在创建任务阶段,源集群 A 的 ACL 开关填写为开启,则实际目标集群的 ACL 开关也已经开启。在进行第二次迁移任务,即迁移源集群 B时,页面会默认连接源集群 B时也需要 ACL信息,如果实际源集群 B 没有使用 ACL,则在后续切流过程中,需要将源集群 B 的客户端都补充 AK/SK 的相关配置。
3. 如果在上述迁移场景中,源集群 A 在首次迁移任务时未开启 ACL 开关,则默认也不会对源集群 B 的客户端进行 AK/SK 的校验。
以上信息填写完成后,可以单击页面底部的完成网络配置,TDMQ RocketMQ 的迁移组件会连接源集群,如果连接成功后,可以单击进入下一步。如果连接出现错误,会在页面提示错误的原因,常见的错误原因和解决办法有:
|
连接 NameServer 出错 | 确认填写的 NameServer 地址是否正确; 如您使用的是公网连接,请确认 NameServer 的公网白名单是否添加了腾讯云的 IP 白名单,或者白名单的配置是否正确; 如您使用的是公网连接,请确认目标集群,即您购买的腾讯云 RocketMQ 集群开启了公网连接 |
鉴权错误 | 确认源集群是否开启权限管控,如已开启,请确认填写的 accessSecret 和 accessKey 是否正确 |
步骤2:导入元数据
在成功连接到源集群的 NameServer 后,您可以开始将源集群的元数据同步到目标集群。
迁移工具会自动扫描出源集群的相关元数据,即 Topic 和 Group 等。如下图所示,您可以在页面上确认 Topic 和 Group 的相关信息,确认无误后,您可以单击 操作 列的 确认并导入 按钮进行确认;您也可以通过单击列表前的 按钮进行批量导入。 迁移元数据时的注意事项:
如您在当前列表没有找到源集群上创建的 Topic 或者 Group,您可以单击右上角的刷新按钮进行刷新。
如果刷新后还是没有源集群的部分 Topic 和 Group信息,您可以单击新建按钮进行新建 Topic 或者 Group 操作。
Topic 的队列数默认和源集群内的队列数保持一致,出于稳定性考虑,如您源集群的 Topic 的队列数不满足 TDMQ RocketMQ 的队列数范围(如超出16个队列或者小于3个队列的情况),RocketMQ 会对队列数进行微调,页面会进行提示。
迁移的 Group 默认均为 TCP 协议,如需创建支持 HTTP 协议的Group您可以在目标集群页单独创建。
对于目标集群为 4.x 专享集群的情况,如果源集群使用了命名空间的,迁移工具会默认截取 Topic 或者 Group 命名中 “%” 符号前的字段作为命名空间的名称;如果您的源集群没有启用命名空间,则迁移工具会默认将 Topic 和 Group 都导入到一个默认名的 Default 的命名空间内。
导入元数据阶段,您也可以添加集群用于的收发消息的角色和AK/SK,如果角色过多,您可以点击右上角的 图标进行批量导入。 导入元数据后,如果您需要创建新的 Topic / Group,或者对 Topic / Group 进行操作,请前往目标集群,即 RocketMQ 的控制台的对应集群的控制台进行创建。
说明:
如果在迁移的过程中出现元数据格式兼容问题,或者目标集群未全部获取您源集群的元数据信息,您可以通过 工单 联系我们。 步骤3:修改源集群接入点
在确认需要迁移的元数据都完成导入后,您需要根据页面的指引,修改所有客户端的接入点地址。
客户端修改接入点后,迁移工具会将流量转发到源集群上,实际各个客户端连接的还是源集群,故本步骤不会产生风险。在单击进入下一步前,请确保所有的客户端(包括消费者和生产者)的接入点均切换完成,否则在进入下一步进行 Topic 的灰度迁移时,未切换接入点的客户端将连接不到目标集群,因此无法进行灰度迁移。
在 接入点修改详情 列表页展示的源集群和目标集群下各个 Group 下连接的客户端个数对比,您可以以此来快速定位还未完成修改的消费者客户端。如下图所示,列表页会展示源集群和目标集群不一致的 Group 并自动展开两边的 Client 客户端列表进行对比,在 “备注” 列,您可以快速定位到原因。
如果确认所有客户端的接入点均已修改完成,则可以继续单击 下一步,正式进入切流阶段。在进入切流阶段前,如果出现有客户端接入点未修改完成的情况,页面也会提醒,如没有出现弹窗,则可以认为所有的消费者客户端接入点均切换完成。
步骤4:灰度迁移消息
在灰度迁移阶段,迁移工具将按 Topic 粒度进行逐个迁移,按照 “初始状态(读写源集群) > 开启双读(写源集群双读) > 双读双写 > 切流中(写目标集群双读) > 切流完成(读写目标集群)” 的顺序进行迁移,迁移过程中,每个状态均可以回滚到上一个状态:
初始状态:读写源集群状态,是迁移的起始状态,读写流量经过迁移组件代理转发,依旧访问源集群,因此对业务侧无侵入。
开启双读:消息生产者客户端写源集群,同时消息消费者同时读取来自源集群和目标集群的流量。
双读双写:消息生产者客户端发送的消息随机到源集群或者目标集群,您可以在监控页面查看不同集群的流量;同时消息消费者同时读取来自源集群和目标集群的流量。
切流中:消息生产者客户端写目标集群,同时消息消费者同时读取来自源集群和目标集群的流量。您需要在此阶段验证新的消息收发链路无异常,并等待源集群存量消息消费完成。
切流完成:在上一步确认新的消息收发链路符合预期后,在源集群已经消费所有消息并无堆积情况下,进入读写目标集群状态,全部读写流量只访问目标新集群。
如上图所示,您可以通过查看是否就绪列的内容,查看 Topic 是否具备迁移条件;迁移工具会间隔一段时间进行批量扫描,您也可以通过操作列的健康检查按钮进行单个 Topic 的实时检查。达到 “已就绪” 状态的 Topic 可以进入下一阶段,在切流过程中,您也可以单击回滚进行单个 Topic 或者批量的状态回滚。
在 Topic 切流的过程中,您可以通过迁移监控Tab查看整个集群或者单个 Topic 的流量和运行状态。仅处于“初始状态”的 Topic 支持移出迁移任务。
在切流过程中,您可以自由查看目标集群和源集群的 Group(消费者组)和客户端数量的对比,如上图所示,同时会提示源集群有哪些 Group 未完成切换。
在切流过程中,您也可以通过监控页签查看源集群和目标集群的流量变化,在监控数据会使用不同的图例展示出来。
步骤5:完成迁移
在所有 Topic 均到 “切流完成” 状态后,您可以进入下一步,即完成整个迁移过程。迁移完成后,即所有的 Topic 和客户端均完成迁移,所有的消息流量均在 TDMQ RocketMQ 上运行。您可以通过查看目标集群和源集群的监控,后续可以逐步下线源集群。
本页内容是否解决了您的问题?