啟動(dòng)zookeeper并使用bin目錄下的zkCli.sh連接zookeeper服務(wù)器,輸入任何zookeeper不能識(shí)別的命令,zookeeper都會(huì)列出所有可供使用的命令:
創(chuàng)新互聯(lián)建站主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)視覺(jué)設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站程序開(kāi)發(fā)、HTML5響應(yīng)式網(wǎng)站建設(shè)、手機(jī)網(wǎng)站開(kāi)發(fā)、微商城、網(wǎng)站托管及網(wǎng)站維護(hù)公司、WEB系統(tǒng)開(kāi)發(fā)、域名注冊(cè)、國(guó)內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測(cè)試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為服務(wù)器托管行業(yè)客戶提供了網(wǎng)站推廣服務(wù)。[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)
一個(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斷開(kāi)與服務(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í)我們收到了通知
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。