zookeeper选举中java_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

532cced8e74edd773f1c1a9c353e6470.png

二、选举机制

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的节点个数一般是奇数个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZooKeeper选举机制和脑裂问题是ZooKeeper分布式应用程序非常重要的概念。在选举机制方面,ZooKeeper使用了半数可用机制、无领导情况下才能选举和半数选举机制来确保选举的正确性和可靠性。 具体来说,半数可用机制是指在进行选举时,必须有半数以上的ZooKeeper服务器处于可用状态,才会执行选举。这是为了防止选举发生在不稳定的环境导致错误的结果。 无领导情况下才能选举这一原则是为了确保在没有已知的leader的情况下才能进行选举。这样可以避免出现多个节点同时发起选举的情况,从而保证选举的有效性。 半数选举机制是指一个被选举为leader的节点必须获得半数以上的选票才能成为leader。这样可以避免脑裂问题的发生,脑裂问题是指当网络分区发生时,可能导致多个节点同时认为自己是leader,从而产生数据一致性的问题。 至于脑裂问题,它是指当网络发生分区时,多个节点同时认为自己是leader,从而导致数据的不一致性。为了解决脑裂问题,ZooKeeper引入了半数选举机制,确保只有一个leader被选举出来。 总结起来,ZooKeeper选举机制通过半数可用机制、无领导情况下才能选举和半数选举机制来保证选举的正确性和可靠性。而脑裂问题则是指在网络分区发生时,可能导致多个节点同时认为自己是leader,为了解决这个问题,ZooKeeper引入了半数选举机制来确保只有一个leader被选举出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值