zoukankan      html  css  js  c++  java
  • Zookeeper相关知识

    一、Zookeeper的特点:

      1,zookeeper中存在一个leader和多个follower

      2,集群中只要有半数以上的节点存活,zookeeper集群就能正常服务

      3,全局数据一致:每天zookeeper的server中保存同一份相同的副本

      4,更新顺序性:来自同一个client的更新请求按其发送顺序依次执行

      5,数据原子性,一次数据更新要么成功,要么失败

      6,实时性:在一定时间范围内,client能读取到数据

    二、Zookeeper的选举机制

      LOOKING : 寻找Leader状态,处于该状态需要进入选举流程

      LEADING : 领导者状态,表明当前角色为Leader

      FOLLOWING: 跟随者,Leader已经选举出来,表明当前服务角色为Follower

      OBSERVER: 观察者状态。 接收客户端请求,将客户端写请求转发给Leader,不参与投票过程,只同步Leader状态,目的是为了扩展系统,提高读取速度

      选举中服务器1比服务器2的大是根据:1,zxid(事务谁更靠后);2,myid(当zxid相同就比较myid谁大)

    1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING;
    (2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的ID比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING
    (3)服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;
    (4)服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING;
    (5)服务器5启动,同4一样当小弟。

    三、ZAB协议

      Zookeeper的核心是原子广播机制,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式和广播模式。
      (1) 恢复模式:
      当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。
      (2) 广播模式:
      一旦Leader已经和多数的Follower进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个Server加入ZooKeeper服务中,它会在恢复模式下启动,发现Leader,并和Leader进行状态同步。待到同步结束,它也参与消息广播。ZooKeeper服务一直维持在Broadcast状态,直到Leader崩溃了或者Leader失去了大部分的Followers支持。
      Broadcast模式极其类似于分布式事务中的2pc(two-phrase commit 两阶段提交):即Leader提起一个决议,由Followers进行投票,Leader对投票结果进行计算决定是否通过该决议,如果通过执行该决议(事务),否则什么也不做。

    四、监听器原理

         

    五、写数据流程

         

    六、常用命令

    help   显示所有操作命令
    create  普通创建
            -s  含有序列
            -e  临时(重启或者超时消失)
    set      设置节点的具体值
    stat     查看节点状态
    delete   删除节点
    rmr      递归删除节点    
    get path [watch]  获得节点的值
    ls path [watch]  使用 ls 命令来查看当前znode中所包含的内容
    ls2 path [watch]  查看当前节点数据并能看到更新次数等数据

     

    七、stat结构体

    1)czxid-创建节点的事务zxid
      每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。
      事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。
    2)ctime - znode被创建的毫秒数(从1970年开始)
    3)mzxid - znode最后更新的事务zxid
    4)mtime - znode最后修改的毫秒数(从1970年开始)
    5)pZxid-znode最后更新的子节点zxid
    6)cversion - znode子节点变化号,znode子节点修改次数
    7)dataversion - znode数据变化号
    8)aclVersion - znode访问控制列表的变化号
    9)ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。
    10)dataLength- znode的数据长度
    11)numChildren - znode子节点数量

    八、Zookeeper的节点类型:

    1,持久节点(PERSISTENT):

      持久节点,创建后一直存在,直到主动删除此节点。

    2,持久顺序节点(PERSISTENT_SEQUENTIAL):

      持久顺序节点,创建后一直存在,直到主动删除此节点。在ZK中,每个父节点会为它的第一级子节点维护一份时序,记录每个子节点创建的先后顺序。

    3,临时节点(EPHEMERAL):

      临时节点在客户端会话失效后节点自动清除。临时节点下面不能创建子节点。

    4,顺序临时节点(EPHEMERAL_SEQUENTIAL):

      临时节点在客户端会话失效后节点自动清除。临时节点下面不能创建子节点。父节点getChildren会获得顺序的节点列表。

  • 相关阅读:
    解决 git 同步时 Everything up-to-date
    vs2019 git Authentication failed for xxx
    vs2015发布项目到虚拟主机组策略阻止csc.exe程序问题
    vs2017 使用 reportviewer
    var,dynamic的用法
    水晶报表报无法在资源中找到报表,请重新创建项目 错误
    css隐藏元素的方法
    css-浮动与清除浮动的原理详解(清除浮动的原理你知道吗)
    正则并不适合严格查找子串
    浏览器加载、渲染过程总结
  • 原文地址:https://www.cnblogs.com/bbgs-xc/p/12989840.html
Copyright © 2011-2022 走看看