1. 程式人生 > >什麼是Zookeeper——動物管理員?

什麼是Zookeeper——動物管理員?

What’s is ZooKeeper:

一個開源的分散式的,為分散式應用提供協調服務的Apache專案。

  • 功能包括::配置維護,名字服務,分散式同步,組服務等
  • 目標:封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

ZooKeeper特點:

  • 最終一致性:為客戶端展示同一檢視,這是 ZooKeeper 最重要的效能。
  • 可靠性:如果訊息被一臺伺服器接受,那麼它將被所有的伺服器接受。
  • 實時性:ZooKeeper 不能保證兩個客戶端同時得到剛更新的資料,如果需要最新資料,應該在讀資料之前呼叫sync()介面。
  • 獨立性(等待無關):慢的或者失效的 client 不干預快速的client的請求。
  • 原子性:更新只能成功或者失敗,沒有中間其它狀態。
  • 順序性:對於所有Server,同一訊息釋出順序一致

ZooKeeper Service:

這裡寫圖片描述

  • 每個Server在記憶體中儲存了一份資料。
  • Zookeeper啟動時,將從例項中選舉一個leader(根據Paxos協議來選舉)
  • Leader負責處理資料更新等操作(根據Zab協議)
  • 一個更新操作成功的標誌是當且僅當大多數Server在記憶體中成功修改資料。

ZooKeeper 角色:

這裡寫圖片描述

  • 伺服器數量是2n+1,允許伺服器宕機個數為n(不影響整個叢集的功能)
  • 角色:leader:做決定,做決策
    follower:接受客戶端請求,投票

ZooKeeper 典型應用場景:

  • Zookeeper 從設計模式角度來看,是一個基於觀察者模式設計的分散式服務管理框架,它負責儲存和管理大家都關心的資料,然後接受觀察者的註冊,一旦這些資料的狀態發生變化,Zookeeper 就將負責通知已經在 Zookeeper 上註冊的那些觀察者做出相應的反應,從而實現叢集中類似 Master/Slave 管理模式。
  • 應用場景
    • 統一命名服務(Name Service)
    • 配置管理(Configuration Management)
    • 叢集管理(Group Membership)
    • 共享鎖(Locks)同步鎖

ZooKeeperFailureController&JournalNode:


  • 故障轉移監控器(ZK客戶端)
    • 是在NN上啟動的程序,它用來監控NN的狀態,並實時向ZK彙報,如果ActiveNN突然發生了狀況,它會把訊息通知ZK,由於ZK的資訊是共享的,另一端的ZK會把資訊告訴負責監控standbyNN的ZKFC程序,由ZKFC再通知standbyNN變成ActiveNN
  • JournalNode
    • 在Hadoop2.x中,NN Active的元資料資訊一旦更新會將EDIT檔案實時儲存到一種中間介質(NFS或QJM),我們使用QJM(Quorum Journal Manager分散式日誌系統),而JournalNode實際是在ZK上啟動的。2.x中是不需要SecondaryNN的。NFS 網路檔案系統成本低、效率比較低。

- ZK基本只做一件事:選舉哪個NN是active。
- ZK和JournalNode的位置並無要求,只要可以通訊即可,開啟順序:先ZK後JN。