zookeeper集群搭建启动之后会有选举机制,选出leader,剩下为Follower。
根据启动情况分为两种:
1)第一次启动(每次群起集群)
每个Znode都会有一张选票,当选票超过集群总量的半数以上则成为Leader(Zookeeper只要半数以上存活就可以正常提供服务,数量是由配置文件/conf/zoo.cfg中,添加的服务器集群的配置决定),第一台服务器启动会将选票投给自己,但是票数不够,此时为Looking状态,第二台启动也会将选票投给自己,也会保持Looking状态,然后会通过ID号(zkData文件myid中设置的ID号)进行比较,id号小的会将自己的选票转移到id号大的服务器上,之后通过票数的统计,当超过半数时自动升级为Leader,状态调整成Leading,其余服务器状态为Following,继续启动的服务器自动成为Follower,状态为Following。
2)非第一次启动(每次集群正在工作,由于某个节点出现故障造成)
①一台Follower出现故障恢复后需要重新选举
a.当检测到集群中存在Leader,此Znode则直接成为Follower。
b.当检测到集群中不存在Leader时,则需要重新选举,选举按照以下顺序进行比较,1、Epoch-每个Leader任期代号;2、id-事物id,每次Znode更新时,会将id号加一,所以id号越大,表明此服务器上的数据越新,3、id-服务器id,配置文件myid中设置;按照以上顺序进行比较,如果第一轮数都一样,则进行下一轮比较,直至选出Leader。
②一台Leader出现故障
选举流程参见Follower出现故障恢复后无Leader情况(2-①-b)