上云无忧 > 文档中心 > 腾讯云微服务引擎 TSE - Zookeeper 热迁移方案
微服务引擎 TSE
腾讯云微服务引擎 TSE - Zookeeper 热迁移方案

文档简介:
操作场景: 当您在生产环境上已经使用了自建的 Zookeeper 集群,并希望将其上已运行的服务迁移至腾讯云的 TSE Zookeeper 时,可以通过本指引进行生产环境的平滑热迁移,以保证在迁移过程中不影响现网服务的可用性和稳定性。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

操作场景

当您在生产环境上已经使用了自建的 Zookeeper 集群,并希望将其上已运行的服务迁移至腾讯云的 TSE Zookeeper 时,可以通过本指引进行生产环境的平滑热迁移,以保证在迁移过程中不影响现网服务的可用性和稳定性。 本文主要介绍 TSE Zookeeper 通过动态重新配置(Dynamic Reconfig)机制实现平滑迁移的方案和操作步骤,帮助您将自建 Zookeeper 集群迁移至 TSE Zookeeper 集群。

操作原理

Zookeeper 3.5.0 版本增加了动态重新配置(Dynamic Reconfig)功能,支持 Zookeeper 在运行过程中修改节点角色并立刻生效。
本迁移方案利用了动态重新配置机制:
1. 首先通过 Reconfig 操作实现源集群的扩容:将 TSE Zookeeper 的节点作为 Non-voting-follower 角色合并至您的源 Zookeeper 集群,并在数据同步完成后将其动态配置为 Participant。
2. 之后,在新组成的集群中,将源集群上运行的服务滚动修改注册至 TSE Zookeeper 节点。
3. 最后,再次通过 Reconfig 操作实现缩容:将源集群中的节点动态配置为 Non-voting-follower 角色,并逐渐将源集群下线,完成迁移至 TSE Zookeeper。

前提条件

1. 请确保您的源 Zookeeper 集群版本为 3.5.0 以上。如果您的源集群当前版本低,请进行版本升级后再进行迁移操作。
2. 请获取并记录您的源 Zookeeper 集群信息。您可以在 zoo.cfg 文件中查看到源集群信息,请获取源集群各节点的 IP、客户端连接端口、数据同步端口、选举端口。如以下代码中所展示的,数据同步端口为 3888, 选举端口为 2888,客户端连接端口为 2181。
说明:
server.id中客户端参数项没有配置,则以 clientPort 配置的客户端参数为准。
		
server.1=10.0.0.12:3888:2888;2181
server.2=10.0.0.5:3888:2888;2181
server.3=10.0.0.15:3888:2888;2181
3. 登录 TSE 控制台,在相同 VPC 或相通的网络环境下,新建一个 Zookeeper 实例,并获取客户端访问地址。详细操作请参见 引擎管理。 请确保您的 TSE Zookeeper 大版本与源集群大版本一致,如 3.5.X。

说明:
如果您是云梯用户,无需区分 VPC,但如果自建集群端口非标准 2181、2888、3888 请联系TSE团队或 快速提工单 ,以解除 TSE Zookeeper 对非标端口的限制。

操作步骤

步骤1:迁移准备

1. 开启迁移任务

在您的 TSE Zookeeper 引擎实例详情页 - 迁移任务页面,点击开始迁移。
说明:
引擎实例进入迁移状态后,将不可进行重启、修改配置等操作。您的迁移任务进度将被保存,您可以随时退出和继续任务。

2. 连通性测试

请按照 server.id 的顺序填入源集群所有节点的信息,并点击连通性测试。

3. 设置超级管理员

执行 Reconfig 操作需要超级管理员权限,需要获得源集群超级管理员的用户名和密码。 如果您的源集群当前未配置超级管理员,可以根据本步骤生成的 token,在下一步骤中进行配置;如果您的源集群当前已配置超级管理员,请检查是否与本步骤生产的 token 一致,如不一致请更改为一致,源集群超级管理员配置需要与 TSE 集群中的保持一致。

4. 开启源集群 Reconfig 功能

如果您的源集群未开启 Reconfig 功能,请添加以下配置进行开启,后续的迁移步骤依赖于使用 Reconfig 机制;如果您的源集群已开启 Reconfig 功能,请参照以下配置进行检查。
JVM 相关参数配置
在原生 Zookeeper 集群中,可以通过 zoo.cfg 同级目录下创建 java.env 文件来引入 JVM 参数,Zookeeper 集群在启动时将会自动加载此目录下的内容。在 java.env 中我们需要填入如下内容:

或者,您也可以选择在 JVM 启动参数中添加以下内容:
		
-Dzookeeper.DigestAuthenticationProvider.superDigest=[digest占位符]
说明:
[digest 占位符] 为设置超级管理员时生成的 token。
zoo.cfg 相关参数配置
		
