背景:
集群中超过半数节点选举, 则成为 leader, 其他为 follower
新加入节点会重新发起选举
节点总是优先选举自己, 选举失败后, 选举比自己 id 大的节点
leader 选举出来后, 服从多数原则, 新加入的都是 follower
这里举例一共 5 个 zk 节点. myid 1 2 3 4 5
节点 1 启动, 发起选举
节点 1 投票给自己
投票数 1 没有超过半数节点 ( 2.5 个), 选举失败, 当前是 looking 状态
节点 2 启动, 发起选举
节点 2 投票给自己
节点 1 发现节点 2 id 大, 投票给节点 2
节点 2 总票数 2, 投票数没有超过半数节点 ( 2.5 个), 选举失败, 节点 1 2 当前是 looking 状态
节点 3 启动, 发起选举
节点 3 投票给自己
节点 1 2 发现节点 3 id 大, 投票给节点 3
节点 3 总票数 3, 投票数超过半数节点 ( 2.5 个), 选举成功
节点 3 成为 leader, 是 leading 状态,节点 1 2 由 looking 状态变为 following 状态
节点 4 启动, 发起选举
节点 4 投票给自己
节点 1 2 是 following 状态, 不修改投票信息, 仍然投给 3
此时节点 3 票数 3, 节点 4 服从多数, 投票给节点 3,节点 4 修改为 following 状态
节点 5 启动, 发起选举
同理 节点4, 不影响之前的 leader 投票数, 节点 5 服从多数, 投票给节点 3
节点全部启动完毕, 选举结束