ZooKeeper Leader选举过程

这里写图片描述

当ZooKeeper集群中没有Leader时,会进行选举。

选举过程大致如下

  1. 产生投票. 投票信息:(sid, zxid) ( 机器id, 本机最大事务id ). 最开始均投票给自己成为Leader
  2. 发出投票
  3. 接收他人的投票信息;
  4. 投票比较。 接收到的投票信息和自己产生的投票比较。 选举max(zxid)最大的投票,如果max(zxid)有多个,则从max(zxid)投票中选择max(sid)的投票
  5. 根据投票比较结果,判断是否需要修改投票。
    如果选择的投票结果不是本机第2步发出的投票,将本机投票信息修改为投票比较结果选出的投票信息,跳转第2步;
    如果选择的投票结果是本机第2步发出的投票,则判断投票选举数是否过半。
    如果未过半,则跳转第2步。
    如果过半,则投票选举机器成为Leader,选举完成;

没有Leader的场景

  1. 初始启动
  2. 运行过程中Leader挂掉了 (Leader本身挂掉或者网络异常等)
Zookeeper是一个分布式协调服务,集群中的每个节点都可以成为Leader或Follower。在Zookeeper集群的初始启动阶段,所有节点都是Follower状态,没有一个节点是LeaderZookeeper选举过程是通过“Leader选举协议”来完成的,具体步骤如下: 1. Follower节点向集群中的其他节点发送消息(选举通知),并且开始等待其他节点的回复。 2. 如果接收到的回复中包含有Leader节点的信息,那么该节点就会跟随Leader节点进行数据同步。 3. 如果没有接收到Leader节点的信息,那么该节点会开始发起投票请求,并将自己作为候选人进行投票。 4. 在收到其他节点的投票请求后,如果该节点认为自己比候选人更适合成为Leader节点,那么它就会向该节点发送确认消息,并将自己的投票结果告知其他Follower节点。 5. 如果有某个候选人收到了超过半数的选票,那么它将成为新的Leader节点,并向其他节点发送Leader信息。 6. 如果多个候选人得到同样的选票数,那么它们将重新发起投票,直到有一个候选人获得半数以上的选票。 7. 如果某个节点长时间无法收到其他节点的信息,那么它就会认为Leader节点已经宕机,然后发起新一轮的选举。 当选举完成后,Zookeeper集群中的每个节点都知道了当前的Leader节点是谁,并将自己的状态更新为Follower或Observer。同时,Leader节点会维护一个全局的状态信息,并向其他节点提供服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值