zookeeper常用客戶端命令
zookeeper 命令用於在 zookeeper 服務上執行操作。首先執行命令,打開新的 session 會話,進入終端:
sh zkCli.sh 或 sh zkCli.sh -server 127.0.0.1:2181
一、新增節點
create [-s] [-e] [-c] [-t ttl] path [data] [acl] //其中-s為有序節點 -e為臨時節點 -c為容器節點 -t指定ttl節點
1、創建持久化節點
[zk: localhost:2181(CONNECTED) 3] create /wfj "123456" Created /wfj [zk: localhost:2181(CONNECTED) 4] create /wfj1 "" Created /wfj1
2、創建持久化有序節點,此時創建的節點名為指定節點名 + 自增序號
[zk: localhost:2181(CONNECTED) 7] create -s /a "a" Created /a0000000003 [zk: localhost:2181(CONNECTED) 8] create -s /b "b" Created /b0000000004 [zk: localhost:2181(CONNECTED) 9] create -s /c "c" Created /c0000000005
3、創建臨時節點,臨時節點在會話過期后被刪除
[zk: localhost:2181(CONNECTED) 10] create -e /tmp "tmp" Created /tmp
4、創建臨時有序節點,臨時節點在會話過期后被刪除
[zk: localhost:2181(CONNECTED) 1] create -s -e /aa "aa" Created /aa0000000007 [zk: localhost:2181(CONNECTED) 2] create -s -e /bb "bb" Created /bb0000000008 [zk: localhost:2181(CONNECTED) 3] create -s -e /cc "cc" Created /cc0000000009
5、創建容器節點,當刪除掉container節點下的所有子節點后, container節點本身也會被清除掉,默認被清除的時間是60s
[zk: localhost:2181(CONNECTED) 11] create -c /container Created /container [zk: localhost:2181(CONNECTED) 12] create /container/sub1 Created /container/sub1 [zk: localhost:2181(CONNECTED) 13] create /container/sub2 Created /container/sub2 [zk: localhost:2181(CONNECTED) 14] ls -R /container /container /container/sub1 /container/sub2 [zk: localhost:2181(CONNECTED) 15] delete /container/sub1 [zk: localhost:2181(CONNECTED) 16] delete /container/sub2 [zk: localhost:2181(CONNECTED) 17] ls -R /container /container [zk: localhost:2181(CONNECTED) 18] ls -R /container Node does not exist: /container
6、創建就ttl節點 -t ,ttl節點的特性是可以創建一個打失效時間的節點,失效時間過來之后節點會被自動刪除。需要添加擴展業務,修改zkServer.sh。 -Dzookeeper.extendedTypesEnabled=true
[zk: localhost:2181(CONNECTED) 0] create -t 5000 /ttl-node ttttt Created /ttl-node
二、修改節點
通過set命令可以對節點進行修改,如下:
[zk: localhost:2181(CONNECTED) 3] set /wfj "345" [zk: localhost:2181(CONNECTED) 4] get /wfj 345 [zk: localhost:2181(CONNECTED) 5] stat /wfj cZxid = 0x54 ctime = Tue May 11 07:32:08 UTC 2021 mZxid = 0x55 mtime = Tue May 11 08:03:06 UTC 2021 pZxid = 0x54 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0
也可以基於版本號進行修改,類似於樂觀鎖機制。如果傳入的版本號dataVersion和當前版本號不一致時,zookeeper會拒絕本次修改:
[zk: localhost:2181(CONNECTED) 13] set -v 2 /wfj "123" version No is not valid : /wfj
三、刪除節點
可以用過delete命令或者delateall命令對節點進行刪除,使用delete刪除節點時,如果該節點下存在子節點,該節點不允許刪除。如果想刪除某個節點極其所有后代節點,可以使用deleteall命令進行刪除。部分老版本不支持deleteall命令,可以使用rmr path命令進行遞歸刪除。刪除節點和更新節點一樣,也可以傳入版本號,當傳入的數據版本號和當前節點的數據版本不一致時,zookeeper不會執行刪除操作。
[zk: localhost:2181(CONNECTED) 7] delete /wfj Node not empty: /wfj [zk: localhost:2181(CONNECTED) 10] deleteall /wfj [zk: localhost:2181(CONNECTED) 24] delete -v 1 /wfj version No is not valid : /wfj [zk: localhost:2181(CONNECTED) 25] delete -v 0 /wfj
四、查看節點
查看節點列表有 ls 和 ls2 兩個命令,后者時前者的增強。不近可以查看指定路徑下的所有節點,還可以查看當前節點的信息,zookeeper最新版本已經取消了對 ls2 命令的支持,提供了-s參數來取代ls2。-R參數遞歸顯示子節點,-w參數為節點設置監視,此處我們只演示ls命令。
[zk: localhost:2181(CONNECTED) 33] ls /wfj [node1] [zk: localhost:2181(CONNECTED) 34] ls -R /wfj /wfj /wfj/node1 [zk: localhost:2181(CONNECTED) 35] ls -s /wfj [node1] cZxid = 0x69 ctime = Mon May 17 10:55:29 UTC 2021 mZxid = 0x69 mtime = Mon May 17 10:55:29 UTC 2021 pZxid = 0x6a cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1 [zk: localhost:2181(CONNECTED) 36] ls -w /wfj [node1]
通過get查看節點數據,通過stat查看節點屬性。在舊版本中,通過get命令即可以同時獲取到節點屬性和節點數據。新版本也可以通過 -s 參數同時獲取節點屬性和數據,-w參數為在數據更改上做監視。
[zk: localhost:2181(CONNECTED) 38] get /wfj 123 [zk: localhost:2181(CONNECTED) 39] stat /wfj cZxid = 0x69 ctime = Mon May 17 10:55:29 UTC 2021 mZxid = 0x69 mtime = Mon May 17 10:55:29 UTC 2021 pZxid = 0x6a cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1
五、監聽器
zookeeper的具有監聽機制,注冊事件監聽器可以在節點發生變化的時候向客戶端發起通知。需要注意的是zookeeper的觸發器是一次性的,即觸發一次后立即失效。
5.1、監聽器get -w path
使用get -w path注冊的監聽器能夠在節點內容發生改變的時候,向客戶端發起通知。在舊版本的zookeeper中,注冊監聽器的方式為 get path [watch]。在注冊監聽之后,在另一個會話set修改節點數據,可以看到客戶端收到了server發來的節點變更消息
[zk: localhost:2181(CONNECTED) 45] get -w /wfj 123 [zk: localhost:2181(CONNECTED) 46] WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/wfj
5.2、監聽器stat -w path
使用stat -w path注冊的監聽器能夠在節點狀態發送改變的時候,向客戶端發起通知。在舊版本的zookeeper中,注冊監聽器的方式為 stat path [watch]。在注冊監聽之后,在另一個會話set修改節點數據,可以看到客戶端收到了server發來的節點變更消息
[zk: localhost:2181(CONNECTED) 47] stat -w /wfj cZxid = 0x69 ctime = Mon May 17 10:55:29 UTC 2021 mZxid = 0x6c mtime = Mon May 17 12:02:27 UTC 2021 pZxid = 0x6a cversion = 1 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1 [zk: localhost:2181(CONNECTED) 48] WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/wfj
5.3、監聽器ls -w path
使用ls -w path注冊的監聽器能夠監聽該節點下所有子節點的增加和刪除操作。在舊版本的zookeeper中,注冊監聽器的方式為 ls/ls2 path [watch]。在注冊監聽之后,在另一個會話刪除子節點,可以看到客戶端收到了server發來的節點變更消息
[zk: localhost:2181(CONNECTED) 49] ls -w /wfj [node1] [zk: localhost:2181(CONNECTED) 50] WATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/wfj
zookeeper常用的客戶端命令基本就這些,同時還存在這許多其他命令,但是日常會很少用到。可以登錄zookeeper客戶端之后,執行help來查看。