zookeeper的选举机制

  1. zk集群中的三种角色:

    1. leader: 作为整个zk集群写请求的唯一处理者,并负责投票的发起和决议,更新系统的状态
    2. follower: 接受客户端请求,处理读请求,并向客户端返回结果;将写请求转发给leader
    3. observer: 可以理解为无选举投票权的follower,其主要是为了协助follower处理更多的读请求。如果zk集群的读请求负载很高,或者客户端非常多,多到跨机房,则可以设置一些Observer服务器,可以提高读取的吞吐量。
  2. zookeeper的核心机制是广播机制,该机制保证了各个zk之间的数据同步(数据一致性)。zk实现的机制为ZAB协议。

    1. 恢复模式:如果leader崩溃了,这时候会进入恢复模式,使整个zk集群恢复到正常的工作状态(重新选举)。
    2. 同步模式:重新选举出leader之后,就会进入到同步模式(各个follower同步新的leader上的数据),当大多数zkServer完成了与leader的状态同步之后,恢复模式就结束了。
    3. 广播模式:当客户端想写入数据,这时候leader会发起提议,当leader的提议被大多数zkServer统一之后,leader就会去修改自身的数据,并且将修改后的数据广播给其他的follower。
  3. zk选举核心概念

    1. myid:zk集群中服务器的唯一标识,例如有三台服务器,那么编号分别是1,2,3
    2. zxid:为Long类型,其中高32位标识epoch,低32位表示xid。及zxid由两部分组成:epoch和xid。每个leader都会具有一个不同的epoch值,表示一个时期、时代。当新的leader产生的时候,会更新所有的zkServer中zxid中的epoch的值。而xid则为zk的事务id,每一个写操作都是一个事务,都会有一个xid。每一个写操作都需要由leader发起一个提议,由所有的follower表决是否同意本次写操作。
  4. 逻辑时钟:逻辑时钟,Logicalclock,是一个整形数,该概念在选举时称为logicalclock,而在zxid中则为epoch的值。即Logicalclock与epoch是同一个值,在不同情况下的不同名称。

  5. zk的选举状态:

    1. LOOKING:选举状态(选举leader的状态)
    2. LEADING:领导者状态,处于该状态的服务器称为Leader
    3. FOLLOWING:随从状态,同步leader状态。处于该状态的服务器称为Follower
    4. OBSERVING:观察状态,同步leader状态。处于该状态的服务器称为Observer
  6. zk集群选举发生的时机:整个集群群龙无首的时候(1、服务启动;2、当leader发生了宕机)

  7. 选举机制:集群中半数的zkServer同意的时候就会产生新的leader(在搭建zk集群的时候一般都是奇数个)

  8. 选举的算法:

    1. 在服务启动的时候:

      第一台server在启动的时候,给自己投票,发布投票结果(myid和zxid);

      第二台server在启动的时候,同样给自己投票,发布投票结果(myid和zxid),跟第一台服务器交互投票结果,zxid与第一台zxid是一样的,但是myid比第一台服务器大,所以第二台胜出;

      第三台服务器在启动的时候,只能会称为follower,因为之前的leader已经选举产生了。

    2. 在leader宕机的时候

      当leader节点宕机后,另外的follower将处于looking状态,进入选举的状态,在zxid不一致的时候,zxid大的server表示数据比较新,就会选举zxid大的server为新的leader;当zxid相同的时候,有限选择myid大的为新的leader。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值