一.ZooKeeper是什麼?服務器
ZooKeeper是一個分佈式協調服務,目標是將複雜容易出錯的分佈式一致性服務包裝起來,提供API接口給用戶使用。負載均衡
ZooKeeper能夠實現數據發佈/訂閱,負載均衡,分佈式鎖,分佈式隊列,命名服務,集羣管理,Master管理,分佈式協調/通知。分佈式
二.ZooKeeper的Zab(Zookeeper Automic Broadcast)協議。線程
包含兩種模式:
1.崩潰恢復
2.消息廣播server
三.ZooKeeper的特性對象
1.數據節點--ZNode
ZNode是ZooKeeper的最小數據單元,每一個ZNode均可以存儲數據,同時還能掛載子節點,所以構成了一個層次化的命名空間,稱爲樹。接口
ZNode三種類型:持久節點,臨時節點,順序節點。能夠生成如下四種類型的節點:生命週期
2.Watcher通知機制
客戶端線程向服務器註冊一個Watcher,同時將這個Watcher存儲在客戶端的WatchManager中,服務器會觸發Watcher事件向客戶端發送通知,客戶端會從WatchManager中找到對應的Watcher執行邏輯回調。隊列
3.ACL(Access Control List)
ZooKeeper的權限控制。包含三部分的內容:
(1)權限模式事件
(2)受權對象:ID
受權對象指的是權限賦予的用戶或一個指定實體。
(3)權限
指經過權限校驗能夠被容許執行的操做,包括create,delete,read,write,admin。
4.服務器角色
(1)Leader:整個ZooKeeper集羣工做機制中的核心,主要任務:
(2)Follower:ZooKeeper集羣狀態的跟隨者,主要任務:
(3)Observer:觀察者
能處理非事務請求,將事務請求轉發給Leader服務器,可是不進行事務Proposal的投票和Leader選舉的投票。一般用於在不影響集羣事務處理能力的前提下提高集羣的非事務處理能力。
5.leader選舉
進行leader能夠是服務器啓動的時候或是服務器運行的時候。
(1)狀態變動:若是是服務器運行期間進行leader選舉,須要對非Observer服務器進行狀態變動爲Looking。
(2)進行投票:每臺服務器都會選舉本身做爲leader,投票的內容包括服務器的myid(ZooKeeper集羣搭建的時候每一個服務器的編號)和ZXID(ZooKeeper爲每個事務請求分配的惟一一個全局事務ID)。
(3)接收投票:接收來自其它服務器的投票,判斷投票的有效性。
(4)處理投票:須要將其餘服務器的投票與本身的投票比較,比較規則以下:
(5)統計投票:每次投票後,服務器都會統計全部投票,判斷是否有過半的機器接收到相同的投票信息。
(6)改變服務器狀態:若是是follower,就變動爲Following,若是是leader,就變動爲leading。
6.ZooKeeper的序列化協議:Jute
7.數據存儲
分爲兩部分:內存數據存儲和磁盤數據存儲。
參考資料:《從Paxos到ZooKeeper分佈式一致性原理與實踐》