码迷,mamicode.com
首页 > 其他好文 > 详细

Zookeeper相关知识

时间:2020-05-29 23:40:11      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:get   监听器   cli   常用   alt   客户端   session   之间   内容   

一、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相关知识

标签:get   监听器   cli   常用   alt   客户端   session   之间   内容   

原文地址:https://www.cnblogs.com/bbgs-xc/p/12989840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!