5月30日 20:13
Zookeeper Leader 选举机制是怎样工作的?
Zookeeper 的 Leader 选举不是谁先启动谁当 Leader,而是看哪个节点最适合承接已提交历史。Fast Leader Election 会在 LOOKING 状态下交换投票,每张票通常包含 epoch、zxid 和 sid:先比较选举轮次,再看 zxid 谁更新,zxid 相同才比较 sid。某个候选者拿到超过半数投票后成为 Leader。
追问
Leader 选举什么时候触发?
集群首次启动、Leader 宕机、网络分区导致多数 Follower 失联时,节点都会进入 LOOKING。短暂 GC、磁盘卡顿也可能让 Follower 误判超时。
zxid 和 sid 谁更重要?
zxid 更重要,因为它代表节点看到的事务进度。只有 zxid 一样时才比较 sid,sid 大只是为了打破平票。
为什么必须超过半数才能当选?
多数派机制保证任意两个成功多数集合一定有交集,新 Leader 能接触到上一任已提交事务信息。
选举期间客户端会怎样?
写请求通常会失败、阻塞或连接断开,需要客户端重试。业务侧要设置合理 sessionTimeout 和重试退避。
排查选举问题看什么?
先确认 myid 和 zoo.cfg 的 server.X 是否对应,再检查 2888/3888 端口。日志里的 LEADING、FOLLOWING、Cannot open channel 很关键。