其餘更多java基礎文章:
java基礎學習(目錄)java
概述
Zookeeper是一個開源的分佈式的,爲分佈式應用提供協調服務的Apache項目。node
Zookeeper從設計模式角度來理解:是一個基於觀察者模式設計的分佈式服務管理框架,它負責存儲和管理你們都關心的數據,而後接受觀察者的註冊,一旦這些數據的狀態發生變化,Zookeeper就將負責通知已經在Zookeeper上註冊的那些觀察者作出相應的反應,從而實現集羣中相似Master/Slave管理模式設計模式
Zookeeper=文件系統+通知機制服務器
基礎
數據結構
ZooKeeper數據模型的結構與Unix文件系統很相似,zookeeper集羣自身維護了一套數據結構。這個存儲結構是一個樹形結構,其上的每個節點,咱們稱之爲"znode",每個znode默認可以存儲1MB的數據,每一個ZNode均可以經過其路徑惟一標識。session
節點類型
-
Znode有兩種類型:數據結構
- 短暫(ephemeral):客戶端和服務器端斷開鏈接後,建立的節點本身刪除
- 持久(persistent):客戶端和服務器端斷開鏈接後,建立的節點不刪除
-
Znode有四種形式的目錄節點(默認是persistent )框架
- 持久化目錄節點(PERSISTENT)
客戶端與zookeeper斷開鏈接後,該節點依舊存在
- 持久化順序編號目錄節點(PERSISTENT_SEQUENTIAL)
客戶端與zookeeper斷開鏈接後,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號
- 臨時目錄節點(EPHEMERAL)
客戶端與zookeeper斷開鏈接後,該節點被刪除
- 臨時順序編號目錄節點(EPHEMERAL_SEQUENTIAL)
客戶端與zookeeper斷開鏈接後,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號
-
建立znode時設置順序標識,znode名稱後會附加一個值,順序號是一個單調遞增的計數器,由父節點維護分佈式
-
在分佈式系統中,順序號能夠被用於爲全部的事件進行全局排序,這樣客戶端能夠經過順序號推斷事件的順序post
特色
- Zookeeper:一個領導者(leader),多個跟隨者(follower)組成的集羣。
- Leader負責進行投票的發起和決議,更新系統狀態
- Follower用於接收客戶請求並向客戶端返回結果,在選舉Leader過程當中參與投票
- 集羣中只要有半數以上節點存活,Zookeeper集羣就能正常服務。
- 全局數據一致:每一個server保存一份相同的數據副本,client不管鏈接到哪一個server,數據都是一致的。
- 更新請求順序進行,來自同一個client的更新請求按其發送順序依次執行。
- 數據更新原子性,一次數據更新要麼成功,要麼失敗。
- 實時性,在必定時間範圍內,client能讀到最新數據。
stat結構體
- czxid- 引發這個znode建立的zxid,建立節點的事務的zxid(ZooKeeper Transaction Id) 每次修改ZooKeeper狀態都會收到一個zxid形式的時間戳,也就是ZooKeeper事務ID。 事務ID是ZooKeeper中全部修改總的次序。每一個修改都有惟一的zxid,若是zxid1小於zxid2,那麼zxid1在zxid2以前發生。
- ctime - znode被建立的毫秒數(從1970年開始)
- mzxid - znode最後更新的zxid
- mtime - znode最後修改的毫秒數(從1970年開始)
- pZxid-znode最後更新的子節點zxid
- cversion - znode子節點變化號,znode子節點修改次數
- dataversion - znode數據變化號
- aclVersion - znode訪問控制列表的變化號
- ephemeralOwner- 若是是臨時節點,這個是znode擁有者的session id。若是不是臨時節點則是0。
- dataLength- znode的數據長度
- numChildren - znode子節點數量
客戶端命令行操做
命令基本語法 |
功能描述 |
help |
顯示全部操做命令 |
ls path [watch] |
使用 ls 命令來查看當前znode中所包含的內容 |
ls2 path [watch] |
查看當前節點數據並能看到更新次數等數據 |
create |
普通建立 |
-s |
含有序列 |
-e |
臨時(重啓或者超時消失) |
get path [watch] |
得到節點的值 |
set |
設置節點的具體值 |
stat |
查看節點狀態 |
delete |
刪除節點 |
rmr |
遞歸刪除節點 |