美文网首页
ZooKeeper动态调整集群成员

ZooKeeper动态调整集群成员

作者: 金果儿 | 来源:发表于2020-03-03 17: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

    相关文章

      网友评论

          本文标题:ZooKeeper动态调整集群成员

          本文链接:https://www.haomeiwen.com/subject/ecdhlhtx.html