Zookeeper在线迁移方案(适用于扩容场景)
程序员文章站
2022-06-19 10:57:34
...
背景
最近团队新接了其他部门的一个系统的数据库和中间件维护,其中包括Zookeeper,需要我来出迁移方案并实施。其实,Zookeepr的迁移之前我就给业务做过,但是当时也没有把完整过程记录下来,只写了一个大概的迁移方案,还丢了,所以这次又得重新写方案并且在验证一遍,想着还是把方案给记录下来,后面肯定还是会用到,本次迁移是热迁移,ZK服务不中断。
说明
现有一个三节点集群,信息如下:
myid | ip | role |
---|---|---|
1 | 172.30.10.13 | follower |
2 | 172.30.10.14 | leader |
3 | 172.30.10.16 | follower |
配置文件如下:
server.1=172.30.10.13:2888:3888
server.2=172.30.10.14:2888:3888
server.3=172.30.10.16:2888:3888
新集群准备了三台服务器,信息如下:
myid | ip |
---|---|
4 | 172.30.8.226 |
5 | 172.30.8.252 |
6 | 172.30.9.245 |
迁移方案
我们都知道ZK集群可用的基本要求是半数以上节点处于存活状态,为了集群不中断服务,迁移步骤为如下:
- 扩容4和5两个节点,新集群由1,2,3,4,5组成
- 缩容1和2两个节点,新集群由3,4,5组成
- 扩容6这个节点,新集群由3,4,5,6组成
- 业务切换并验证,配置4,5,6三个节点(关键)
- 缩容3这个节点,集群由4,5,6组成,完成迁移
具体步骤
扩容4和5两个节点,新集群由1,2,3,4,5组成
-
下载安装包,配置myid(略),修改4和5的配置文件如下并启动,1,2,3节点暂时不动
server.1=172.30.10.13:2888:3888 server.2=172.30.10.14:2888:3888 server.3=172.30.10.16:2888:3888 server.4=172.30.8.226:2888:3888 server.5=172.30.8.252:2888:3888
-
查看集群状态,确认节点4和5加入集群并完成了数据同步
-
修改1,2,3的配置如下,依次重启节点1,3,2(2是leader),过程中集群一直可用,仅仅在重启节点2的时候发生主节点选举,已有连接会断掉,但是客户端会重连,服务一直可用
server.1=172.30.10.13:2888:3888 server.2=172.30.10.14:2888:3888 server.3=172.30.10.16:2888:3888 server.4=172.30.8.226:2888:3888 server.5=172.30.8.252:2888:3888
直接停止节点1,2,完成缩容,新集群由3,4,5组成
扩容6这个节点,新集群由3,4,5,6组成
-
修改6的配置文件如下,启动节点6,查看集群状态,确认节点6加入集群并完成了数据同步
server.4=172.30.8.226:2888:3888 server.5=172.30.8.252:2888:3888 server.6=172.30.9.245:2888:3888
业务切换并验证,配置4,5,6三个节点,确认连接正常,业务运行正常
缩容3这个节点,集群由4,5,6组成,完成迁移
- 修改4,5的配置文件,集群配置为4,5,6的地址,依次重启节点4,5(5是leader)
- 停止节点3,over
总结
本文章目的为说明清楚迁移过程,给大家提供一个经过实战可行的方案,如果问为什么要这么做,原理是什么,有没有其他方案,比如直接扩容3个节点行不行,后面我会在出文章专门介绍。