zoopkeeper工作機制及原理

1、什麼是zoopkeeper ?
ZooKeeper是一種爲分佈式應用所設計的高可用、高性能且一致的開源協調服務。

2、爲什麼要使用zoopkeeper?

  • (順序一致性)從同一個客戶端發起的事務請求,最終將會嚴格按照其發起順序被應用到zookeeper中;
  • (原子性)所有事物請求的處理結果在整個集羣中所有機器上的應用情況是一致的;
  • (單一視圖)無論客戶端連接的是哪個zookeeper服務器,其看到的服務端數據模型都是一致的;
  • (可靠性)一旦服務端成功的應用了一個事務,並完成對客戶端的響應,那麼該事務所引起的服務端狀態變更將會一直保留下來,除非有另一個事務又對其進行了改變;
  • (實時性)zookeeper並不是一種強一致性,只能保證順序一致性和最終一致性,只能稱爲達到了僞實時性。

3、zoopkeeper架構
這裏寫圖片描述
幾個概念介紹

  • Client(客戶端)
    客戶端,我們的分佈式應用集羣中的一個節點,從服務器訪問信息。對於特定的時間間隔,每個客戶端向服務器發送消息以使服務器知道客戶端是活躍的。類似地,當客戶端連接時,服務器發送確認碼。如果連接的服務器沒有響應,客戶端會自動將消息重定向到另一個服務器。
  • Server
    我們的ZooKeeper總體中的一個節點,爲客戶端提供所有的服務。向客戶端發送確認碼以告知服務器是活躍的。
  • Ensemble
    ZooKeeper服務器組。形成ensemble所需的最小節點數爲3。
  • Leader
    服務器節點,如果任何連接的節點失敗,則執行自動恢復。Leader在服務啓動時被選舉。
  • Follower
    跟隨leader指令的服務器節點,後備leader。

4、zoopkeeper結構如何?
ZooKeeper是一個文件系統的採用樹結構。ZooKeeper節點稱爲 znode 。每個znode由一個名稱標識,並用路徑(/)序列分隔。結構就像你使用tree命令列出linux的一個非空文件。
copy張圖,大概長下面這樣子:
這裏寫圖片描述
其中Znode有三種類型:

  • 持久節點(persistent):
    • 創建特定znode的客戶端斷開連接後,持久節點仍然存在。默認情況下,除非另有說明,否則所有znode都是持久的。
  • 順序節點(sequential):

    • 客戶端活躍時,臨時節點就是有效的。當客戶端與ZooKeeper集合斷開連接時,臨時節點會自動刪除。因此,只有臨時節點不允許有子節點。如果臨時節點被刪除,則下一個合適的節點將填充其位置。臨時節點在leader選舉中起着重要作用。
  • 臨時節點(ephemeral):

    • 順序節點可以是持久的或臨時的。當一個新的znode被創建爲一個順序節點時,ZooKeeper通過將10位的序列號附加到原始名稱來設置znode的路徑。如果兩個順序節點是同時創建的,那麼ZooKeeper不會對每個znode使用相同的數字。順序節點在鎖定和同步中起重要作用。

5、zoopkeeper怎樣工作?
首先保證zoopkeeper已經啓動,客戶端會連接到ZooKeeper集合中的一個leader或follower節點。一旦建立連接,節點將向特定客戶端分配會話ID並向該客戶端發送確認。如果客戶端沒有收到確認,它將嘗試連接ZooKeeper集合中的另一個節點。 一旦連接到節點,客戶端將以有規律的間隔向節點發送心跳,以確保連接不會丟失。
這裏寫圖片描述
關於節點數量
zoopkeeper集合中最好設置奇數個節點,因爲zoopkeeper有這樣一個規則:假如集合中掛掉的節點數量沒有超過總節點一半數量的話,節點之間都可通過重新選舉新的leader恢復數據(不一定完整恢復,但會恢復到剩餘幾個完好節點中數據更新時間點最新的時刻)。
6、那麼zoopkeeper怎樣進行leader選舉呢?

  1. 所有節點創建具有相同路徑 /root/leader_election/guid_ 的順序、臨時節點。
    ZooKeeper集合將附加10位序列號到路徑,創建的znode將是/root/leader_election/guid_0000000001,/root/leader_election/guid_0000000002等。
  2. 對於給定的實例,在znode中創建最小數字的節點成爲leader,而所有其他節點是follower。
  3. 每個follower節點監視下一個具有最小數字的znode。例如:guid_0000000008的節點將監視guid_0000000007,guid_0000000007的節點將監視guid_0000000006。
  4. 如果leader關閉,則其相應的目錄會被刪除。
  5. 下一個在線follower節點將通過監視器獲得關於leader移除的通知。
  6. 下一個在線follower節點將檢查是否存在其他具有最小數字的znode。如果沒有,那麼它將承擔leader的角色。否則,它找到的創建具有最小數字的znode的節點將作爲leader。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章