• zookeeper动态添加/删除集群中实例(zookeeper 3.6)


    一,用来作为demo操作的zookeeper集群中的实例:

    机器名:zk1
    server.1=172.18.1.1:2888:3888
    
    机器名:zk2
    server.2=172.18.1.2:2888:3888
    
    机器名:zk3
    server.3=172.18.1.3:2888:3888

    说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

             对应的源码可以访问这里获取: https://github.com/liuhongdi/

    说明:作者:刘宏缔 邮箱: 371125307@qq.com

    二,在zookeeper集群中动态添加实例

    1,我们的目标:添加两台实例:

    机器名:zk4
    server.4=172.18.1.4:2888:3888 
    
    机器名:zk5
    server.5=172.18.1.5:2888:3888

    2,在两台新机器上安装zookeeper,

         使非集群相关的配置与之前的三台:zk1,zk2,zk3相一致

    3,设置两个容器中zookeeper的cluster配置,使加入集群

    修改zoo.cfg,集群的配置为:(新加的两台机器上相同)

    [root@zk4 conf]# vi zoo.cfg 

    集群配置的内容为:

    #cluster
    server.1=172.18.1.1:2888:3888
    server.2=172.18.1.2:2888:3888
    server.3=172.18.1.3:2888:3888
    server.4=172.18.1.4:2888:3888
    server.5=172.18.1.5:2888:3888

    配置myid

    [root@zk4 conf]# cd /data/zookeeper/data
    [root@zk4 data]# vi myid

    说明:

    myid要区分开,

    172.18.1.4上面,把myid设置为4

    172.18.1.5上面,把myid设置为5

    必须与zoo.cfg中的配置序号4、5保持一致

    配置完成后,分别重启两个zookeeper服务:

    zk4

    [root@zk4 data]# systemctl stop zookeeper
    [root@zk4 data]# systemctl start zookeeper

    zk5

    [root@zk5 data]# systemctl stop zookeeper
    [root@zk5 data]# systemctl start zookeeper

    4,查看效果

    zk4

    [root@zk4 data]# echo srvr | nc 127.0.0.1 2181
    Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
    Latency min/avg/max: 0/0.0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0x100000000
    Mode: follower
    Node count: 5

    mode是follower,证明已加入集群

    zk5:

    [root@zk5 data]# echo srvr | nc 127.0.0.1 2181
    Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
    Latency min/avg/max: 0/0.0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0x100000000
    Mode: follower
    Node count: 5

    两个实例的mode都是follower

    5,集群中原有的三台机器的处理:

    zk1,zk2,zk3

    以zk1为例:

    修改集群的配置,使与新加入的机器zk4zk5的配置一致:

    [root@zk1 conf]# vi zoo.cfg

    内容:

    #cluster
    server.1=172.18.1.1:2888:3888
    server.2=172.18.1.2:2888:3888
    server.3=172.18.1.3:2888:3888
    server.4=172.18.1.4:2888:3888
    server.5=172.18.1.5:2888:3888

    重启服务:

    [root@zk1 conf]# systemctl stop zookeeper
    [root@zk1 conf]# systemctl start zookeeper 

    zk2/zk3上,依次进行相同的操作即可

    说明:从leader实例上查询follower的数量:

    [root@zk4 data]# echo mntr | nc 127.0.0.1 2181 | grep follower
    zk_synced_followers 4

    说明:有4个follower

             这个数值是根据集群中的成员数量实时得到的,

             如果有实例宕掉,此数量会改变

    三,zookeeper集群中动态删除实例:

    1,我们的目标:删除两台实例:

    机器名:zk5
    server.5=172.18.1.5:2888:3888
    
    机器名:zk4
    server.4=172.18.1.4:2888:3888

    说明:这两台里面zk4是leader,zk5是follower

    说明:如果不关闭zk5/zk4,直接修改zk1/zk2/zk3的配置后重启,会发生问题:

               以zk1为例:重启后会因为集群中没有leader,而导致zk1无法访问.

    2,操作步骤:

    先关闭zk4和zk5

    [root@zk4 conf]# systemctl stop zookeeper
    [root@zk5 data]# systemctl stop zookeeper

    说明:先关闭这两台,这样leader会自动从剩下的三台中选出,

    可以避免因为没有leader导致集群无法访问的情况

    再查看各个实例上的状态

    zk1:follower
    zk2:follower
    zk3:leader

    再给zk1,zk2,zk3修改配置重启

    以zk1为例:

    修改配置文件

    [root@zk1 conf]# vi zoo.cfg

    修改内容为:

    #cluster
    server.1=172.18.1.1:2888:3888
    server.2=172.18.1.2:2888:3888
    server.3=172.18.1.3:2888:3888
    #server.4=172.18.1.4:2888:3888
    #server.5=172.18.1.5:2888:3888

    说明:注释掉了4和5

    重启服务:

    [root@zk1 conf]# systemctl stop zookeeper
    [root@zk1 conf]# systemctl start zookeeper

    查看状态:

    [root@zk1 conf]# echo stat | nc 127.0.0.1 2181 
    Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
    Clients:
     /127.0.0.1:53110[0](queued=0,recved=1,sent=0)
    Latency min/avg/max: 0/0.0/0
    Received: 2
    Sent: 1
    Connections: 1
    Outstanding: 0
    Zxid: 0x700000000
    Mode: follower
    Node count: 10

    访问正常,mode还是follower

    zk2/zk3上的操作与之相同

    四,zookeeper cluster报错信息:

     例:

    [root@zk1 conf]# echo stat | nc 127.0.0.1 2181 
    This ZooKeeper instance is not currently serving requests

    报错原因:集群里面没有选出来leader,

     如果集群里的结点只剩下一台,或不足半数时,会给出这个错误提示

    解决:

    1,

    检查各节点:如果有误关闭的或宕机的实例,重新启动,保证其正常工作

    2,

    检查防火墙,是否打开集群之间通信的2888/3888端口

    如果这两个端口被关闭,打开它

    五,查看zookeeper的版本 

    [root@zk1 ~]# echo stat|nc 127.0.0.1 2181
    Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
  • 相关阅读:
    用C语言编写生成小学四则运算程序
    每周学习报告
    读现代软件工程有感和自我介绍
    第七天
    第五天
    第六天
    作业九:课程总结
    作业四:结对编程项目--四则运算
    psp记录个人项目花费时间
    作业三:代码规范,代码复查
  • 原文地址:https://www.cnblogs.com/architectforest/p/12766964.html
Copyright © 2020-2023  润新知