4lw.commands.whitelist=*
quorumListenOnAllIPs=true
reconfigEnabled=true
zoo.cfg 中添加以上参数。其中:
4lw.commands.whitelist=* 表示开启四字命令。TSE Zookeeper 的迁移任务会使用四字命令来获取源集群各节点的状态。
quorumListenOnAllIPs=true 表示 ZooKeeper 服务器将在所有可用 IP 地址上监听连接,而不仅是在配置文件的服务器列表中配置的地址。TSE Zookeeper 的实例会通过非配置的地址连接上源集群。
reconfigEnabled=true 表示开启 Reconfig 功能。
说明:
如果您计划在迁移中依赖 ZK 原生的日志同步,可以增加 zoo.cfgsyncLimitinitLimit 时间,推荐为 30。防止数据量大导致 TSE 集群加入之后的同步过程超过预设时间。

步骤2:导入快照(可选)

如果您的源集群中的持久化数据量较大,建议通过导入包含事务日志和快照日志的压缩包的方式,将源集群中的数据提前迁移至 TSE 集群中。

1. 确认源集群 Leader 节点

由于导入的数据最好为最新版本,建议您选取源集群 Leader 节点中的数据进行导出。您可以在 TSE Zookeeper 迁移任务界面查看到源集群 Leader 节点的 IP。

2. 制作快照压缩包

TSE Zookeeper 迁移任务支持导入的快照文件的格式为,名称为:data.tar.gz 的压缩包。 压缩包可以包含节点完整数据的 snaplog 日志文件,或者仅包含 snap 的文件。
注意:
如果 data.tar.gz 导入的数据不全,可能会导致集群合并失败。因此,TSE 提供并且建议您使用 TSE ZK 快照导出工具来生成标准的压缩包。
请访问 Github 地址,下载工具 JAR 包,并上传至源集群所在的合适目录下。执行以下命令生成快照文件压缩包:
		
java -DconfigPath=*/conf/zoo.cfg -jar tar-zookeeper-1.0.0-Beta.jar -n 1
说明:
* 代表源集群 Leader 节点所在的路径。
生成压缩包后,请将文件下载至本地。如果您的源集群部署在 CVM 中,可以通过以下命令下载文件至本地:
		
sz -e data.tar.gz

3. 上传快照压缩包

在 TSE ZK 迁移任务中,上传导出的快照压缩包。

步骤3:实施迁移

进入迁移任务的第三阶段时,可以观察到源 ZK 集群与 TSE ZK 集群分别存在一个 Leader 节点,并且两个集群中的节点 ID(ZK 节点的 myid)分别为从 1 递增的数字。因为此时合并未开启,两个集群独立存在,如下图中所示:

1. 合并集群

当您准备好开启迁移时,可以点击页面下方的合并集群按钮,TSE ZK 集群中的节点将会重启并以 Non-voting-follower 的角色加入至源 ZK 集群中。
说明:
合并集群过程将持续10~20分钟,如果合并过程中遇到问题,可以 快速提工单 以获取帮助。

当合并完成后,可以观察到合并后的集群中只存在一个 Leader 节点并且来自于源 ZK 集群。 TSE ZK 集群中的节点 ID 变为了延续源集群中节点 ID 的递增数字,TSE ZK 集群中的节点当前全部处于 Non-voting-follower 角色,并且在数据同步完成后,TSE ZK 集群节点的事务 ID 与源 ZK 集群保持为一致。

2. 查看集群信息

在集群成功合并后,TSE ZK 节点已经以 Non-voting-follower 的角色加入了源集群,现在需要通过 Reconfig 操作将 TSE ZK 节点的角色动态配置为 Follower 角色。 首先,通过 zkCli连接至任意源集群中的节点:
		
zkCli.sh -server [源节点 IP]:[客户端连接端口]
此时可以在 zkCli 中执行 config 命令,查看当前集群的组成。通过以下结果可以观察到,TSE 集群节点虽然已经变成 Follower 加入到集群了,但是目前还只是 Non-voting-follower 节点,我们需要通过 Reconfig 功能,将其正式加入到集群中。
		
[zk: 10.0.0.12:2181(CONNECTED) 0] config
server.1=10.0.0.12:2888:3888:participant;0.0.0.0:2181
server.2=10.0.0.5:2888:3888:participant;0.0.0.0:2181
server.3=10.0.0.15:2888:3888:participant;0.0.0.0:2181
version=a00000000

3. 输入超级管理员权限

由于 Reconfig 功能需要管理员才能操作,这里我们需要通过 addAuth 命令完成管理员身份认证。管理员的用户名密码为步骤1中设置的用户名密码。
		
addauth digest [用户名]:[密码]

4. 滚动加入新节点

TSE 集群的选举端口、数据同步端口、客户端端口默认分别是:3888、2888、2181。因此,reconfig add 命令有以下两种可选方式将 TSE 节点加入到集群中,您可以根据自己的业务权衡:
警告:
请注意务必以节点 ID 从小到大的顺序添加新节点,并在实施迁移过程中保持集群中的 server.ID 与控制台中展示的节点 ID 一致。
方式一:以 participant 加入到源zk集群中
		
