2.znode操作&型別&結構
阿新 • • 發佈:2022-03-31
目錄
節點操作
通過./zkCli.sh進入
建立節點
create /name1
#建立一個節點name
create /name1/name1-1
#在name1節點下建立name1-1
檢視節點
ls /
#檢視根節點,根據根節點再查其他的節點
刪除節點
方式一:非樂觀鎖
delete /節點名稱
#刪除空節點,節點不為空則刪除失敗
deleteall /節點名稱
#刪除節點,包括節點下所有資料
方式二:樂觀鎖
-
檢視版本號
#1.建立一個節點 [zk: localhost:2181(CONNECTED) 20] create /versionNode Created /versionNode #2.檢視節點元資料,觀察dataVersion當前版本 [zk: localhost:2181(CONNECTED) 21] get -s /versionNode . . dataVersion = 0 . . #3.在節點下建立一個節點 [zk: localhost:2181(CONNECTED) 22] set /versionNode n1 #4.再次檢視節點元資料,觀察dataVersion當前版本 [zk: localhost:2181(CONNECTED) 23] get -s /versionNode . . dataVersion = 1 . . #版本變了
-
根據版本號刪除
delete -v 1 /versionNode #通過-v 1新增版本號,當dataVersion ==輸入值時,才會刪除
節點下新增資料
節點建立時新增
create /val-node val
節點建立後新增
set /val-node val
獲得新增的資料
get /val-node
獲得節點下所有的子節點(遞迴查詢)
ls -R /node2
znode結構
Znode 是 ZooKeeper 中資料的最小單元,每個 Znode 都兼具檔案和目錄兩種特點,既能像檔案一樣儲存和維護資料,又可以由一系列使用斜槓(/)進行分割的方式作為路徑標識的一部分。每個 Znode 都有以下三部分組成。
- Stat:狀態資訊,用於儲存該 Znode 的版本、許可權、時間戳等資訊;
- Data:實際儲存的資料;
- Children:對子節點的資訊描述;
需要特別說明的是,Znode 節點雖然可以儲存資料資訊,但它並不能像資料庫那樣儲存大量的資料,Znode 的設計初衷就是儲存分散式應用中的配置檔案、叢集狀態等元資料資訊。
名稱 | 簡寫 | 許可權說明 |
---|---|---|
CREATE | c | 允許建立當前節點下的位元組點 |
DELETE | d | 允許刪除當前節點下的子節點,僅限下一級 |
READ | r | 允許讀取節點資料以及顯示子節點的列表 |
WRITE | w | 允許設定當前節點的資料 |
ADMIN | a | 管理員許可權,允許設定或讀取當前節點的許可權列表 |
節點元資料
通過命令 get -s /node2 可得到節點元資料
[a1] #節點存的值
cZxid = 0xe #建立資料節點時的事務ID
ctime = Wed Mar 16 14:09:00 CST 2022 #建立資料節點時的時間
mZxid = 0xe #最後一次修改資料節點時的事務ID
mtime = Wed Mar 16 14:09:00 CST 2022 #最後一次修改資料節點時的時間
pZxid = 0xf #表示該資料節點的子節點列表最後一次修改的事務ID,新增子節點或刪除子節點就會影響子節點列表,但是修改子節點的資料內容則不影響該ID(注意,只有子節點列表變更了才會變更pzxid,子節點內容變更不會影響pzxid)
cversion = 1 #子節點版本號(子節點的更改次數),子節點每次修改版本號加1
dataVersion = 0 #資料版本號(節點資料的更改次數),資料每次修改該版本號加1
aclVersion = 0 #許可權版本號(節點的 ACL 的更改次數),許可權每次修改該版本號加1
ephemeralOwner = 0x0 #建立該臨時節點的會話的sessionID。(如果該節點是持久節點,那麼這個屬性值為0)
dataLength = 3 #節點的資料長度
numChildren = 1 #節點擁有子節點的數量(只統計直接子節點的數量)
znode型別
持久節點
create /node1
#create 不帶引數,預設是持久節點,不可重複
持久自增節點
應用:分散式鎖
create -s /num/lock
#序號自增 ,允許節點重複,後面新增0001,00002序號自增
臨時節點
應用:服務註冊發現
原理:zk客戶端會給zk伺服器發心跳,當客戶端掛了,心跳停了,那節點也就沒了
create -e /temp
臨時序號節點
create -e -s /temp-num
Container節點(容器節點)
當節點下沒有任何子節點,會被zk定期刪除(60秒)
create -c /c-node
TTL節點
需要在配置檔案中新增extendedTypesEnabled=true,然後重啟zookeeper
create -t 5 /ttl-node