1. 程式人生 > >zkCli使用手冊

zkCli使用手冊

zkClient命令筆記




connect host:port 連線到其他的zk伺服器,例:connect 192.168.174.222:2181
-------------------------------------------------------------------------------------------------------
get path [watch] 獲取某個節點的資料,如果加上watch引數,那麼當這個節點內的資料發生變化的時候就會收到通知
例:直接獲取
[zk: localhost:2181(CONNECTED) 2] get /mpcapp/mpc3
789
cZxid = 0x4a00000057//建立時候的id
ctime = Wed Nov 30 15:32:16 CST 2016//建立時間
mZxid = 0x4a00000057//修改時候的id
mtime = Wed Nov 30 15:32:16 CST 2016//修改時間
pZxid = 0x4a00000057//持久化version
cversion = 0//建立時候的version
dataVersion = 0//修改後的version,每次修改這個version都會改變,剛建立的時候和cversion一樣
aclVersion = 0//###########################################
ephemeralOwner = 0x0//是否是永久的(有永久節點和臨時節點之分)
dataLength = 3//資料的長度
numChildren = 0//子節點數量
例:獲取的時候帶上watch引數,這時候改變引數的內容(通過另外一個客戶端)
[zk: localhost:2181(CONNECTED) 4] get /mpcapp/mpc3 watch
789
cZxid = 0x4a00000057
ctime = Wed Nov 30 15:32:16 CST 2016
mZxid = 0x4a00000057
mtime = Wed Nov 30 15:32:16 CST 2016
pZxid = 0x4a00000057
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
如上,首先返回了資料,這時候在另一個客戶端改變內容
WATCHER::


WatchedEvent state:SyncConnected type:NodeDataChanged path:/mpcapp/mpc3
打印出了內容改變的事件,這就是zookeeper給我們提供的監聽功能了。
---------------------------------------------------------------------------------------------------------------------------------------


ls path [watch] 列出某個節點的子節點,如果加上watch,那麼監聽該節點的子節點的變化,比如多一個子節點,少了一個子節點的事件都會被監聽到
例:直接列出某個節點的子節點
[zk: localhost:2181(CONNECTED) 5] ls /mpcapp
[mpc3]
例:加上watch引數
[zk: localhost:2181(CONNECTED) 6] ls /mpcapp watch
[mpc3]
然後給目錄下面增加一個節點
[zk: localhost:2181(CONNECTED) 7] 
WATCHER::


WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/mpcapp
打印出了子節點改變事件。 需要注意的是,在get和ls中使用watch的話永遠只註冊一次監聽,也就是說內容改變一次後或者子節點改變一次後監聽到了事件,在發生改變的話就不能監聽到事件了
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
set path data [version] 修改某個節點的資料,這個version引數是指你要修改的節點的資料的當前的version也就是dataVersion,如果兩個version不一致會報錯
例:[zk: localhost:2181(CONNECTED) 1] set /mpcapp/mpc2 aaa
cZxid = 0x4a0000005e
ctime = Wed Nov 30 16:06:07 CST 2016
mZxid = 0x4a00000064
mtime = Wed Nov 30 16:11:54 CST 2016
pZxid = 0x4a0000005e
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
例:加上version
[zk: localhost:2181(CONNECTED) 4] set /mpcapp/mpc2 aaa 1
cZxid = 0x4a0000005e
ctime = Wed Nov 30 16:06:07 CST 2016
mZxid = 0x4a00000067
mtime = Wed Nov 30 16:14:07 CST 2016
pZxid = 0x4a0000005e
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
剛才修改過一次,資料的dataVersion是1,所以在呼叫命令的時候也用1
-----------------------------------------------------------------------
rmr path 刪除某個節點,並刪除該節點下的所有子節點
-------------------------------------------------------------------------------------
setquota -n|-b val path 為某個節點設定配額(所謂的配額是指該節點的最大子節點數n,或者該節點的最大資料值的長度v) val就是要設定的配額的值
例:設定子節點最大數
[zk: localhost:2181(CONNECTED) 6] setquota -n 2 /mpcapp
Comment: the parts are option -n val 2 path /mpcapp
例:設定資料最大長度
[zk: localhost:2181(CONNECTED) 20] setquota -b 100 /mpcapp     
Comment: the parts are option -b val 100 path /mpcapp
#這裡遇到的問題是,一個節點只能設定n或者b不能同時設定n和b;設定了n的話b為-1,設定了b的話n為-1;待查明原因
#這裡設定了最大值以後,設定超過最大值的子節點數量或者資料長度也能夠新增成功,但是會在但是會在${dataDir}/zookeeper.out中記錄警告資訊


---------------------------------------------------------------------------------
listquota path 列出指定節點的最大值限制
例:[zk: localhost:2181(CONNECTED) 23] listquota /mpcapp           
absolute path is /zookeeper/quota/mpcapp/zookeeper_limits
Output quota for /mpcapp count=-1,bytes=100
Output stat for /mpcapp count=3,bytes=9
-------------------------------------------------------------------------------------


