理解Zookeeper(九):Zookeeper扩容和缩容
Zookeeper的扩容和缩容
我的目的是用三台新的ZK服务器替换老的三台,所以采取先扩容再缩容的方式来进行。
扩容
环境描述
原有ZK服务器计算机名称 | IP地址 | 角色 | myid |
Srv01 | 172.16.100.10 | Follower | 1 |
Srv02 | 172.16.100.20 | Follower | 2 |
Srv03 | 172.16.100.30 | Leader | 3 |
新加入ZK服务器计算机名称 | IP地址 | 角色 | myid |
Srv04 | 172.16.100.40 | 无 | 101 |
Srv05 | 172.16.100.50 | 无 | 102 |
Srv06 | 172.16.100.60 | 无 | 103 |
以上三台的配置文件
步骤一:新ZK加入集群
老ZK服务器的配置文件暂时不变,然后修改2台新ZK服务器的配置文件,如下图
修改好后启动这2台新的ZK服务器。
我们明明准备了3台服务器,为什么要先启动2台呢,因为目前有3台,而且老的配置文件不变,如果你启动3台新的,在这种情况下新的机器无法加入集群,所以要先弄2台。你看上图新机器的配置中最后那台是注释的。2台启动完成查看一下集群,之前100.30是Leader,现在我们依然查看30这台机器,发现它有4个follower,说明新加入的已经生效了。
步骤二:重启原有的ZK服务器
修改原有3台ZK服务器的配置文件,然后重启
三台重启完成后新加入的100.50就变成了Leader因为它的myid最大
到此扩容完毕原来的3台规模的集群变成了5台,下面我就需要进行缩容。
缩容
步骤一:下线一台老的,上线一台新的
此时5台规模的集群允许失败2台,所以我们下线一台。目的是让3台新的都加入到集群中。
首先:关闭Srv01服务器的ZK服务。
其次:修改Srv02、Srv03、Srv04的配置文件如下,然后重启
再次:上线Srv05,然后重启
这时候Leader依然是Srv05服务器
之后一次修改Srv02、Srv03、Srv04服务器的配置文件,然后再次重启,此时Srv05还是Leader。
完成之后修改Srv05然后进行重启。这时候所有的ZK服务器配置文件都一样,而且随着Srv05重启完成后将产生新的Leader,Srv06
步骤二:下线Srv02和Srv03
停止Srv02和Srv03,然修改Srv04和Srv05的配置文件,然后重启
此时Follower变成2个
最后修改Srv06的配置文件然后进行重启,重启完成后Srv05就变成了Leader。
到此缩容完毕。
注意事项
- 迁移过程中始终要保证有ZK服务器可用
- 重启原有ZK服务器的时候要注意查看新ZK服务器中的ZXID是否和原有的一致
- 重启时要先重启myid小的
- 如果有其他服务使用ZK,请在停止老集群前修改哪些服务的连接地址以便他们可以连接到新的ZK上。
其他运维建议
集群数量:3、5、7这样的奇数。当然偶数也可以组成集群只是3台与4台组成的集群其实允许的故障数量是一样的,所以4台组成的集群不划算。
多机房问题:如果每个机房之间的网络状况良好可以在每个机房都部署ZK服务器来组成一个大的Zookeeper集群。首先确定你的集群规模比如是N台。然后分别计算每个机房的点数。第一个机房N1=(n-1)/2 ,第二个机房N2的取值范围是 1~(N-N1)/2,第三个机房N3就是N-N1-N2。
如果是双机房可以在一个主要机房部署多台,在一个次要机房部署少量ZK服务器。原则就是保证主要机房的ZK服务器数量多于次要机房。
扩容:通常都是水平扩容也就是向集群中添加机器,但是在Zookeeper集群中你添加机器就需要重启整个集群,这个要注意。不要一起重启而是逐个从myid最小的开始重启,有小到大。
默认情况下ZK不会清理快照和日志文件,你可以写一个脚本来手动删除。或者使用自带zkCleanup.sh来清理,当然也可以配置自动清理。