https://www.cnblogs.com/felixzh/p/5869212.html
https://www.w3cschool.cn/zookeeper/zookeeper_overview.html
一、zookeeper定義
zookeeper是一個針對大型分布式系統的可靠協調系統。
1.1 它的功能包括:配置維護,名字服務,分布式同步、組服務等。
1.2 它的目標就是封裝好復雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。
二、zookeeper的特點
1、 最終一致性:為客戶端展示同一視圖。
2、可靠性:如果一條消息被一台服務器接受,那么它將被所有服務器接受。
3、實時性:zookeeper不能保證兩個客戶端同事得到剛剛更新的數據,如果需要更新數據,應該在讀數據之前調用sync()接口。
4、等待無關(wait-free):慢的或者失效的client不干預快速的client的請求。
5、原子性:更新操作要么成功,要么失敗,沒有中間狀態。
6、順序性:對於所有server,同一消息發布順序一致。
三、zookeeper角色
四、leader選舉
1、leader選舉采用paxos協議
2、paxos核心思想是:當多數server寫成功,那么數據則寫入成功。
如果有3個服務器,那么有兩個寫入成功,則數據寫入成功。
如果有4個或者5個服務器,有3個寫成功,則數據寫成功。
3、server數量一般為奇數,如3、5、7等。
如果有3個服務器,最多允許1個掛掉。
如果有4個服務器,最多同樣允許3個掛掉。
4、zookeeper 的寫入操作。
五、zookeeper數據模型。
1、zookeeper 提供一個層次化目錄結構,命名規范符合常規linux文件目錄命名規范。
2、每個節點在zookeeper中叫做znode,並且有一個唯一的路徑標識。
3、znode有兩種數據結構,短暫的(ephemeral)和持久的(persistent),節點包含數據和子節點。
4、znode數據包含多個版本。
5、客戶端可以在節點上設置監視器(watch)。
6、znode不支持部分讀寫,需要一次性全部執行完成。
7、znode類型在創建時確定,並不能修改。
8、znode有四種類型目錄節點,persistent, persistent_sequential, ephemeal, ephemeal_sequential
六、zookeeper統一命名服務。
1、在分布式環境下,經常需要對應用/服務統一命名,便於識別不通服務。
1.1 類似於ip和域名的關系。
1.2 通過名稱來獲取資源或者服務的地址信息。
2 按照層次組織服務/應用名稱。
2.1 它可以將服務名稱以及地址名稱寫到zookeeper中,客戶端通過服務名稱獲取服務列表。、
七、zookeeper--配置管理。
1、 分布式環境下,需要經常配置文件管理和同步。
1.1 y一個集群中,所有的節點配置和信息是一致的。
1.2 我們對配置文件修改后,需要盡快同步到各個節點中。
2 配置管理可以交給zookeeper實現。
2.1 可將配置文件寫入到一個znode中。
2.2 各個節點監聽這個znode。
2.3 一旦znode的配置文件被修改,zookeeper將通知到其它各個znode
八、zookeeper集群管理。
1、分布式環境中,我們需要實時掌握每個節點的狀態。
1.1 可根據節點狀態實時做出一些調整。
2、k可交由zookeeper實現。
2.1 可將zookeeper節點信息寫入到一個znode中。
2.2 監聽這個節點的實時變化。
九、 zookeeper分布式通知與協調。
1、分布式環境中,一個服務經常需要知道他的子服務狀態,
1.1 namenode需知道各個DataNode的狀態。
1.2 resource manager需要知道nodemanager狀態
2、zookeeper實現心跳監測機制,實時信息推送,相當於一個發布/訂閱系統。
十、zookeeper分布式鎖。
1、zookeeper是強一致性的
2、實現鎖的獨占性。
3、控制鎖的時序。
十一、分布式隊列
分布式隊列有兩種
1、當一個隊列全部都聚齊時,這個隊列才可以用,否則這個隊列會一直等所有成員到達,這種成為同步隊列。
1.1 當一個job由所有的task組成時,所有的任務完成后,job才運行。
1.2可為job創建一個/job,然后在該目錄下,為每個完成task創建一個臨時的znode,當臨時節點的目錄數達到task總數時,則job表示完成。
2、隊列實現FIFO模式,實現生產者和消費者模型。