ZooKeeper 是什嗎?
ZooKeeper 顧名思義 動物園管理員,他是拿來管大象(Hadoop) 、 蜜蜂(Hive) 、 小豬(Pig) 的管理員, Apache Hbase和 Apache Solr 以及LinkedIn sensei 等項目中都採用到了 Zookeeper。ZooKeeper是一個分布式的,開放源碼的分布式應用程式協調服務,ZooKeeper是以Fast Paxos演算法為基礎,實現同步服務,配置維護和命名服務等分布式應用。
ZooKeeper 如何工作?
ZooKeeper是作為分布式應用建立更高層次的同步(synchronization)、組態管理 (configuration maintenance)、群組(groups)以及名稱服務(naming)。在編程上,ZooKeeper設計很簡單,所使用的資料模型風格很像檔案系統的分類樹結構,簡單來說,有點類似windows中註冊表的結構,有名稱,有樹節點,有Key(鍵)/Value(值)對的關係,可以看做一個樹形結構的資料庫,分布在不同的機器上做名稱管理。
Zookeeper分為2個部分:伺服器端和用戶端,用戶端只串連到整個ZooKeeper服務的某個伺服器上。用戶端使用並維護一個TCP串連,通過這個串連發送請求、接受響應、擷取觀察的事件以及發送心跳。如果這個TCP串連中斷,用戶端將嘗試串連到另外的ZooKeeper伺服器。用戶端第一次串連到ZooKeeper服務時,接受這個串連的 ZooKeeper伺服器會為這個用戶端建立一個會話。當這個用戶端串連到另外的伺服器時,這個會話會被新的伺服器重建立立。
啟動Zookeeper伺服器叢集環境後,多個Zookeeper伺服器在工作前會選舉出一個Leader,在接下來的工作中這個被選舉出來的Leader死了,而剩下的Zookeeper伺服器會知道這個Leader死掉了,在活著的Zookeeper叢集中會繼續選出一個Leader,選舉出leader的目的是為了可以在分布式的環境中保證資料的一致性。:
另外,ZooKeeper 支援watch(觀察)的概念。用戶端可以在每個znode結點上設定一個觀察。如果被觀察服務端的znode結點有變更,那麼watch就會被觸發,這個watch所屬的用戶端將接收到一個通知包被告知結點已經發生變化。若用戶端和所串連的ZooKeeper伺服器中斷連線時,其他用戶端也會收到一個通知,也就說一個Zookeeper伺服器端可以對於多個用戶端,當然也可以多個Zookeeper伺服器端可以對於多個用戶端,: