zookeeper選舉機制

選擇中的幾個概念:算法

服務器ID(myid)
  好比有三臺服務器,編號分別是1,2,3。
  編號越大在選擇算法中的權重越大。

數據ID(數據版本號)
  服務器中存放的最大數據ID.
  值越大說明數據越新,在選舉算法中數據越新權重越大。

邏輯時鐘
  或者叫投票的次數,同一輪投票過程當中的邏輯時鐘值是相同的。每投完一次票這個數據就會增長,而後與接收到的其它服務器返回的投票信息中的數值相比,根據不一樣的值作出不一樣的判斷。

選舉狀態
  LOOKING,競選狀態。
  FOLLOWING,隨從狀態,同步leader狀態,參與投票。
  OBSERVING,觀察狀態,同步leader狀態,不參與投票。
  LEADING,領導者狀態。

以上比較重要的就是「數據版本號」和「自己順序」服務器

考慮數據版本號和自己順序(myid),第一次,數據版本號同樣,加入到第三個時就選舉出了leader(第三個時,myid最大的那個已經獲得超過一半的投票,因此勝出)。大數據

選舉leader依據myid和數據版本號,myid越大,數據越新越可能成爲leader。這保證了,在死掉一些機器後,選舉出來的leader能有最新的數據。code

寫操做都是經過leader執行,往follower發的寫請求也會轉發到leader。blog

leader會確保半數以上的機器可寫,才寫成功,寫成功纔對外接請求。get

 

目前有5臺服務器,每臺服務器均沒有數據,它們的編號分別是1,2,3,4,5,按編號依次啓動,它們的選擇舉過程以下:同步

  • 服務器1啓動,給本身投票,而後發投票信息,因爲其它機器尚未啓動因此它收不到反饋信息,服務器1的狀態一直屬於Looking。
  • 服務器2啓動,給本身投票,同時與以前啓動的服務器1交換結果,因爲服務器2的編號大因此服務器2勝出,但此時投票數沒有大於半數,因此兩個服務器的狀態依然是LOOKING。
  • 服務器3啓動,給本身投票,同時與以前啓動的服務器1,2交換信息,因爲服務器3的編號最大因此服務器3勝出,此時投票數正好大於半數,因此服務器3成爲領導者,服務器1,2成爲小弟。
  • 服務器4啓動,給本身投票,同時與以前啓動的服務器1,2,3交換信息,儘管服務器4的編號大,但以前服務器3已經勝出,因此服務器4只能成爲小弟。
  • 服務器5啓動,後面的邏輯同服務器4成爲小弟。

http://cailin.iteye.com/blog/2014486/it

相關文章
相關標籤/搜索