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

zookeeper三台集群 zookeeper 2台_zookeeper三台集群

zookeeper三台集群 zookeeper 2台_服务器_02

zookeeper三台集群 zookeeper 2台_服务器_03

以上三台的配置文件

zookeeper三台集群 zookeeper 2台_服务器_04

步骤一:新ZK加入集群

老ZK服务器的配置文件暂时不变,然后修改2台新ZK服务器的配置文件,如下图

zookeeper三台集群 zookeeper 2台_服务器_05

修改好后启动这2台新的ZK服务器。

我们明明准备了3台服务器,为什么要先启动2台呢,因为目前有3台,而且老的配置文件不变,如果你启动3台新的,在这种情况下新的机器无法加入集群,所以要先弄2台。你看上图新机器的配置中最后那台是注释的。2台启动完成查看一下集群,之前100.30是Leader,现在我们依然查看30这台机器,发现它有4个follower,说明新加入的已经生效了。

zookeeper三台集群 zookeeper 2台_zookeeper_06

步骤二:重启原有的ZK服务器

修改原有3台ZK服务器的配置文件,然后重启

zookeeper三台集群 zookeeper 2台_配置文件_07

三台重启完成后新加入的100.50就变成了Leader因为它的myid最大

zookeeper三台集群 zookeeper 2台_重启_08

到此扩容完毕原来的3台规模的集群变成了5台,下面我就需要进行缩容。

缩容

步骤一:下线一台老的,上线一台新的

此时5台规模的集群允许失败2台,所以我们下线一台。目的是让3台新的都加入到集群中。

首先:关闭Srv01服务器的ZK服务。

其次:修改Srv02、Srv03、Srv04的配置文件如下,然后重启

zookeeper三台集群 zookeeper 2台_zookeeper三台集群_09

再次:上线Srv05,然后重启

zookeeper三台集群 zookeeper 2台_配置文件_10

这时候Leader依然是Srv05服务器

zookeeper三台集群 zookeeper 2台_重启_11

之后一次修改Srv02、Srv03、Srv04服务器的配置文件,然后再次重启,此时Srv05还是Leader。

zookeeper三台集群 zookeeper 2台_zookeeper三台集群_12

完成之后修改Srv05然后进行重启。这时候所有的ZK服务器配置文件都一样,而且随着Srv05重启完成后将产生新的Leader,Srv06

zookeeper三台集群 zookeeper 2台_重启_13

步骤二:下线Srv02和Srv03

停止Srv02和Srv03,然修改Srv04和Srv05的配置文件,然后重启

zookeeper三台集群 zookeeper 2台_zookeeper_14

此时Follower变成2个

zookeeper三台集群 zookeeper 2台_zookeeper三台集群_15

最后修改Srv06的配置文件然后进行重启,重启完成后Srv05就变成了Leader。

zookeeper三台集群 zookeeper 2台_zookeeper三台集群_16

到此缩容完毕。

注意事项

  • 迁移过程中始终要保证有ZK服务器可用
  • 重启原有ZK服务器的时候要注意查看新ZK服务器中的ZXID是否和原有的一致
  • 重启时要先重启myid小的
  • 如果有其他服务使用ZK,请在停止老集群前修改哪些服务的连接地址以便他们可以连接到新的ZK上