其他更多java基礎文章:
java基礎學習(目錄)
概述
Zookeeper是一個開源的分散式的,為分散式應用提供協調服務的Apache專案。
Zookeeper從設計模式角度來理解:是一個基於觀察者模式設計的分散式服務管理框架,它負責儲存和管理大家都關心的資料,然後接受觀察者的註冊,一旦這些資料的狀態發生變化,Zookeeper就將負責通知已經在Zookeeper上註冊的那些觀察者做出相應的反應,從而實現叢集中類似Master/Slave管理模式
Zookeeper=檔案系統+通知機制
基礎
資料結構
ZooKeeper資料模型的結構與Unix檔案系統很類似,zookeeper叢集自身維護了一套資料結構。這個儲存結構是一個樹形結構,其上的每一個節點,我們稱之為"znode",每一個znode預設能夠儲存1MB的資料,每個ZNode都可以通過其路徑唯一標識。
節點型別
-
Znode有兩種型別:
- 短暫(ephemeral):客戶端和伺服器端斷開連線後,建立的節點自己刪除
- 持久(persistent):客戶端和伺服器端斷開連線後,建立的節點不刪除
-
Znode有四種形式的目錄節點(預設是persistent )
- 持久化目錄節點(PERSISTENT)
客戶端與zookeeper斷開連線後,該節點依舊存在 - 持久化順序編號目錄節點(PERSISTENT_SEQUENTIAL)
客戶端與zookeeper斷開連線後,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號 - 臨時目錄節點(EPHEMERAL)
客戶端與zookeeper斷開連線後,該節點被刪除 - 臨時順序編號目錄節點(EPHEMERAL_SEQUENTIAL)
客戶端與zookeeper斷開連線後,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號
- 持久化目錄節點(PERSISTENT)
-
建立znode時設定順序標識,znode名稱後會附加一個值,順序號是一個單調遞增的計數器,由父節點維護
-
在分散式系統中,順序號可以被用於為所有的事件進行全域性排序,這樣客戶端可以通過順序號推斷事件的順序
特點
- 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 | 遞迴刪除節點 |