Zookeeper热缩容解析
以5个节点规模的集群为例,进行节点的缩容。不停服,将集群从ZK1,ZK2,ZK3,ZK4,ZK5缩容成ZK1,ZK2,ZK3。
背景
降本,将ZK集群的规模从5节点变成3节点。
目标

核心步骤
-
停止ZK4,ZK5

此时leader,必然在ZK1~ZK3中产生。若ZK1~ZK3中任何一台故障,都需要立即恢复,不然集群不可用。 ZK5直接下线。
-
重启ZK4

ZK4,作为选主的辅助节点。为了保障缩容期间在重启其他节点式,有足够的参与选主的节点。
等待ZK1~ZK4正常后,再后续操作。
-
修改ZK1的配置后重启

此时,若ZK1不故障,则leader在ZK1~ZK3中产生,若ZK1故障,则Leader在ZK2~ZK4中产生。等待ZK1~ZK4正常后,再后续操作。
-
修改ZK2的配置后重启

此时,若发生故障,则Leader在ZK1~ZK3中产生。等待ZK1~ZK4正常后,再后续操作。
-
修改ZK3的配置后重启

此时,若发生故障,则Leader在ZK1~ZK3中产生。等待ZK1~ZK4正常后,再后续操作。必然主动发生一次切主
-
停止ZK4

缩容完成
客户端影响
期间客户可能会感知异常,但是正常都会主动重试重连成功。