1.zookeeper篇-zk的选举机制
2.Zookeeper源码集群启动
zookeeper篇-zk的选举机制
zk的选举机制是ZooKeeper中用于选举leader的关键部分。启动阶段的选举机制首先需要集群中至少有三个节点。假设五个节点1、2、3、4、强势交集源码5先后启动,且初始zxid均为0。节点1启动后进入looking状态,给自己投票,并发出(0,1)请求。节点2、快恋爱源码下载3、4、5依此进入looking状态,给自己投票,并发出(0,2)、(0,3)、(0,4)、(0,5)请求。当节点3发出(0,3)请求时,其myid为3,大于前两节点,古古电影源码因此节点3当选为leader,此时当选节点票数达到3,超过节点总数的一半,所以节点3成功当选。
当节点4、5进入looking状态时,它们分别给自己投票,并发出(0,4)、(0,5)请求。由于此时集群中leader已选出,因此节点4、spring 登录验证源码5仍为follower。选举结束后,leader状态从looking变为leading,follower状态从looking变为following。
运行阶段的选举机制与启动阶段类似,但此时节点的zxid可能不同。例如,当主节点3运行中挂掉后,其他从节点(节点1、2、4、软件 官网源码5)进入looking状态。节点1、2、4、5的zxid分别为、、、。各节点都可能推举自己为leader。节点1发出(,1),节点2发出(,2),节点4发出(,4)。由于节点4的zxid最大,且其票数为3,超过总节点数的一半(5/2=2.5),因此节点4当选为新一代leader。节点5发出(,5)请求,但此时已经选举出leader,所以节点5成为follower。选举完成后,leader状态由looking变为leading,follower状态由looking变为following。
总结:ZooKeeper的选举机制保证了在节点加入、离开或故障时,系统能够快速、一致地选举出leader。这种机制对于分布式系统的容错性和高效性至关重要。
Zookeeper源码集群启动
Zookeeper集群启动分为两步,首先确定集群模式,然后启动集群。
在启动时,需调用org.apache.zookeeper.server.quorum.QuorumPeerMain#main方法,这是启动入口。
main方法初始化QuorumPeerMain对象,并加载配置文件。配置文件决定Zookeeper是单机模式还是集群模式。
在加载配置文件后,程序判断集群模式。在单机模式下,Zookeeper将直接启动并进入运行状态。在集群模式下,Zookeeper会进一步执行runFromConfig方法。
runFromConfig方法负责创建集群实例,确定角色分配(Leader、Follower、Observer)。每个实例独立运行,通过心跳机制保持状态同步。
Leader负责发起维护集群状态,处理写操作,将写操作广播至所有服务器。Follower直接处理读请求,将写请求转发给Leader。Observer与Follower类似,但无投票权。
在集群中,同一时间只有一个Leader,其它服务器扮演Follower或Observer角色。集群中的角色状态动态调整,确保高可用性。
通过以上步骤,Zookeeper成功启动集群,实现分布式系统中的主从复制与高可用性。