leader選舉是zookeeper最重要的技術之一,也是保證分布式資料一致性的關鍵所在。
當zookeeper集群中的一台伺服器出現以下兩種情況之一時,需要進入leader選舉。
若進行leader選舉,則至少需要兩台機器,這裡選取3臺機器組成的伺服器集群為例。在集群初始化階段,當有一台伺服器server1啟動時,其單獨無法進行和完成leader選舉,當第二台伺服器server2啟動時,此時兩台機器可以相互通訊,每台機器都試圖找到leader,於是進入leader選舉過程。選舉過程如下
由於是初始情況,server1(假設myid為1)和server2(假設myid為2)都會將自己作為leader伺服器來進行投票,每次投票會包含所推舉的伺服器的myid和zxid,使用(myid,zxid)來表示,此時server1的投票為(1,0),server2的投票為(2,0),然後各自將這個投票發給集群中其他機器
集群的每個伺服器收到投票後,首先判斷該投票的有效性,如檢查是否是本輪投票、是否來自looking狀態的伺服器。
針對每乙個投票,伺服器都需要將別人的投票和自己的投票進行pk,pk規則如下
現在我們來看server1和server2實際是如何進行投票處理的。對於server1來說,它自己的投票是(1,0),而接收到的投票為(2,0)。首先會對比兩者的zxid,因為都是0,所以無法決定誰是leader。接下來會對比兩者的myid,很顯然,server1發現接收到的投票中的myid是2,大於自己,於是就會更新自己的投票為(2,0),然後重新將投票發出去。而對於server2來說,不需要更新自己的投票
每次投票後,伺服器都會統計所有投票,判斷是否已經有過半的機器接收到相同的投票資訊。對於server1和server2伺服器來說,都統計出集群中已經有兩台機器接受了(2,0)這個投票資訊。這裡我們需要對 「過半」 的概念做乙個簡單的介紹。所謂"過半"就是指大於集群機器數量的一半,即大於或等於(n/2+1)。對於這裡由3臺機器構成的集群,大於等於2台即為達到"過半"要求。
那麼,當server1和server2都收到相同的投票資訊(2,0)的時候,即認為已經選出了leader。
一旦確定了leader,每個伺服器就會更新自己的狀態∶如果是follower,那麼就變更為following,如果是leader,那麼就變更為leading
在zookeeper集群正常執行過程中,一旦選出乙個leader,那麼所有伺服器的集群角色一般不會再發生變化——也就是說,leader伺服器將一直作為集群的leader,即使集群中有非leader機器掛了或是有新機器加入集群也不會影響leader。但是一旦leader所在的機器掛了,那麼整個集群將暫時無法對外服務,而是進入新一輪的leader選舉。伺服器執行期間的leader選舉和啟動時期的leader選舉基本過程是一致的。
我們還是假設當前正在執行的zookeeper機器由3臺機器組成,分別是server1、server2和server3,當前的leader是server2。假設在某乙個瞬間,leader掛了,這個時候便開始了leader選舉。
變更狀態
leader掛後,餘下的非observer伺服器都會將自己的伺服器狀態變更為looking,然後開始進入leader選舉過程。
每個server會發出乙個投票
在執行期間,每個伺服器上的zxid可能不同,此時假定server1的zxid為123,server3的zxid為122;在第一輪投票中,server1和server3都會投自己,產生投票(1,123),(3,122),然後各自將投票傳送給集群中所有機器。
接收來自各個伺服器的投票,與啟動時過程相同
處理投票。與啟動時過程相同,此時,server1將會成為leader
統計投票。與啟動時過程相同
改變伺服器的狀態。與啟動時過程相同
zookeeper學習筆記
zookeeper簡介 zookeeper是乙個為分布式應用程式提供高效能協調服務的工具集合,是著名的開源框架 hadoop的子專案,它可以應用在一些需要提供統一協調服務的任務中,例如命名 配置管理 同步和組服務等,而在分布式快取設計中,它被作為乙個協調分布式環境中各快取伺服器之間共享狀態資料的基礎...
Zookeeper學習記錄
zookeeper是乙個高效能,開源的分布式協調服務的應用,它提供了許多功能,使分布式應用可以基於它實現更高階的服務。它的出現可以使我們更好的治理分布式服務。為什麼需要乙個東西來協調服務呢 下面的這張圖有很好的說明?圖中每輛車,都可以當做乙個服務。當服務太多而又沒有乙個特定的東西進行管理的時候,所有...
zookeeper 學習記錄
一 原理 1 半數機制 集群中半數以上機器存活,集群才可用 存活數量 總數量 2 zookeeper適合安裝 奇數 台數的伺服器集群 例如 total 5臺,dead 3臺,集群不可用 total 6臺,dead 3臺,集群不可用 2 zookeeper 通過 自動選舉機制 來產生 leader 和...