前一篇文章中说到,启动ZooKeeper集群时,须要分别启动集群中的各个节点,各节点以QuorumPeer的形式启动。最后到达startLeaderElection和lookForLeader。
先说startLeaderElection
首先。初始化节点自身的currentVote【当前投票】为【myid、zxid、currentEpoch】
然后。初始化选举算法createElectionAlgorithm,默认使用FastLeaderElection算法。在这里,启动两个线程WorkerSender、WorkerReceiver。分别用于向其它全部节点发送自己的投票信息、接收并处理其它节点发送给自己的投票信息。
再说lookForLeader
首先。初始化节点自身的逻辑时钟【logicalclock】,同一时候初始化节点的投票信息:proposedLeader【myid中读取】、proposedZxid【data文件夹中读取,默觉得0】、proposedEpoch【data文件夹中读取。默觉得0】
然后,向集群中全部节点发送投票信息【包含自身】。使用WorkerSender发送。全部节点使用WorkerReceiver接收投票信息。进行兴许处理