ZooKeeper动态调整集群成员

2020-03-03  本文已影响0人  金果儿

手动集群成员调整

  1. 停止整个ZooKeeper现有集群
  2. 更改配置文件zoo.cfg的server.n项
  3. 启动新集群的ZooKeeper节点

问题1:需要停止ZooKeeper服务。
问题2:已经提交的数据可能会被覆盖,如下:

在quorum模式下,有三个节点,节点2是leader,节点3数据比较旧。由于这三个节点性能比较低,计划加入节点4和节点5


把节点1、2、3停掉之后,设置4、5节点。先启动4、5,再启动节点3。然后再启2、1这两个节点。
先启动的3、4、5节点会先形成一个quorum,选举3为leader,开始进行事务的提交,产生事务<2,1>。


当节点1、2加入新的quorum的时候,由于1、2节点的事务<1,3>和节点3(leader)的事务不一样,会被<2,1>覆盖,而造成数据丢失。


动态配置

解决上面的问题就可以使用动态配置。
要使用动态配置,必须启用ZooKeeper的Authentication(认证)

  1. 调用类DigestAuthencatinProvider的generateDigest函数生成digest(密钥),输入参数比如:“super:jingguo”
  2. 配置产生的密钥


  3. 编辑动态配置的配置文件zoo.reconf.cfg


dyn.cfg文件内的内容



最好不要省略配置文件内的ali-1这样的host name,ZooKeeper会读取这些信息。如果不配置host name的话,ZooKeeper会使用默认名字。对客户端来说,不知道这些默认名字是什么。

  1. 启动节点


  2. 启动cli,由于只在ali-1启用了super机制,只能连ali-1节点,才能算是经过认证。
zkCli.sh -server ali-1:2181
// 添加digest
addauth digest super:jingguo

查看配置config
配置集群成员reconfig, 比如移除3号节点reconfig -remove 3

上一篇 下一篇

猜你喜欢

热点阅读