delquota [-n|-b] path 刪除指定節點的子節點最大值或者資料長度最大值
--------------------------------------------------------------------------------------------
quit 退出
-----------------------------------------------------------------------------
printwatches on|off 這個命令執行不了,不知道為什麼
------------------------------------------------------------------------------------------
create [-s] [-e] path data acl 建立一個節點,帶-s那麼這是一個臨時節點,在斷開連線後就銷燬,-e就會給建立的節點上面加上序列號(每個目錄有自己獨立的序列號) path是節點的路徑 data是節點的值
acl是節點的許可權控制


許可權主要有:
CREATE : 建立子節點
READ : 獲取節點資料和子節點列表
WRITE : 更新節點資料
DELETE : 刪除子節點
ADMIN : 設定節點ACL的許可權


與授權相關的幾個概念:
shchema:許可權模式,有IP和digest兩種
ID:授權物件 
schema為IP時,該值為具體的IP地址
scheme為digest時,該值為 userName:base64(sha1(userName:password))
zookeeper的javaAPI提供了一個工具類org.apache.zookeeper.server.auth.DigestAuthenticationProvider 可以快速生成加密的密文
permission:許可權,指的就是上面所說的五種許可權
最終的組合為: schema + ID + permission


例:建立節點
[zk: localhost:2181(CONNECTED) 31] create /mpcapp/mpc4 123
Created /mpcapp/mpc4
這個節點是永久的,斷開連線也不會刪除
例:建立臨時節點//臨時節點是不能有子節點的
[zk: localhost:2181(CONNECTED) 32] create -e /mpcapp/mpc5 555555
Created /mpcapp/mpc5
例:建立序號節點
[zk: localhost:2181(CONNECTED) 33] create -s /mpcapp/mpc6 55555544
Created /mpcapp/mpc60000000006
[zk: localhost:2181(CONNECTED) 34] create -s /mpcapp/mpc7 55555544
Created /mpcapp/mpc70000000007
[zk: localhost:2181(CONNECTED) 35] 
例:建立帶有許可權的節點
[zk: localhost:2181(CONNECTED) 35] create /mpcapp/mpc8  88888 ip:192.168.174.139:crwda
Created /mpcapp/mpc8


[zk: localhost:2181(CONNECTED) 37] create /mpcapp/mpc9 99999 digest:hylexus:f4Myrgy6YlaWdo4lvv///2jgEDI=:crwad   
Created /mpcapp/mpc9
----------------------------------------------------------------------------------------------------------------------------------


stat path [watch] 檢視某個節點的狀態資訊 加上watch引數後就會監聽狀態改變
例:
[zk: localhost:2181(CONNECTED) 38] stat /mpcapp
cZxid = 0x4a00000054
ctime = Wed Nov 30 15:31:01 CST 2016
mZxid = 0x4a00000054
mtime = Wed Nov 30 15:31:01 CST 2016
pZxid = 0x4a0000007d
cversion = 12
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 8


--------------------------------------------------------------------------------------
close 關閉連線,一般退出的時候先關閉連線,然後quit


----------------------------------------------------------------------------------------


ls2 path [watch] 和ls用法功能一樣,唯一的區別就是列出子節點的同時列出了該節點的狀態資訊


----------------------------------------------------------------------------------------------


history 列出命令歷史
----------------------------------------------------------------------------------------------------------
redo cmdno 該命令可以重新執行指定命令編號的歷史命令,命令編號可以通過history檢視
----------------------------------------------------------------------------------------
getAcl path 獲取某個節點的授權資訊
例:
[zk: mpc6:2181(CONNECTED) 48] getAcl /mpcapp/mpc8
'ip,'192.168.174.139
: cdrwa


[zk: mpc6:2181(CONNECTED) 49] getAcl /mpcapp/mpc9
'digest,'hylexus:f4Myrgy6YlaWdo4lvv///2jgEDI=
: cdrwa


----------------------------------------------------------
setAcl path acl 設定某個節點的授權資訊
例:
[zk: localhost:2181(CONNECTED) 0] setAcl /mpcapp/mpc2 digest:hylexus:f4Myrgy6YlaWdo4lvv///2jgEDI=:crwad 
cZxid = 0x4a0000005e
ctime = Wed Nov 30 16:06:07 CST 2016
mZxid = 0x4a00000068
mtime = Wed Nov 30 16:14:17 CST 2016
pZxid = 0x4a0000005e
cversion = 0
dataVersion = 3
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 3
-------------------------------------------------------------------------------------------
delete path [version] 刪除一個節點,該節點下不能有子節點;version的就是指定dataVersion不一致不能刪除


-----------------------------------------------------------------------------------------------------------------


addauth scheme auth 
    schema:可取ip或digest
    auth
        schema==digest時為 userName:password
        schema==ip時為
------------------------------------------------------------------------------
sync path 立刻在伺服器之間同步資訊(個人理解是這樣的,還沒有確定)