ZooKeeper學習

一.ZooKeeper是什麼?服務器

ZooKeeper是一個分佈式協調服務,目標是將複雜容易出錯的分佈式一致性服務包裝起來,提供API接口給用戶使用。負載均衡

ZooKeeper能夠實現數據發佈/訂閱,負載均衡,分佈式鎖,分佈式隊列,命名服務,集羣管理,Master管理,分佈式協調/通知。分佈式

二.ZooKeeper的Zab(Zookeeper Automic Broadcast)協議。線程

包含兩種模式:
1.崩潰恢復
2.消息廣播server

三.ZooKeeper的特性對象

1.數據節點--ZNode
ZNode是ZooKeeper的最小數據單元,每一個ZNode均可以存儲數據,同時還能掛載子節點,所以構成了一個層次化的命名空間,稱爲樹。接口

ZNode三種類型:持久節點,臨時節點,順序節點。能夠生成如下四種類型的節點:生命週期

  • 持久節點:持久節點建立後就一直存在於ZooKeeper服務器上,直到有刪除操做主動清除這個節點。
  • 持久順序節點:持久順序節點的特性和持久節點基本一致,額外的特性表如今順序性上。在ZooKeeper中,每一個父節點都會爲它的第一個子節點維護一份順序,用於記錄下每一個子節點建立的前後順序。
  • 臨時節點:臨時節點的生命週期和會話保持一致。若是會話失效,臨時節點也就失效。不能在臨時節點上建立子節點。
  • 臨時順序節點:在臨時節點上添加了順序性。

2.Watcher通知機制
客戶端線程向服務器註冊一個Watcher,同時將這個Watcher存儲在客戶端的WatchManager中,服務器會觸發Watcher事件向客戶端發送通知,客戶端會從WatchManager中找到對應的Watcher執行邏輯回調。隊列

3.ACL(Access Control List)
ZooKeeper的權限控制。包含三部分的內容:
(1)權限模式事件

  • IP:IP模式經過IP地址粒度進行權限控制。
  • Digest: 以相似「username:password」的形式的權限標識進行權限設置。
  • World:全部用戶均可以在不進行任何權限校驗的狀況下操做ZooKeeper上的數據。
  • Super: 超級用戶。

(2)受權對象:ID
受權對象指的是權限賦予的用戶或一個指定實體。
(3)權限
指經過權限校驗能夠被容許執行的操做,包括create,delete,read,write,admin。

4.服務器角色
(1)Leader:整個ZooKeeper集羣工做機制中的核心,主要任務:

  • 事務請求的惟一調度和處理者,保證集羣事務處理的順序性。
  • 集羣內部各服務器的調度者。

(2)Follower:ZooKeeper集羣狀態的跟隨者,主要任務:

  • 處理客戶端非事務的請求,轉發事務請求給Leader服務器。
  • 參與事務的Proposal的投票。
  • 參與Leader選舉的投票。

(3)Observer:觀察者
能處理非事務請求,將事務請求轉發給Leader服務器,可是不進行事務Proposal的投票和Leader選舉的投票。一般用於在不影響集羣事務處理能力的前提下提高集羣的非事務處理能力。

5.leader選舉
進行leader能夠是服務器啓動的時候或是服務器運行的時候。

(1)狀態變動:若是是服務器運行期間進行leader選舉,須要對非Observer服務器進行狀態變動爲Looking。
(2)進行投票:每臺服務器都會選舉本身做爲leader,投票的內容包括服務器的myid(ZooKeeper集羣搭建的時候每一個服務器的編號)和ZXID(ZooKeeper爲每個事務請求分配的惟一一個全局事務ID)。
(3)接收投票:接收來自其它服務器的投票,判斷投票的有效性。
(4)處理投票:須要將其餘服務器的投票與本身的投票比較,比較規則以下:

  • 先比較ZXID,ZXID比較大的服務器會優先做爲Leader。
  • ZXID相同的話,就比較myid,myid比較大的服務器做爲Leader服務器。

(5)統計投票:每次投票後,服務器都會統計全部投票,判斷是否有過半的機器接收到相同的投票信息。
(6)改變服務器狀態:若是是follower,就變動爲Following,若是是leader,就變動爲leading。

6.ZooKeeper的序列化協議:Jute

7.數據存儲
分爲兩部分:內存數據存儲和磁盤數據存儲。

參考資料:《從Paxos到ZooKeeper分佈式一致性原理與實踐》

相關文章
相關標籤/搜索