reconfig -add [节点id]=[ip]:2888:3888:participant;2181
方式二:将节点以 observer 加入到源zk集群中
		
reconfig -add [节点id]=[ip]:2888:3888:observer;2181
说明:
如果您选择以方式二将 TSE ZK 集群加入到源集群中,那么在移除源集群节点前,需要使用方式一将 TSE ZK 集群节点转为 follower 加入到集群中来。
这里直接以方式一作为示例:
		
[zk: 10.0.0.12:21811(CONNECTED) 5] reconfig -add 4=10.0.0.28:2888:3888:participant;2181
[zk: 10.0.0.12:21811(CONNECTED) 6] reconfig -add 5=10.0.0.49:2888:3888:participant;2181
[zk: 10.0.0.12:21811(CONNECTED) 7] reconfig -add 6=10.0.0.19:2888:3888:participant;2181
Committed new configuration:
server.1=10.0.0.12:2888:3888:participant;0.0.0.0:2181
server.2=10.0.0.5:2888:3888:participant;0.0.0.0:2181
server.3=10.0.0.15:2888:3888:participant;0.0.0.0:2181
server.4=10.0.0.112:2888:3888:participant;0.0.0.0:2181
server.5=10.0.0.36:2888:3888:participant;0.0.0.0:2181
server.6=10.0.0.34:2888:3888:participant;0.0.0.0:2181
version=a00000019
以上操作将 TSE ZK 集群中的三个节点通过 Reconfig 作为 follower 加入了合并集群,可以通过最新的 config 内容以及控制台上增加的事务 ID 观察到 Reconfig 已经生效。

5. 迁移服务

在开启迁移服务前,请先确认数据同步已完成,这里可以通过两种方式进行观察确认。
方式一:TSE ZK 集群节点的事务 ID 在合并集群中是否已占据多数。
方式二:TSE ZK 控制台 - 数据管理页面中查看是否源集群中的数据已经完成迁移
通过以上两种方式确认数据同步完成后,可以依次重启在源集群之上运行的服务,并将其注册地址改为 TSE ZK 的客户端访问地址。

6. 滚动移除旧节点

在完成以上全部步骤后,可以通过 reconfig -remove 命令将源集群节点从合并集群中移除:
		
reconfig -remove [节点id]
注意:
在移除源集群节点的过程中,为了集群的稳定性,请最后一个移除 Leader 节点。
在本示例中,server.3 是 Leader 节点,因此将以1、2、3的顺序移除旧节点:
		
[zk: 10.0.0.12:21811(CONNECTED) 8] reconfig -remove 1
[zk: 10.0.0.12:21811(CONNECTED) 9] reconfig -remove 2
[zk: 10.0.0.12:21811(CONNECTED) 10] reconfig -remove 3
Committed new configuration:
server.4=10.0.0.112:2888:3888:participant;0.0.0.0:2181
server.5=10.0.0.36:2888:3888:participant;0.0.0.0:2181
server.6=10.0.0.34:2888:3888:participant;0.0.0.0:2181
version=a00000022
由于 Leader 节点的移除,集群会发生选举,并存在秒级的断连。 我们可以观察到源集群里面的节点都转为 Follower,TSE ZK 集群里面的节点出现了 Leader 节点。

7. 完成迁移任务

在观察业务正常后,可以逐渐退出源集群节点的进程,并在完成后点击完成迁移按钮。
说明:
引擎成功完成迁移后,将无法再次开启迁移任务。
相似文档
  • 操作场景: 当您在生产环境上已经使用了自建的 Nacos 集群,并希望将其上已运行的服务迁移至腾讯云的 TSE Nacos 时,可以根据您的业务需求,在本指引中选择适合您的迁移方案。
  • 适用场景: 迁移整体思路是通过数据库层面的数据导入与同步,实现将自建的 Apollo 集群迁移到 TSE Apollo 集群。具体步骤请参见以下步骤进行操作。
  • 适用场景: 您在生产环境上已经使用了自建的 Eureka 集群,希望将其上已运行的服务迁移至腾讯云的 TSE 注册中心。TSE 提供 PolarisMesh (北极星)完全兼容 Eureka 注册中心。在功能完全对齐的基础上,TSE 北极星在性能上相比开源 Eureka 有突破性提升。
  • TSE 北极星网格用于解决分布式或者微服务架构中的服务注册与发现、故障容错、流量控制和安全问题,提供快速部署、高可用容灾、免运维、一键搭建北极星网格能力。
  • 操作场景: TSE 北极星网格用于解决分布式或者微服务架构中的服务注册与发现、故障容错、流量控制和安全问题,支持多语言客户端、集成多种主流服务框架,帮助用户实现高效、稳定、高可用、免运维的服务治理能力。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部