重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
啟動zookeeper并使用bin目錄下的zkCli.sh連接zookeeper服務(wù)器,輸入任何zookeeper不能識別的命令,zookeeper都會列出所有可供使用的命令:
成都創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括網(wǎng)站設(shè)計、做網(wǎng)站、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動互聯(lián)網(wǎ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
創(chuàng)建節(jié)點(diǎn):create [-s] [-e] path data acl
-s
有序節(jié)點(diǎn)
一個znode還可以設(shè)置為有序(sequential)節(jié)點(diǎn)。一個有序znode節(jié)點(diǎn)被分配唯一個單調(diào)遞增的整數(shù)。當(dāng)創(chuàng)建有序節(jié)點(diǎn)時,一個序號會被追加到路徑之后。
-e
臨時節(jié)點(diǎn)
znode節(jié)點(diǎn)可以是持久(persistent)節(jié)點(diǎn),還可以是臨時(ephemeral)節(jié)點(diǎn)。持久的znode只能通過調(diào)用delete來進(jìn)行刪除。臨時的znode與之相反,當(dāng)創(chuàng)建該節(jié)點(diǎn)的客戶端崩潰或關(guān)閉了與ZooKeeper的連接時,這個節(jié)點(diǎn)就會被刪除。因?yàn)榕R時的znode在其創(chuàng)建者的會話過期時被刪除,所以我們現(xiàn)在不允許臨時節(jié)點(diǎn)擁有子節(jié)點(diǎn)。
總之,znode一共有4種類型:持久的(persistent)、臨時的(ephemeral)、持久有序的(persistent_sequential)和臨時有序的(ephemeral_sequential)。
data
節(jié)點(diǎn)保存的數(shù)據(jù)
acl
權(quán)限相關(guān)內(nèi)容,暫不考慮
創(chuàng)建一個持久節(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)建一個臨時節(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]
臨時節(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]
它會自動在我們指定的path后面追加一個序列號。
節(jié)點(diǎn)狀態(tài)stat path [watch]
watch
添加監(jiān)視器,后面再說
列出節(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
屬性說明
狀態(tài)屬性 | 說明 |
---|---|
cZxid | 節(jié)點(diǎn)創(chuàng)建的事務(wù)zxid。每次修改ZooKeeper狀態(tài)都會收到一個zxid形式的時間戳,也就是ZooKeeper事務(wù)ID。事務(wù)ID是ZooKeeper中所有修改總的次序。每個修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前發(fā)生。 |
ctime | znode的創(chuàng)建時間 |
mzxid | znode最后修改的zxid |
mtime | znode最后修改時間 |
pZxid | znode最后更新的子節(jié)點(diǎn)zxid |
cversion | znode子節(jié)點(diǎn)變化號,每變化一次就自增1 |
dataversion | znode數(shù)據(jù)變化號,數(shù)據(jù)每變化一次就自增1(每次更新讀取最新的值,可用于實(shí)現(xiàn)類似數(shù)據(jù)庫樂觀鎖功能) |
aclVersion | znode訪問控制列表的變化號 |
ephemeralOwner | 如果是臨時節(jié)點(diǎn),這個是znode擁有者的session id。如果不是臨時節(jié)點(diǎn)則是0 |
dataLength | znode的數(shù)據(jù)長度 |
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ù)版本號,當(dāng)指定的版本號與節(jié)點(diǎn)當(dāng)前數(shù)據(jù)版本號相同時才設(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
有沒有發(fā)現(xiàn)dataVersion從0變成了1,這個就是和最后一個參數(shù)version
關(guān)聯(lián)的。
指定一個錯誤的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
: 版本號,和set命令一樣中的意思一樣,版本相同才能刪。
delete和rmr的不同之處是在有子節(jié)點(diǎn)的情況下delete不能刪除,而rmr可以級聯(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刪除一個有子節(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ī)制: 一個zk的節(jié)點(diǎn)可以被監(jiān)控,包括這個目錄中存儲的數(shù)據(jù)的修改,子節(jié)點(diǎn)目錄的變化,一旦變化可以通知設(shè)置監(jiān)控的客戶端,這個功能是zookeeper對于應(yīng)用最重要的特性,通過這個特性可以實(shí)現(xiàn)的功能包括配置的集中管理,集群管理,分布式鎖等等。一個Watch事件是一個一次性的觸發(fā)器,當(dāng)被設(shè)置了Watch的數(shù)據(jù)發(fā)生了改變的時候,則服務(wù)器將這個改變發(fā)送給設(shè)置了Watch的客戶端。
通過ls對節(jié)點(diǎn)/test創(chuàng)建一個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)時我們收到了通知