运行机制
- ZooKeeper 集群安装时所有 zk 节点不分主/从节点
- ZooKeeper 集群运行时会选举一个节点作为主节点( Leader ),其他节点作为从节点( Follower )
- ZooKeeper 集群中只有主节点(Leader) 对外提供服务,从节点(Follower)仅作为备份节点
选举投票机制
投票规则:所有 ZK 节点中获得投票数超过 ZK 集群节点半数以上则为 Leader,其他节点为 Follower
- ZK1 启动后 QuorumPeerMain 进程会向 ZK 集群进行组播投票,发现只有自己,只能投自己
- ZK2 启动后 QuorumPeerMain 进程会向 ZK 集群进行组播投票,发现自己的 myid 更大,投自己
- 目前 ZK1 和 ZK2 各自获得 1 票无法胜出,需要进行新一轮投票
- 新一轮投票中,ZK1 的 myid 更小这次会投票给 ZK2,ZK2 自然也投票给自己,这样 ZK2 获得 2
- ZK 集群一共 3 个 ZK 节点, ZK2 获得 2 票,超过半数以上投票,所以 ZK2 获胜成为 Leader,这时 ZK3 启动发现集群 ZK 节点已经有 Leader,则自动变成 Follower
ZooKeeper 高可靠、高可用
- ZooKeeper 集群节点初始配置应该为奇数
- 只要 ZooKeeper 集群中宕机的节点数小于半数,ZooKeeper 集群就可以正常对外提供服务