1 Zookeeper簡介-分佈式服務框架
ZooKeeper爲分佈式應用程序提供高效且可靠的分佈式協調服務,提供的服務:配置管理、統一命名服務、分佈式同步、組服務等,是Google Chubby的開源實現,Hadoop和Hbase的重要組件;是一個典型的分佈式數據一致性的解決方案,分佈式應用程序可基於它實現諸如數據發佈/訂閱、負載均衡、分佈式協調/通知、集羣管理、Master選舉、分佈式鎖和分佈式隊列等功能。
ZooKeeper的設計目標就是將複雜易出錯的分佈式一致性服務封裝起來,構成高效可靠的原語集,並以一系列簡單易用的接口提供給用戶使用,支持Java和C的接口。
ZooKeeper代碼版本中,提供了分佈式獨享鎖、選舉、隊列的接口。其中分佈鎖和隊列有Java和C兩個版本,選舉只有Java版本。
ZooKeeper是以FastPaxos算法爲基礎的,Paxos 算法存在活鎖的問題,即當有多個proposer交錯提交時,有可能互相排斥導致沒有一個proposer能提交成功,而Fast Paxos作了一些優化,通過選舉產生一個leader (領導者),只有lead才能提交proposer[申請]。在解決分佈式數據一致性方面,ZooKeeper並沒有直接採用Paxos算法,而是使用ZAB的一致性協議。
ZooKeeper的基本運轉流程:
1、選舉Leader。 2、同步數據。
3、選舉Leader過程中算法有很多,但要達到的選舉標準是一致的。
4、Leader要具有最高的zxid。
5、集羣中大多數的機器得到響應並follow選出的Leader
2 常用命令
四字命令 |
功能描述 |
conf |
輸出相關服務配置的詳細信息。 |
cons |
列出所有連接到服務器的客戶端的完全的連接 / 會話的詳細信息。包括“接受 / 發送”的包數量、會話 id 、操作延遲、最後的操作執行等等信息。 |
dump |
列出未經處理的會話和臨時節點。 |
envi |
輸出關於服務環境的詳細信息(區別於 conf 命令)。 |
reqs |
列出未經處理的請求 |
ruok |
測試服務是否處於正確狀態。如果確實如此,那麼服務返回“imok ”,否則不做任何相應。 |
stat |
輸出關於性能和連接的客戶端的列表。 |
wchs |
列出服務器 watch 的詳細信息。 |
wchc |
通過 session 列出服務器 watch 的詳細信息,它的輸出是一個與watch 相關的會話的列表。 |
wchp |
3 命令行工具
[sgwdev_linuxuser@tydicbin]$ ./zkCli.
zkCli.cmd zkCli.sh
[sgwdev_linuxuser@tydicbin]$ ./zkCli.sh -server 192.168.1.165:2181
Connecting to192.168.1.165:2181
4 簡單操作
1)ls 查看ZooKeeper指定節點下一級所有子節點
ls path [watch]
2)get 獲取ZooKeeper指定節點的數據內容和屬性信息
get path [watch]
3)set 更新指定節點的數據內容,version爲指定ZNode數據結點的版本,不指定更新後
dataVersin會+1
set path data[version]
4)create 創建一個ZooKeeper節點,-s:順序節點;-e:臨時節點;默認爲永久節點;
acl: 權限控制,默認不做控制
create [-s] [-e]path data acl
5)delete 在沒有沒有子結點時刪除ZooKeeper指定節點
delete path[version]
5 開源客戶端
Curator(全世界應用最廣泛) , ZkClient
6 目標
1)簡單的數據模型
ZooKeeper服務器內存中的數據模型,由系列的ZNode節點構成,樹型結構命名空間-7.1.1
2)構建集羣 7.3
3)順序訪問 7.8
對於客戶端每個請求會分配一個全局唯一的遞增編號,編號反映所有事務操作的先後順序。
4)高性能
全量數據存儲在內存中,直接服務於客戶端所有非事務請求,尤其適合於以讀操作爲主場景
7 概念
1)集羣角色
通常分佈式集羣是主備模式(Master/Slave);ZooKeeper採用Leader、Follower、Observer三角色,通過Leader選舉選定Leader服務器,爲客戶端提供讀和寫服務,Follower和Observer節點提供讀服務,Observer節點不參與Leader選舉和寫操作“過半寫成功”策略,故可以在不影響寫性能的情況下提升集羣的讀性能 7.7
2)會話
3)數據節點ZNode
所有ZNode以模型結構存儲在內存中,數據節點ZNode包含數據內容和系列的屬性信息,
如。分持久PERSISTENT,臨時節點EPHEMERAL和順序節點SEQUENTIAL,可組成4種組合型節點。持久節點:創建後只有主動進行刪除操作才移除,否則一直有效;臨時節點:生命週期與Client會話綁定,在Client會話失效時,這個客戶端所創建的所有臨時結點都會刪除,SEQUENTIAL,創建節點後追加整形數字,由父節點維護的自增數字,
4)版本
ZNode內Stat數據結構,記錄ZNode三個數據版本,version當前版本;cversion當前子節點版本;aversion當前ACL版本 7.1.3
5)Watcher 事件監聽器
用戶在指定節點註冊一些Watcher,並且在特定事件觸發的時候,ZooKeeper服務端會將事件通知到感興趣的客戶端上去,該機制是ZooKeeper實現分佈式協調服務的重要特性。7.1.4
6)ACL 訪問控制列表(AccessControl List) ,通過ACL策略進行權限控制,5種權限
CREATE:創建子節點權限 READ:獲取節點數據和子節點列表的權限
WRITE:更新節點數據的權限 DELETE:刪除子節點數據的權限
ADMIN:設置節點ACL的權限 7-1-5
7)ZAB協議ZooKeeperAtomic Broadcast 原子消息廣播協議,保證數據一致性的核心算法
8 Zookeeper結構
角色:Zookeeper=服務端+客戶端
服務端 |
支持羣集,包括文件系統和通知機制 |
客戶端 |
連接服務端,操作數據,註冊要監聽的數據,接收通知 |
功能:Zookeeper=文件系統+通知機制
文件系統 |
存儲和管理數據,以樹型的結構存儲 |
通知機制 |
監控文件系統的數據變化,通知監聽的客戶端 |
8.1文件系統
Zookeeper數據結構特點: |
|
路徑唯一標識 |
樹型存儲結構,與文件系統目錄樹結構類似 例:/Apps/App3/SubApp1 |
節點下可以創建子節點 |
可以針對節點進行增,刪,改,查,創建子節點操作 各個節點下可以存儲數據,數據可以有多個版本。 |
臨時節點 |
一旦創建這個節點的客戶端與服務器失去聯繫,這個節點也將自動刪除, Zookeeper 的客戶端和服務器通信採用長連接方式, 每個客戶端和服務器通過心跳來保持連接, 這個連接狀態稱爲 session,如果節點是臨時節點, 這個 session 失效,節點也就刪除了. 臨時節點下不能創建子節點 |
永久節點 |
創建這個節點的客戶端與服務器失去聯繫,這個節點不會刪除。 |
節點的名稱可以自動編號 |
如 App1 已經存在,再創建的話,將會自動命名爲 App2 |
節點可以被監控 |
節點中存儲數據的修改,子節點目錄的變化等,一旦變化可以通知設置監控的客戶端,這個是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基於這個特性實現的. |
8.2通知機制
Zookeeper 的客戶端和服務器通信採用長連接方式,客戶端註冊監聽它關心的目錄節點,當目錄節點發生變化(數據改變、被刪除、子目錄節點增加刪除)時,每個客戶端和服務器通過心跳來保持連接,zookeeper會通知客戶端。
8.3總結
1 |
存儲 |
負責存儲和管理數據 |
2 |
註冊 |
然後接受客戶端的註冊,監聽相關的數據 |
3 |
變化 |
一旦這些數據的狀態發生變化 |
4 |
通知 |
Zookeeper 負責通知已經在 Zookeeper 上註冊的那些客戶端 |
5 |
業務處理 |
客戶端做出相應的反應 |
Zookeeper 特點:
順序一致性 |
按照客戶端發送請求的順序更新數據。 |
原子性 |
更新要麼成功,要麼失敗,不會出現部分更新。 |
單一性 |
無論客戶端連接哪個server,都會看到同一個視圖。 |
可靠性 |
一旦數據更新成功,將一直保持,直到新的更新。 |
及時性 |
客戶端會在一個確定的時間內得到最新的數據。 |
Zookeeper功能:
1 |
名稱服務 |
統一命名服務,唯一的名稱,樹形的名稱結構,便於人識別和記住,不會重複 |
2 |
配置維護 |
分佈式應用配置項的管理 |
3 |
分佈式同步 |
狀態同步服務 |
4 |
組服務 |
集羣管理 |
注:Zoopkeeper 提供了一套很好的分佈式集羣管理的機制,從而可以設計出多種多樣的分佈式的數據管理模型,而不僅僅侷限於下面提到的幾個常用應用場景。
8.4容錯節點
zookeeper集羣的容錯能力情況:若2n+1=集羣PC總數,n即爲可容納的故障節點。
例如:3臺能容錯1臺,5臺能容錯2臺,7臺能容錯3臺。
附:
關於Zookeeper 可參考相應資料,涉及內容:
1)Zookeeper概述、原理及應用匯總 2)Zookeeper分佈式服務框架內容總結:包括四字命令、命令行工具操作、目標、概念、 Zookeeper結構等說明
3)4大應用場景(配置中心、集羣管理、等) 4)Linux Evi集羣(三臺PC)部署
下載地址:Zookeeper概述、原理及應用匯總
ZK 常見4大應用場景&JAVA 實現DEMO Code 以及 Zookeeper源代碼3.4.9版本 可參考相應資料,下載地址:Zookeeper公司內部交流學習、培訓總結
內容截圖如下:
有不妥或不正確的地方請指出,大家一同學習、進步!