ZooKeeper Leader選舉

Leader選舉服務器


ZooKeeper 須要在全部的服務(能夠理解爲服務器)中選舉出一個 Leader ,而後讓這個 Leader 來負責管理集羣。此時,集羣中的其它服務器則成爲此 Leader 的 Follower 。而且,當 Leader 故障的時候,須要 ZooKeeper 可以快速地在 Follower 中選舉出下一個 Leader 。這就是 ZooKeeper 的 Leader 機制,下面咱們將簡單介紹在 ZooKeeper 中, Leader 選舉( Leader Election )是如何實現的。ide


此操做實現的核心思想是:首先建立一個 EPHEMERAL 目錄節點,例如「 /election 」。而後。每個 ZooKeeper 服務器在此目錄下建立一個 SEQUENCE| EPHEMERAL 類型的節點,例如「 /election/n_ 」。在 SEQUENCE 標誌下, ZooKeeper 將自動地爲每個 ZooKeeper 服務器分配一個比前一個分配的序號要大的序號。此時建立節點的 ZooKeeper 服務器中擁有最小序號編號的服務器將成爲 Leader 。spa


在實際的操做中,還須要保障:當 Leader 服務器發生故障的時候,系統可以快速地選出下一個 ZooKeeper 服務器做爲 Leader 。一個簡單的解決方案是,讓全部的 follower 監視 leader 所對應的節點。當 Leader 發生故障時, Leader 所對應的臨時節點將會自動地被刪除,此操做將會觸發全部監視 Leader 的服務器的 watch 。這樣這些服務器將會收到 Leader 故障的消息,並進而進行下一次的 Leader 選舉操做。可是,這種操做將會致使「從衆效應」的發生,尤爲當集羣中服務器衆多而且帶寬延遲比較大的時候,此種狀況更爲明顯。it


在 Zookeeper 中,爲了不從衆效應的發生,它是這樣來實現的:每個 follower 對 follower 集羣中對應的比本身節點序號小一號的節點(也就是全部序號比本身小的節點中的序號最大的節點)設置一個 watch 。只有當 follower 所設置的 watch 被觸發的時候,它才進行 Leader 選舉操做,通常狀況下它將成爲集羣中的下一個 Leader 。很明顯,此 Leader 選舉操做的速度是很快的。由於,每一次 Leader 選舉幾乎只涉及單個 follower 的操做。 io

相關文章
相關標籤/搜索