zookeeper的特性和选举机制

特性
1. 过半性 - 选举、存活、操作
2. 数据一致性 - 原子广播
3. 原子性 - 原子广播
4. 顺序性 - 队列
5. 实时性 - 可以动态监控节点的变化
6. 可靠性 - 崩溃恢复

特点
1. Zookeeper本身是一个树状结构 - Znode树
2. 根节点是/
3. 每一个子节点称之为是一个znode节点
4. 所有的节点路径都必须以根节点作为起始
5. 每一个节点都必须存储数据, 这个数据一般是配置信息或者是对节点的描述
6. 每一个持久节点下都可以挂载子节点
7. Znode树本身维系在磁盘以及内存中
8. Znode树维系在内存中的目的:为了快速查询
9. Znode树维系在磁盘中的目的:崩溃恢复
10. Znode树在磁盘中的存储位置由dataDir属性决定。dataDir默认是在/tmp下
11. Zookeeper存在事务概念。Zookeeper会对每一次的写操作(create、delete、rmr、set)分配一个全局递增的编号,称之为是事务id - Zxid

 二、选举机制

  1.过程

  1. 第一个阶段:数据恢复阶段。每一个节点(服务器)会找寻当前节点中的最大事务id
  2. 第二个阶段:选举阶段。刚开始的时候,Zookeeper集群中的每一个节点都会推荐自己当leader,同时每一个节点会把自己节点的选举信息发送给其他的节点,经过比较之后,最后胜出的节点就成为leader,其他的节点就成为follower。

  选举的细节  

  细节
  1. 选举信息:
  a. 当前节点的最大事务id - 一般而言是mZxid或者是pZxid
  b. 当前节点的选举编号 - myid
  c. 逻辑时钟值 - 保证选举在同一轮次上
  2. 比较原则:
  a. 先比较两个节点的最大事务id,谁大谁赢
  b. 如果事务id一致,那么比较myid,谁大谁赢
  3. 当一个节点胜过一半及以上的节点的时候,那么这个节点就会成为leader - 选举的过半性
  4. 当一个集群中已经选举出来了leader,那么后续添加的节点的事务id以及myid无论多大,这个节点都只能成为follower
  5. 节点状态:
  a. looking/voting - 选举状态
  b. follower - 追随者
  c. leader - 领导者
  d. observer - 观察者
  6. 在集群中,如果出现了多个leader,这种情况称之为脑裂
  7. 在Zookeeper集群中,只有半数以上的节点存活的时候才会进行选举才会对外服务 - 存活的过半
  8. Zookeeper的节点个数一般是奇数个

猜你喜欢

转载自www.cnblogs.com/zym627270054/p/11576398.html