zookeepercli常用命令解析

zookeeper CLI

1,查看所有命令

啟動(dòng)zookeeper并使用bin目錄下的zkCli.sh連接zookeeper服務(wù)器,輸入任何zookeeper不能識(shí)別的命令,zookeeper都會(huì)列出所有可供使用的命令:

成都創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷,包括網(wǎng)站設(shè)計(jì)、做網(wǎng)站、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營(yíng)銷策劃推廣、電子商務(wù)、移動(dòng)互聯(lián)網(wǎng)營(yíng)銷等。成都創(chuàng)新互聯(lián)公司為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,成都創(chuàng)新互聯(lián)公司核心團(tuán)隊(duì)十年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗(yàn),為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。

[zk: 127.0.0.1:2184(CONNECTED) 105] k
ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history 
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit 
        getAcl path
        close 
        connect host:port
2,命令解析

創(chuàng)建節(jié)點(diǎn):
create [-s] [-e] path data acl

-s 有序節(jié)點(diǎn)

一個(gè)znode還可以設(shè)置為有序(sequential)節(jié)點(diǎn)。一個(gè)有序znode節(jié)點(diǎn)被分配唯一個(gè)單調(diào)遞增的整數(shù)。當(dāng)創(chuàng)建有序節(jié)點(diǎn)時(shí),一個(gè)序號(hào)會(huì)被追加到路徑之后。

-e 臨時(shí)節(jié)點(diǎn)

znode節(jié)點(diǎn)可以是持久(persistent)節(jié)點(diǎn),還可以是臨時(shí)(ephemeral)節(jié)點(diǎn)。持久的znode只能通過(guò)調(diào)用delete來(lái)進(jìn)行刪除。臨時(shí)的znode與之相反,當(dāng)創(chuàng)建該節(jié)點(diǎn)的客戶端崩潰或關(guān)閉了與ZooKeeper的連接時(shí),這個(gè)節(jié)點(diǎn)就會(huì)被刪除。因?yàn)榕R時(shí)的znode在其創(chuàng)建者的會(huì)話過(guò)期時(shí)被刪除,所以我們現(xiàn)在不允許臨時(shí)節(jié)點(diǎn)擁有子節(jié)點(diǎn)。

總之,znode一共有4種類型:持久的(persistent)、臨時(shí)的(ephemeral)、持久有序的(persistent_sequential)和臨時(shí)有序的(ephemeral_sequential)。

data 節(jié)點(diǎn)保存的數(shù)據(jù)

acl 權(quán)限相關(guān)內(nèi)容,暫不考慮

創(chuàng)建一個(gè)持久節(jié)點(diǎn)

[zk: 127.0.0.1:2184(CONNECTED) 7] create /test testdata
Created /test
[zk: 127.0.0.1:2184(CONNECTED) 8] ls /
[zookeeper, test]

創(chuàng)建一個(gè)臨時(shí)節(jié)點(diǎn)

[zk: 127.0.0.1:2184(CONNECTED) 9] create -e /testephemeral testdata2
Created /testephemeral
[zk: 127.0.0.1:2184(CONNECTED) 11] ls /
[zookeeper, test, testephemeral]

ctrl+c斷開與服務(wù)端連接在查看

WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2184(CONNECTED) 0] ls /
[zookeeper, test]

臨時(shí)節(jié)點(diǎn)已經(jīng)被移除了

創(chuàng)建有序節(jié)點(diǎn)

[zk: 127.0.0.1:2184(CONNECTED) 4] create -s /testsquence testdata2
Created /testsquence0000000008
[zk: 127.0.0.1:2184(CONNECTED) 5] ls /
[testsquence0000000008, zookeeper, test]

它會(huì)自動(dòng)在我們指定的path后面追加一個(gè)序列號(hào)。

節(jié)點(diǎn)狀態(tài)
stat path [watch]

watch 添加監(jiān)視器,后面再說(shuō)

列出節(jié)點(diǎn)/test的狀態(tài)

[zk: 127.0.0.1:2184(CONNECTED) 10] stat /test             
cZxid = 0x21
ctime = Wed May 08 05:43:54 CST 2019
mZxid = 0x21
mtime = Wed May 08 05:43:54 CST 2019
pZxid = 0x21
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0

屬性說(shuō)明

狀態(tài)屬性說(shuō)明
cZxid 節(jié)點(diǎn)創(chuàng)建的事務(wù)zxid。每次修改ZooKeeper狀態(tài)都會(huì)收到一個(gè)zxid形式的時(shí)間戳,也就是ZooKeeper事務(wù)ID。事務(wù)ID是ZooKeeper中所有修改總的次序。每個(gè)修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前發(fā)生。
ctime znode的創(chuàng)建時(shí)間
mzxid znode最后修改的zxid
mtime znode最后修改時(shí)間
pZxid znode最后更新的子節(jié)點(diǎn)zxid
cversion znode子節(jié)點(diǎn)變化號(hào),每變化一次就自增1
dataversion znode數(shù)據(jù)變化號(hào),數(shù)據(jù)每變化一次就自增1(每次更新讀取最新的值,可用于實(shí)現(xiàn)類似數(shù)據(jù)庫(kù)樂(lè)觀鎖功能)
aclVersion znode訪問(wèn)控制列表的變化號(hào)
ephemeralOwner 如果是臨時(shí)節(jié)點(diǎn),這個(gè)是znode擁有者的session id。如果不是臨時(shí)節(jié)點(diǎn)則是0
dataLength znode的數(shù)據(jù)長(zhǎng)度
dataLength znode子節(jié)點(diǎn)數(shù)量

