Zookeeper缩容5缩3操作记录(一)

一、测试目标

验证5台zk,将1、2、3配置列表修改为1、2、3逐一重启,然后下线4、5是否可行。

二、验证过程

1、搭建集群,5台机器,3为leader
echo mntr | nc localhost 2181
Zookeeper缩容5缩3操作记录(一)
2、修改1、2、5 的配置逐台重启
Zookeeper缩容5缩3操作记录(一)
修改配置前leader follower为4,
修改1配置后follower为3
修改2配置后follower为2,此时集群状态【1,2】【3,4,5】
Zookeeper缩容5缩3操作记录(一)
修改5的配置后,先不重启,查看集群状态:
Zookeeper缩容5缩3操作记录(一)
发现:2变为leader、1变为follower。
3、4、5报错如下:
This ZooKeeper instance is not currently serving requests
说明,对于3、4来说,超过半数机器不可用。(5未重启)

此时,用zkCli.sh create 一个临时节点 发现仍然可以创建成功,说明对于1、2来讲,1、2、3为一个集群,1、2存活,可写。

然后将5重启,现象如下:

zk2为leader
Zookeeper缩容5缩3操作记录(一)
zk5为leader
Zookeeper缩容5缩3操作记录(一)
发现集群脑裂,2的follower为1,5的follower为3、4
【1、2】【3、4、5】

  • 在1、2创建的临时节点/test,在3、4、5查询不到
  • 在3、4、5创建临时节点/test2,在1、2 也查询不到

结论

5台zk,降配成3台、逐一修改前三台的配置为1、2、3重启,此时脑裂【1、2、3】为一个集群【4、5】为一个集群,此时的写入4、5的数据,最终会出问题,再下线4、5,集群正常。