zookeeper 基礎使用
阿新 • • 發佈:2022-05-06
一、 下載 zookeeper , 網址 https://zookeeper.apache.org/releases.html
二、 解壓後,複製建立配置檔案
在 conf 目錄下有一個 zoo_sample.cfg 的示例,
cp zoo_sample.cfg zoo.cfg
三、啟動服務端
./bin/zkServer.sh start ./conf/zoo.cfg
-- 執行結果啟動成功
zb:zookeeper-3.7.0 zhangbin-beijing$ ./bin/zkServer.sh start ./conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: ./conf/zoo.cfg
Starting zookeeper ... STARTED
四、啟動客戶端
./bin/zkClient.sh -server 127.0.0.1:2181
-- 執行結果
[zk: 127.0.0.1:2181(CONNECTED) 0]
五、 使用 help 檢視命令
[zk: 127.0.0.1:2181(CONNECTED) 0] help ZooKeeper -server host:port -client-configuration properties-file cmd args addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE addauth scheme auth close config [-c] [-w] [-s] connect host:port create [-s] [-e] [-c] [-t ttl] path [data] [acl] delete [-v version] path deleteall path [-b batch size] delquota [-n|-b|-N|-B] path get [-s] [-w] path getAcl [-s] path getAllChildrenNumber path getEphemerals path history listquota pathls [-s] [-w] [-R] path printwatches on|off quit reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*] redo cmdno removewatches path [-c|-d|-a] [-l] set [-s] [-v version] path data setAcl [-s] [-v version] [-R] path acl setquota -n|-b|-N|-B val path stat [-w] path sync path version whoami
服務和客戶端都啟動成功後, 我們就可以來看看一些簡單的操作了
一、持久化節點
1.1、 建立 zookeeper 節點命令
create [‐s] [‐e] [‐c] [‐t ttl] path [data] [acl] /* 中括號為可選項,沒有則預設建立持久化節點 -s: 順序節點 -e: 臨時節點 -c: 容器節點 -t: 可以給節點新增過期時間,預設禁用,需要通過系統引數啟用 節點使用絕對路徑 */ create /test-node som-data
1.2、檢視節點, 修改節點
set /test-node hello get -s /test-node // -s 檢視並且帶狀態 stat /teset-node //檢視狀態
[zk: 127.0.0.1:2181(CONNECTED) 11] get -s /test-node hello //值 cZxid = 0x2 //建立 znode 的事務ID ctime = Fri May 06 11:36:30 CST 2022 //znode建立時間 mZxid = 0x3 //最後修改znode的事務ID mtime = Fri May 06 11:36:55 CST 2022 //znode最近修改時間 pZxid = 0x2 //最後新增或刪除子節點的事務ID cversion = 0 //znode的子節點結果集版本 dataVersion = 1 //znode的當前資料版本 aclVersion = 0 //znode的 ACL 版本 ephemeralOwner = 0x0 //znode是臨時node時,表示znode所有者的session ID, 如果不是臨時node,則欄位為0 dataLength = 5 //znode資料欄位的長度 numChildren = 0 //znode的子znode 的數量
1.3、 根據 dataVersion 版本號實現樂觀鎖
//先對/test-node 進行修改,資料版本變為2 set /test-node hello world //再指定在版本1的基礎上進行修改 [zk: 127.0.0.1:2181(CONNECTED) 13] set -v 1 /test-node lockstat version No is not valid : /test-node //修改失敗,重試在版本2的基礎上修改,成功 [zk: 127.0.0.1:2181(CONNECTED) 14] set -v 2 /test-node lockstat [zk: 127.0.0.1:2181(CONNECTED) 15] get /test-node lockstat
1.4、 檢視節點
ls /test-node ls -R /
二、臨時節點
2.1、 建立臨時節點, 臨時節點不能建立子節點
create -e /ephemeral data
get /ephemeral
set /ephemeral hello
2.2、 建立順序節點 -s , 建立臨時順序節點再加 -e
create /seq-parent data //為了分類,建立一個父節點 create -s /seq-parent/ data //順序節點遞增 -> Created /seq-parent/0000000000 get /seq-parent/0000000000 -> data
create -s /seq-parent/x seq-data //帶字首的書序節點
-> Created /seq-parent/x0000000001
create -s /seq-parent/y seq-data
-> Created /seq-parent/y0000000002
三、容器節點
3.1、 建立容器節點
容器節點主要用來容納位元組點,如果沒有給其建立子節點,容器節點表現和持久化節點一樣,如果給容器節點建立了子節點,後續又把子節點清空,容器節點也會被zookeeper刪除。create -c /container
四、事件監聽機制
針對節點的監聽:一定事件觸發,對應的註冊立刻被移除,所以事件監聽是一次性的get -w /path //註冊監聽的同時獲取資料 stat -w /path //對節點進行監聽,且獲取元資料資訊
ls -R -w /path //-R區分大小寫, 一定用大寫, 針對遞迴子目錄的監聽,每個目錄的監聽是一次性的,但是child1 和 child2 是兩個監聽,觸發完 child1 後child1失效,但還可以觸發child2
create /path get -w /path set /path /root -> WATCHER:: -> WatchedEvent state:SyncConnected type:NodeDataChanged path:/pathZookeeper事件型別: None: 連線建立事件 NodeCreated: 節點建立 NodeDeleted: 節點刪除 NodeDataChanged:節點資料變化 NodeChildrenChanged:子節點列表變化 DataWatchRemoved:節點監聽被移除 ChildWatchRemoved:子節點監聽被移除