ZooKeeper Leader服务器选举流程

进行前提

进行Leader选举的前提是ZooKeeper必须是集群,即至少2台以上ZooKeeper服务器。满足集群的条件后,Leader的选举在以下情况下发生:

  • ZooKeeper服务器进程启动
  • ZooKeeper服务器进程在运行期间无法连接到Leader服务器

注意:“Leader的选举”这个过程是对于单个ZooKeeper服务器进程而言的,并不是整个ZooKeeper服务器集群。当一个ZooKeeper服务器进入Leader选举流程时,可能集群的状态有:

  • 这个集群存在一个Leader服务器并且工作正常
  • Leader尚未被选举出来
  • 当前服务器由于网络故障与Leader服务器断开连接 ,或者Leader服务器宕机

对于第一种情况,通常是当前服务器启动比较晚,在ZooKeeper启动时都会尝试进行Leader选举,在向其它服务器发送投票时,其它服务器会将正确的Leader服务器信息告知当前服务器,忽略其投票信息。

只有后两种情况,集群才会进行完整的Leader选举流程。第二种情况对应初始化时期的选举,第三种情况对应运行期间的选举。这两种选举大同小异,后一种无非就是当Follower检测到Leader挂了后,就会将FOLLOWING状态改为LOOKING,并按照同样的流程发送投票、接收投票、统计投票。

注意Observer身份的ZooKeeper服务器是没有资格参与Leader竞选的。


选举流程

ZooKeeper服务器有4种状态,在源代码中作为枚举定义在org.apache.zookeeper.server.quorum.QuorumPeer.ServerState中:

  • LOOKING:正在寻找Leader服务器
  • FOLLOWING:当前服务器角色为Follower
  • LEADING:当前服务器角色为Leader服务器
  • OBSERVING:当前服务器角色为Observer

在服务器集群刚启动时,此时是没有Leader服务器的,所有的服务器都处于LOOKING状态,并准备进行投票操作。

1、发送投票

每个服务器都会将自身作为Leader服务器来投票,并序列化后发送给各个ZooKeeper服务器,也就是说如果有 nn

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值