Zookeeper的leader选举过程

投票机制
每个server首先给自己投票,然后用自己的选票和其他server选票对比,权重大的胜出,使用权重较大的更新自身的选票箱。具体选举过程如下:

  1. 每个Server启动以后都询问其他的Server它要投票给谁。对于其他Server的询问,Server每次根据自己的状态都回复自己推荐的leader的id和上次处理事务的zxid(系统启动时每个server都会推荐自己)。选票消息包括推荐的服务器id和zxid,用(myid,zxid)来表示。若处于集群初始化阶段,zxid=0。即投票对象由myid决定。
  2. 收到所有Server回复以后,就计算出zxid最大的那个Server,并将这个Server相关信息设置成下次要投票的Server。
  3. 计算这个过程中获得票数最多的Server为获胜者,如果获胜者的票数超过半数,则该server被选为leader。否则,继续这个过程,直到leader被选举出来。
  4. leader就会开始等待server连接。
  5. follower连接leader,将最大的zxid发送给leader。
  6. leader根据follower的zxid确定同步点,至此选举阶段完成。
  7. 选举阶段完成,leader同步后通知follower已经成为uptodate状态。
  8. follower收到uptodate消息后,又可以重新接受client的请求进行服务了。

举例:
目前有5台服务器,每台服务器均没有数据,他们的编号分别是1,2,3,4,5,按编号依次启动,他们启动时的zxid都为0。选举过程如下:

  1. 服务器1启动,给自己投票,然后发布投票消息,由于其他机器还没有启动,多元他收不到反馈消息,服务器1的状态一直属于Looking。
  2. 服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
  3. 服务器3启动,给自己投票,同时与之前启动的1,2交换信息,由于服务器3的编号最大,所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为leader,服务器1,2成为follower。
  4. 服务器4启动,给自己投票,同时与之前启动的1,2,3交换信息,尽管服务器4的编号大,但是leader已经选举得出,所以服务器4只能为follower。
  5. 服务器5启动,逻辑同服务器4,成为follower。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值