Zookeeper學習記錄(一):Zookeeper簡介

文章目錄:

      1.1:什麼是Zookeeper

      1.2:Zookeeper的集羣結構

      1.3:Zookeeper的選舉機制

      1.4:Zookeeper的作用



1.1:什麼是Zookeeper

       Zookeeper英譯:動物管理員


       Zookeeper是分佈式集羣中的大管家

       分佈式集羣系統比較複雜,子模塊很多,但是子模塊往往不是孤立存在的,它們彼此之間需要協作和交互,各個子系統就好比動物園裏的動物,爲了使各個子系統能正常爲用戶提供統一的服務,必須需要一種機制來進行協調——這就是ZooKeeper


      Zookeeper 是爲分佈式應用程序提供高性能協調服務的工具集合,也是Google的Chubby一個開源的實現,是Hadoop 的子項目


1.2:Zookeepe的集羣結構

     


在Zookeeper集羣中,主要分爲三者角色,而每一個節點同時只能扮演一種角色,這三種角色分別是:

      > leader 負責進行投票的發起和決議,監控集羣中的節點是否存活(心跳機制),進行分配資源

      > follower 用於接受客戶端請求並向客戶端返回結果,在選主過程中參與投票

      >observer 與follower不同,observer不參與選舉

特點:
A:Zookeeper:一個leader,多個follower/observer組成的集羣
B:全局數據一致:每個server保存一份相同的數據副本,client無論連接到哪個server,數據都是一致的
C:數據更新原子性,一次數據更新要麼成功,要麼失敗
D:實時性,在一定時間範圍內,client能讀到最新數據

E:半數機制:整個集羣中只要有一半以上存活,就可以提供服務。因此通常Zookeeper由2n+1臺servers組成,每個server都知道彼此的存在。每個server都維護的內存狀態鏡像以及持久化存儲的事務日誌和快照。爲了保證Leader選舉能過得到多數的支持,所以ZooKeeper集羣的數量一般爲奇數。對於2n+1臺server,只要有n+1臺(大多數)server可用,整個系統保持可用


1.3:Zookeeper的選舉機制

zookeeper中有三種選舉算法

     >LeaderElection

     >FastLeaderElection(默認算法)

     >AuthLeaderElection

首先介紹幾個名詞的含義

服務器ID
     配置server時,給服務器標識的id,id越大在選擇算法中的權重越大
數據ID
      服務器在運行時產生的數據id,id越大,表示數據越新而且在選舉算法中的權重越大
邏輯時鐘
      或者叫投票的次數,同一輪投票過程中的邏輯時鐘值是相同的。每投完一次票這個數據就會增加,然後與接收到的其它服務器返回的投票信息中的數值相比,根據不同的值做出不同的判斷。

1.3.1、全新集羣選舉
以一個簡單的例子來說明整個選舉的過程.
假設有五臺服務器組成的zookeeper集羣,它們的id從1-5,同時它們都是最新啓動的,也就是沒有歷史數據,在存放數據量這一點上,都是一樣的.假設這些服務器依序啓動,來看看會發生什麼.
1) 服務器1啓動,此時只有它一臺服務器啓動了,它發出去的報沒有任何響應,所以它的選舉狀態一直是LOOKING狀態
2) 服務器2啓動,它與最開始啓動的服務器1進行通信,互相交換自己的選舉結果,由於兩者都沒有歷史數據,所以id值較大的服務器2勝出,但是由於沒有達到超過半數以上的服務器都同意選舉它(這個例子中的半數以上是3),所以服務器1,2還是繼續保持LOOKING狀態.
3) 服務器3啓動,根據前面的理論分析,服務器3成爲服務器1,2,3中的老大,而與上面不同的是,此時有三臺服務器選舉了它,所以它成爲了這次選舉的leader.
4) 服務器4啓動,根據前面的分析,理論上服務器4應該是服務器1,2,3,4中最大的,但是由於前面已經有半數以上的服務器選舉了服務器3,所以它只能接收當小弟的命了.

5) 服務器5啓動,同4一樣,當小弟.


這種情況下如果啓動順序爲   53214:主爲5       13452:主爲4        31524:主爲5


1.3.2、非全新集羣選舉(當leader崩潰或者leader失去大多數的follower)

       (1)每個server會將自己的(數據id 、服務器id 、邏輯時鐘)作爲廣播信息,廣播到集羣中所有的服務器(server)。然後等待集羣中的服務器(server)返回的選舉結果

       (2)當某個服務器(server)收到其他server廣播過來的數據,它會對這些數據進行對比

第一步:比較邏輯時鐘 

          > 邏輯時鐘小的server,更新本機邏輯時鐘,重新選舉

第二步:邏輯時鐘一致的時候,根據數據id和服務器id推薦leader

         >首先比較每個server的數據id,比如server1的數據id大,當前server就推薦server1爲leader

         >如果最大的數據id有兩個server(server1和server2),但是server2的服務器id比server1大,那麼當前server就推                薦server2爲leader

第二步圖解:括號內容爲 (服務器id,數據id)


1.4:Zookeeper的作用

Zookeeper包含一個簡單的原語集,分佈式應用程序可以基於它實現命名服務、配置維護、集羣選主等:
>命名服務:註冊節點信息,形成有層次的目錄結構(類似Java的包名)。
>配置維護:配置信息的統一管理和動態切換。
>集羣選主:確保整個集羣中只有一個主,其它爲從。並且當主掛了後,可以從新選主









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章