选举机制zookeeper学习笔记系列
Zookeeper 学习笔记(一)概述
Zookeeper 学习笔记(二)内部原理
Zookeeper 学习笔记(三)zookeeper安装
Zookeeper 学习笔记(四)zookeeper集群客户端命令 *** 作
Zookeeper 学习笔记(五)面试题
半数机制:至少半数的服务器存活zookeeper集群才算运行成功leader机制:虽然没有配置master与slaver,但选举机制选出一个leader。选举机制:投票+myid最大
- 首先每次每个server投票时投自己,若当前没有leader选出来时,并发现有id大于自己的,就重新将票投给最大myid的节点直到有半数的服务器投票了,就选举当前票数最多的服务器为leader(实际为当前myid最大的服务器节点)。此后再加入的服务器节点的myid无论再怎么大,也无法竞争leader,因为leader已经有了。
持久型
:客户端和服务端断开连接后,创建的节点不删除
持久化目录节点:客户端zookeeper断开连接后,该节点依旧存在持久化顺序编号目录节点:客户端与zookeeper断开连接后,该节点依旧存在,但zookeeper给该节点名称进行了顺序编号
短暂型
:一旦断掉连接,就节点自己删除
临时目录节点:客户端与zookeeper断开后该节点被删除临时顺序编号目录节点:客户端与zookeeper断开后该节点被删除,但zookeeper给该节点名称进行了顺序编号
节点结构体
zookeeper中存储的每一个节点都会有信息,其节点信息为一个结构体,具体内容如下:
- czxid :创建节点的事务zxid
每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper,事务ID。v事务ID是ZooKeeper 中所有修改总的次序。每个修改都有唯一的zxid,如果 zxid1小于zxid2,那么zxid1在zxid2之前发生。
- ctime :znode,被创建的毫秒数(从1970年开始)mzxid :znode最后更新的事务zxidmtime :znode最后修改的毫秒数(从1970年开始)pZxid :znode最后更新的子节点zxidcversion : znode子节点变化号,znode子节点修改次数,7) dataversion - znode数据变化号。aclVersion : znode 访问控制列表的变化号,ephemeralOwner :如果是临时节点,这个是 znode,拥有者的session id。如果不是临时节点则是0。dataLength : znode的数据长度numChildren : znode子节点数量
每次客户端向zookeeper集群的服务器写数据时,其主要的流程如下图:
- 客户端向zookeeper上一个服务器节点server1发送写请求server1如果不是leader,会把请求转发给leaderleader会将写请求广播给集群各个服务器节点当leader收到一半以上节点写成功,就会告诉server1写成功server1返回给客户端写成功
在zookeeper常用的功能就是客户端想zookeeper注册监听某数据,那么这个监听的原理如下:
- 首先有一个main()线程在main线程中创建zookeeper客户端,就会有connet通信与监听listener的两个线程通过connet线程将注册的监听事件发送给zookeeperzookeeper的注册监听器列表中将注册的监听时间添加到列表zookeeper监听到数据路径有变化,就会将消息发送给listener线程listener线程内部进行需要的处理程序(外部实现)
常用监听命令:
监听节点数据变化get path [watch]监听子节点增减变化ls path [watch]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)