Zookeeper入門概要

 

ZooKeeper是一個開源的分佈式協調服務,由雅虎建立,是Google Chubby的開源實現。ZooKeeper的設計目標是將那些複雜且容易出錯的分佈式一致性服務封裝起來,構成一個高效可靠的原語集,並以一系列簡單易用的接口提供給用戶使用;node

分佈式一致性特性:
    順序一致性:嚴格按照其發起順序
    原子性
    單一視圖:不管鏈接的是哪一個ZK服務器,數據模型都是一致
    可靠性
    實時性:保證在必定的時間段內,Client最終能從Server讀取到最新的數據狀態
集羣角色:
    Leader (提供讀和寫服務)
    Follower(提供讀服務)
    Observer(提供讀服務,不參與Leader選舉,也不參與寫操做的『過半寫成功』策略)算法

1.數據模型

樹形結構,每一個節點ZNode,經過其路徑惟一標識,跟Unix文件系統有些相似。ZNode可存儲少許數據(默認是1M,能夠經過配置修改,不建議ZNode上存儲大量數據),還存儲了其Acl信息;服務器

2.重要概念

節點
ZNode能夠分爲持久節點(persistent)和臨時節點(ephemeral)兩類;併發

Session
Client與Zookeeper之間的通訊會建立一個Session,經過心跳檢測和服務器保持有效的會話,有超時時間,集羣會持久化鏈接的Session信息;負載均衡

Watcher
事件監聽器,用於監聽znode事件(create、delete、update、get),一次性的,即觸發一次就會被取消分佈式

3.ZK特性

1.讀寫模式(讀性能好,寫須要Leader進行請求廣播並有半數以上成功的ACK — 『過半寫成功』策略)
2.WAL和Snapshot(i.write-ahead-log:先寫WAL, 而後再對內存中的數據作更新,而後向Client通知更新結果;ii.按期將內存中的目錄樹進行Snapshot,落地到磁盤上;)
3.FIFO(i.通訊基於TCP;ii.請求是按照FIFO順序)
4.Linearizability(有嚴格的偏序關係,更新操做是串行執行)高併發

4.Client API

create、delete、exists、getData、setData、getChildren、sync、setAcl、getAcl性能

5.應用場景

1. 命名服務(NameService) :經過簡單的名字來訪問指定的HDFS機羣
2. 配置管理(Configuration Management) :統一配置(好比Job的多個實例配置信息),也就是數據發佈與訂閱;
3. 組員管理(Group Membership):新增節點和Slave宕機的調整
4. 簡單互斥鎖(Simple Lock) :broadcast(會形成羊羣效應(Herd Effect))
5. 互斥鎖(Simple Lock without Herd Effect):next(臨時的順序結點)
6. 讀寫鎖(Read/Write Lock) :多個讀能夠併發執行,但寫讀寫寫互斥
7. 屏障(Barrier) :等待多個進程完成各自的任務,而後繼續往前進行下一步
8. 雙屏障(Double Barrier):它能夠用來同步一個任務的開始和結束,當有足夠多的進程進入屏障後,纔開始執行任務;當全部的進程都執行完各自的任務後,屏障才撤銷;spa

ZooKeeper是一個典型的分佈式數據一致性的解決方案。具備數據發佈/訂閱、負載均衡、分佈式協調/通知、集羣管理、Master選舉、分佈式鎖和分佈式隊列等功能;.net

6.ZAB協議

    ZooKeeper並無徹底採用Paxos算法,而是使用了一種稱爲ZooKeeper Atomic Broadcast(ZAB,ZooKeeper原子廣播協議)的協議做爲其數據一致性的核心算法;
    ZAB協議並不像Paxos算法和Raft協議同樣,是通用的分佈式一致性算法,它是一種特別爲ZooKeeper設計的崩潰可恢復的原子廣播算法。
    ZAB協議的兩種基本模式:崩潰恢復和消息廣播;
    崩潰恢復模式包括兩個階段:

        i.Leader選舉和數據同步;

        ii.退出恢復模式後進入消息廣播模式;

Leader選舉:

    利用ZooKeepr的強一致性,可以很好地保證在分佈式高併發狀況下節點的建立必定可以保證全局惟一性,即ZooKeeper將會保證客戶端沒法建立一個已經存在的ZNode;
實現過程:多個客戶端請求建立同一個臨時節點,那麼最終必定只有一個客戶端請求可以建立成功。利用這個特性,就能很容易地在分佈式環境中進行Master選舉了;
Leader(Master) 選舉的具體步驟:
    一、客戶端鏈接時,在指定的目錄(這裏假定爲"/leader")建立一個EPHEMERAL_SEQUENTIAL的節點,把內網的IP數據存入建立節點。
    二、獲取目錄的子點節,並取得序列號最小的節點,咱們把這個節點設置爲leader。當此節點被刪除時,證實leader斷線。
    三、其它機器監聽leader節點,當leader節點的刪除時,再取目錄的最小子點節做爲leader。

 

ZooKeeper原理及使用:http://www.wuzesheng.com/?p=2609

ZooKeeper原理與應用:https://www.jianshu.com/p/84ad63127cd1

Leader(Master)選舉:https://blog.csdn.net/massivestars/article/details/53894551

相關文章
相關標籤/搜索