ZooKeeper群首Leader选举过程
群首Leader选举
请求、事务标识符
服务器选举中节点的状态
ZooKeeper实现选举的类是org.apache.zookeeper.server.quorum.QuorumPeer
查找群首leader
QuorumPeer
类的 run 方法实现了服务器的主要循环工作。当进入 LOOKING 状态,将会执行org.apache.zookeeper.server.quorum.Election.lookForLeader
方法进行leader的选举,该方法返回前会将服务器状态设置为LEADING 或者FOLLOWING 状态,也可能是OBSERVING。
一图胜千言–ZooKeeper选举过程
以下是正常情况下的选举过程,确实很顺利:
但是实际中可能存在各种场景,以下是其中一种S2接收S1投票延迟的情况:
虽然最后没有影响选举结果,但是S2选择S3,S3并不会以群首身份响应S2的请求,S2会在等待S3的响应而超时,并开始再一次的重试,这期间S2是无法处理任何客户端的请求的。
如果可以让S2在进行选举群首时多等待一会,等到S1的投票。
默认的群选举实现类为
org.apache.zookeeper.server.quorum.FastLeaderElection implements Election
,如果想自定义群首选举算法,需要实现 quorum 包中的Election
接口。
更多连接:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端