前一篇文章中說到,啟動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接收投票信息,進行后續處理
轉自http://blog.csdn.net/xuefeng0707/article/details/40687625