1. 程式人生 > 其它 >2.znode操作&型別&結構

2.znode操作&型別&結構

目錄

節點操作

通過./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