- 目錄
- 前言
- 1、Zookeeper簡介
- 2、Zookeeper結構
- 3、Zookeeper常用的命令行操作
- 總結:
目錄
前言
作為一款第三方的協調服務框架,ZK被應用在許多地方,如:Hbase中用于存儲-ROOT表的位置信息;Storm中用于保存任務分配的信息、心跳信息、元數據信息等。只要是在整個設計中需要一個第三方的組件來滿足“元數據的存儲、提供監聽服務”的需求,ZK都可以滿足。接下來就簡單介紹下ZK。
1、Zookeeper簡介
Zookeeper**是一個分布式協調服務;就是為用戶的分布式應用程序提供協調服務**
A、zookeeper是為別的分布式程序服務的
B、Zookeeper本身就是一個分布式程序(只要有半數以上節點存活,ZK就能正常服務)
C、Zookeeper所提供的服務涵蓋:主從協調、服務器節點動態上下線、統一配置管理、分布式共享鎖、統一名稱服務……
D、雖然說可以提供各種服務,但是zookeeper在底層其實只提供了兩個功能:
- 管理(存儲,讀取)用戶程序提交的數據(狀態數據);
- 并為用戶程序提供數據節點監聽服務;
Zookeeper常用應用場景:
1、服務器集群上的采集程序需要實時從相關的服務器拿數據,若服務器掛了,會造成損失。需要一個第三方來記錄每臺服務器的采集數據的狀態信息和監聽每臺服務器的狀態,以及提供選舉策略來支撐由那臺服務器來接替掛了的服務器。
2、若幾臺服務器的一些配置文件相同,可以將這些文件放置到第三方上,通過第三方來傳輸這些文件到相應的服務器上(更新配置文件時也只需更新第三方上的一個配置文件即可)。
Zookeeper集群的角色: Leader 和 follower (Observer)
Zookeeper特性:
1、Zookeeper:一個leader,多個follower組成的集群
2、全局數據一致:每個server保存一份相同的數據副本,client無論連接到哪個server,數據都是一致的
3、分布式讀寫,更新請求轉發,由leader實施
4、更新請求順序進行,來自同一個client的更新請求按其發送順序依次執行
5、數據更新原子性,一次數據更新要么成功,要么失敗
6、實時性,在一定時間范圍內,client能讀到最新數據
2、Zookeeper結構
2.1、Zookeeper數據結構:
1、層次化的目錄結構,命名符合常規文件系統規范(見下圖)
2、每個節點在zookeeper中叫做znode,并且其有一個唯一的路徑標識
3、節點Znode可以包含數據和子節點(但是EPHEMERAL類型的節點不能有子節點,下一頁詳細講解)
4、客戶端應用可以在節點上設置監視器(后續詳細講解)
2.2、數據結構的圖
2.3、節點類型
1、Znode有兩種類型:
短暫(ephemeral)(斷開連接自己刪除)
持久(persistent)(斷開連接不刪除)
2、Znode有四種形式的目錄節點(默認是persistent )(帶序列和不帶序列的)
PERSISTENT
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
EPHEMERAL
EPHEMERAL_SEQUENTIAL
3、創建znode時設置順序標識,znode名稱后會附加一個值,順序號是一個單調遞增的計數器,由父節點維護
4、在分布式系統中,順序號可以被用于為所有的事件進行全局排序,這樣客戶端可以通過順序號推斷事件的順序
3、Zookeeper常用的命令行操作
運行 zkCli.sh –server <ip>進入命令行工具
1、使用 ls 命令來查看當前 ZooKeeper 中所包含的內容:
[zk: 202.115.36.251:2181(CONNECTED) 1] ls /
2、創建一個新的 znode ,使用 create /zk myData 。這個命令創建了一個新的 znode 節點“ zk ”以及與它關聯的字符串:
[zk: 202.115.36.251:2181(CONNECTED) 2] create /zk "myData“
3、我們運行 get 命令來確認 znode 是否包含我們所創建的字符串:
[zk: 202.115.36.251:2181(CONNECTED) 3] get /zk
#監聽這個節點的變化,當另外一個客戶端改變/zk時(這里只是改變/zk中的數據內容,當文件出現增刪時用ls /zk watch),它會打出下面的
#WATCHER::
#WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk
[zk: localhost:2181(CONNECTED) 4] get /zk watch
4、下面我們通過 set 命令來對 zk 所關聯的字符串進行設置:
[zk: 202.115.36.251:2181(CONNECTED) 4] set /zk "zsl“
5、下面我們將剛才創建的 znode 刪除:
[zk: 202.115.36.251:2181(CONNECTED) 5] delete /zk
6、刪除節點:rmr
[zk: 202.115.36.251:2181(CONNECTED) 5] rmr /zk
總結:
關于ZK你應該知道以下幾個點:
1、知道是什么;干什么用的。
2、會用。
3、知道內部的工作原理。
如果你知道以上的知識,那么恭喜你已經達到和博主一樣的小菜鳥的級別。接下來會再介紹下ZK內部的選舉機制
(詳見:https://blog.csdn.net/qq_16633405/article/details/79754728)。