查詢數(shù)據(jù)
get path [watch]

查詢節(jié)點(diǎn)/test的數(shù)據(jù)

[zk: 127.0.0.1:2184(CONNECTED) 19] get /test
testdata
cZxid = 0x21
ctime = Wed May 08 05:43:54 CST 2019
mZxid = 0x21
mtime = Wed May 08 05:43:54 CST 2019
pZxid = 0x21
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0

嗯,就是data的值加上狀態(tài)信息。

列出節(jié)點(diǎn)

ls   path [watch]
ls2 path [watch]

列出根節(jié)點(diǎn)信息

[zk: 127.0.0.1:2184(CONNECTED) 0] ls /
[testsquence0000000008, zookeeper, test]
[zk: 127.0.0.1:2184(CONNECTED) 1] ls2 /
[testsquence0000000008, zookeeper, test]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x25
cversion = 15
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 3

ls2 想當(dāng)于在ls的基礎(chǔ)上加上了當(dāng)前節(jié)點(diǎn)的狀態(tài)信息。

設(shè)置數(shù)據(jù)
set path data [version]

data 要設(shè)置的數(shù)據(jù)

version 數(shù)據(jù)版本號(hào),當(dāng)指定的版本號(hào)與節(jié)點(diǎn)當(dāng)前數(shù)據(jù)版本號(hào)相同時(shí)才設(shè)置

設(shè)置節(jié)點(diǎn)/test數(shù)據(jù)為newdata

[zk: 127.0.0.1:2184(CONNECTED) 33] set /test newdata
cZxid = 0x21
ctime = Wed May 08 05:43:54 CST 2019
mZxid = 0x28
mtime = Wed May 08 06:40:59 CST 2019
pZxid = 0x21
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0
[zk: 127.0.0.1:2184(CONNECTED) 34] get /test        
newdata
cZxid = 0x21
ctime = Wed May 08 05:43:54 CST 2019
mZxid = 0x28
mtime = Wed May 08 06:40:59 CST 2019
pZxid = 0x21
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

有沒(méi)有發(fā)現(xiàn)dataVersion從0變成了1,這個(gè)就是和最后一個(gè)參數(shù)version關(guān)聯(lián)的。

指定一個(gè)錯(cuò)誤的version更新數(shù)據(jù)

[zk: 127.0.0.1:2184(CONNECTED) 59] set /test nnn  0
version No is not valid : /test

失敗......

我們用正確的試試

[zk: 127.0.0.1:2184(CONNECTED) 61] set /test nnn  1                                   
cZxid = 0x21
ctime = Wed May 08 05:43:54 CST 2019
mZxid = 0x2a
mtime = Wed May 08 06:46:12 CST 2019
pZxid = 0x21
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

成功了,然后dataVersion又從1變成了2

刪除節(jié)點(diǎn)

delete path [version]
rmr path

version : 版本號(hào),和set命令一樣中的意思一樣,版本相同才能刪。

delete和rmr的不同之處是在有子節(jié)點(diǎn)的情況下delete不能刪除,而rmr可以級(jí)聯(lián)刪除子節(jié)點(diǎn)。

使用delete刪除/test

[zk: 127.0.0.1:2184(CONNECTED) 73] delete /test                                
[zk: 127.0.0.1:2184(CONNECTED) 74] ls /
[testsquence0000000008, zookeeper]

使用delete刪除一個(gè)有子節(jié)點(diǎn)的試試

[zk: 127.0.0.1:2184(CONNECTED) 77] create /test tt                   
Created /test
[zk: 127.0.0.1:2184(CONNECTED) 78] create /test/child tt
Created /test/child
[zk: 127.0.0.1:2184(CONNECTED) 80] delete /test
Node not empty: /test

是的,不能刪除有子節(jié)點(diǎn)的

使用rmr刪除有子節(jié)點(diǎn)的/test試試

[zk: 127.0.0.1:2184(CONNECTED) 85] rmr /test            
[zk: 127.0.0.1:2184(CONNECTED) 86] ls /
[testsquence0000000008, zookeeper]

刪除成功

watch用法

Watch機(jī)制: 一個(gè)zk的節(jié)點(diǎn)可以被監(jiān)控,包括這個(gè)目錄中存儲(chǔ)的數(shù)據(jù)的修改,子節(jié)點(diǎn)目錄的變化,一旦變化可以通知設(shè)置監(jiān)控的客戶端,這個(gè)功能是zookeeper對(duì)于應(yīng)用最重要的特性,通過(guò)這個(gè)特性可以實(shí)現(xiàn)的功能包括配置的集中管理,集群管理,分布式鎖等等。一個(gè)Watch事件是一個(gè)一次性的觸發(fā)器,當(dāng)被設(shè)置了Watch的數(shù)據(jù)發(fā)生了改變的時(shí)候,則服務(wù)器將這個(gè)改變發(fā)送給設(shè)置了Watch的客戶端。

通過(guò)ls對(duì)節(jié)點(diǎn)/test創(chuàng)建一個(gè)watch

[zk: 127.0.0.1:2184(CONNECTED) 92] ls /test mywatch
[zk: 127.0.0.1:2184(CONNECTED) 94] delete /test

WATCHER::

WatchedEvent state:SyncConnected type:NodeDeleted path:/test

當(dāng)刪除該節(jié)點(diǎn)時(shí)我們收到了通知

標(biāo)題名稱:zookeepercli常用命令解析
網(wǎng)站路徑:http://bm7419.com/article26/jjehcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、微信公眾號(hào)、App設(shè)計(jì)、云服務(wù)器、手機(jī)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)