Zookeeper的幾個應用場景node
數據發佈/訂閱、分佈式應用配置項 、分佈式計數器、統一命名服務、狀態同步服務、集羣管理、master選舉、分佈式鎖、定時任務爭奪、分佈式隊列、分佈式協調/通知。數據庫
聽說Paxos算法的難理解與算法的知名度同樣使人敬仰,因此咱們先看如何保持數據的一致性,這裏有個原則就是:網絡
在一個分佈式數據庫系統中,若是各節點的初始狀態一致,每一個節點都執行相同的操做序列,那麼他們最後能獲得一個一致的狀態。數據結構
Paxos算法解決的什麼問題呢,解決的就是保證每一個節點執行相同的操做序列。好吧,這還不簡單,master維護一個全局寫隊列,全部寫操做都必須 放入這個隊列編號,那麼不管咱們寫多少個節點,只要寫操做是按編號來的,就能保證一致性。沒錯,就是這樣,但是若是master掛了呢。併發
Paxos算法經過投票來對寫操做進行全局編號,同一時刻,只有一個寫操做被批准,同時併發的寫操做要去爭取選票,只有得到過半數選票的寫操做纔會被 批准(因此永遠只會有一個寫操做獲得批准),其餘的寫操做競爭失敗只好再發起一輪投票,就這樣,在日復一日年復一年的投票中,全部寫操做都被嚴格編號排 序。編號嚴格遞增,當一個節點接受了一個編號爲100的寫操做,以後又接受到編號爲99的寫操做(由於網絡延遲等不少不可預見緣由),它立刻能意識到本身 數據不一致了,自動中止對外服務並重啓同步過程。任何一個節點掛掉都不會影響整個集羣的數據一致性(總2n+1臺,除非掛掉大於n臺)。分佈式
Zookeeper 做爲 Hadoop 項目中的一個子項目,是 Hadoop 集羣管理的一個必不可少的模塊,它主要用來控制集羣中的數據,如它管理 Hadoop 集羣中的 NameNode,還有 Hbase 中 Master Election、Server 之間狀態同步等。oop