背景
随着公司的发展,迁移机房这种事必不可少的会发生。这里描述一下kafka依赖的zk从腾讯云迁移到美团云的的实施方案。腾讯云部署了一个5台物理机构成的zookeeper集群,目前此集群使用方:hadoop、kafka、部分需要梳理的业务方。
腾讯云的机器在迁移到美团云之后需要下线,现有使用方对此zookeeper的依赖需要做处理,目前得到的结论如下:
hadoop:明确不再使用此zookeeper集群,不需要迁移;
kafka:需要迁移此zookeeper集群的数据;
业务方:需要梳理,并明确如何处理;
迁移方案
方案一
- 在美团云新建3台zk节点,新的3台zk的server list加入现有5台zk节点,组成8台zk节点;
- 启动美团云的3台zk节点,等待数据同步完成;
- 重新配置美团云3台zk节点,改成只有美团云3个节点的server list配置,整体stop,整体start;
- 更新kafka配置到美团云机房的3台zk机器,整体重启;
优点:操作简单,对现有zk集群没有侵入。
缺点:需要kafka集群整体重启,对kafka读写用户会产生抖动,需要配合停止写入;
方案二
- 在美团云新建3台zk节点,新的3台zk的server list加入现有5台zk节点,组成8台zk节点;
- 更新kafka配置到美团云机房的3台zk机器,轮询重启;
- 美团云机房3台节点更新配置到5台server list,这5台中需要包含当前集群的leader节点(这里命名为PreLeader,此节点目前还在腾讯云),轮询重启(此时从PreLeader的视角集群还是8台,但是从美团云3台节点的视角集群是5台);
- 从腾讯云机房的5个节点中选择3台节点下线(PreLeader节点不能下掉,此时无论哪个视角集群都处于健康状态);
- 通过下线腾讯云机房剩余的2个zk节点,让leader节点回到美团云机房的某台节点(此时集群处于5台存活3台的状态);
- 选一台腾讯云zk节点,更新配置server list为美团云3节点和自身组成的4个节点并启动(此时集群处于5台存活4台的状态);
- 更新美团机房节点的配置文件为美团机房的3台节点,轮询重启非leader的两台节点(每次重启处于5台存活3台状态);
- 下线步骤6中启动的腾讯云机房的zk节点,重启美团云机房的leader节点;
- 至此,美团云zk节点的配置都是美团云的3台zk节点,完成迁移。
优点:
kafka可以平滑轮询重启;
缺点:
1、对现有zk有侵入,需要下线现有zk,需要其他zk使用方确认是否可下线(如果其他使用方也要用此方案,则不可行,风险较大);
2、操作流程复杂;
结论
以上两个方案比较后,决定采用方案一,可控性和外部依赖较小;