假如有三個節點(s1,s2,s3)組成的集群。在集群啟動過程中,當有一台zookeeper節點s1啟動完成後,此時集群中只有乙個節點無法進行leader的選舉。當第二個節點s2啟動成功後,此時兩個節點可以正常通訊,進入leader的選舉過程,具體如下:
每乙個節點都是自私的,各自都投自己1票。每次投票都會包含選舉伺服器的myid和zxid,投票結果使用(myid,zxid)表示,此時s1的投票為(1,0),s2為(2,0)。然後各自投票給集群中其他節點。
集群中的每個節點都接受其他節點的投票,s1將(1,0)發給s2,s2將(2,0)發給s1。
pk投票結果,對於每一次投票,伺服器都會將自己的投票結果和其他節點做比較:
對於s1,他的投票是(1,0),接受到s2的投票(2,0),首先它會比較自己的zxid和s2的zxid,此時相等,然後比較myid,s2的myid大,s1更新自己的投票結果為(2,0),然後重新投票,對於s2收到s1的投票(1,0),顯然s2勝出,無需更新自己的投票結果。
統計投票。每次投票結束後,伺服器都會統計投票資訊,判斷是否已經有過半機器接收到相同的投票資訊,對於s1,s2,都統計出集群中已經有兩台機器是(2,0)的投票資訊,此時認為leader已經產生。
改變伺服器狀態。一旦確定了leader,每個節點都會更改自己的狀態,勝出的leader將狀態改為leading,敗者follower更改自己的狀態為following。
還是假如有三颱伺服器(s1,s2,s3)組成的集群,s2時leader。在集群執行中時,只有當集群中的leader宕機才會觸發leader的重新選舉,集群中follower宕機或者新節點的加入並不影響leader的地位。
選舉過程如下:
狀態更改。leader宕機之後,各節點將自己的狀態更改為looking。然後進入leader的選舉。
每個節點都會發出投票,執行期間每個節點的zxid可能不同,假設s1的zxid為122,s3的zxid也為122,在第一輪投票中s1,s2都會投自己,產生投票s1(1,122),s2(3,122),然後各自將投票傳送給其他節點。
接受來自其他節點的投票。
處理投票。pk投票,與啟動時相同,此時s3勝出。
統計投票。s1,s3的投票都為(3,122),已經有過半機器是(3,122),s3成為leader。
更改狀態。s1,s3更改自己的狀態,s1—>following,s3—>leadin
zookeeper Leader選舉演算法分析
zookeeper集群leader選舉演算法分析 詳細說明了乙個zk集群如何進行leader選舉 當zk集群中有一台伺服器出現以下2種情況時,整個集群則會進入leader選舉.1.伺服器初始化啟動 2.伺服器執行期間無法和leader保持鏈結 當一台機器進入leader選舉流程時,當前集群可能會處於...
zk選舉過程
zk集群的執行模式 1.名詞解釋 client 使用zk集群服務的客戶端 leader zk集群真正對外服務的機器,乙個zk集群只有一台leader伺服器 flower zk集群中除leader伺服器的其他伺服器 zk集群中每個機器都是通過tcp實現連線,通過心跳的機制檢測服務是否正常 2.lead...
MongoDB的選舉過程
mongodb的複製集具有自動容忍部分節點宕機的功能,在複製集出現問題時時,會觸發選舉相關的過程,完成主從節點自動切換.每個複製集成員都會在後台執行與複製集所有節點的心跳執行緒,在兩種情況下會觸發狀態檢測過程 在狀態檢測過程大致包含以下步驟 如果所有條件滿足,則將自身新增到主節點備用列表中,否則,將...