Zookeeper具有命令行界面(CLI)拒课,用于和ZooKeeper服務(wù)器集群的簡單交互,有助于調(diào)試和解決問題事示。要想使用ZooKeeper CLI早像,首先需要有運(yùn)行著的ZooKeeper服務(wù)器(可通過bin/zkServer運(yùn)行),然后運(yùn)行ZooKeeper客戶端肖爵。一旦客戶端成功連接服務(wù)端卢鹦,就可以使用以下命令對ZooKeeper進(jìn)行操作。
常用命令
1.創(chuàng)建節(jié)點(diǎn)
使用create命令劝堪,可以創(chuàng)建一個ZooKeeper節(jié)點(diǎn)冀自,
create [-s] [-e] path data acl
其中揉稚,-s 和 -e用來指定節(jié)點(diǎn)屬性,順序或臨時節(jié)點(diǎn)凡纳,若不指定-e窃植,則表示持久節(jié)點(diǎn);acl為權(quán)限控制荐糜。
1.1創(chuàng)建順序節(jié)點(diǎn)
使用 create -s /zk-sequence 123 命令 創(chuàng)建zk-sequence順序節(jié)點(diǎn)
可以看到zk-sequence節(jié)點(diǎn)后面自動添加了一串?dāng)?shù)字
1.2創(chuàng)建臨時節(jié)點(diǎn)
使用create -e /zk-temp 123 命令創(chuàng)建zk-temp臨時節(jié)點(diǎn)
臨時節(jié)點(diǎn)在客戶端會話結(jié)束后巷怜,就會自動刪除,使用quit退出客戶端
再使用客戶端連接服務(wù)端暴氏,并使用ls /命令查看根目錄下的節(jié)點(diǎn)
可以看到臨時節(jié)點(diǎn)zk-temp已經(jīng)消失了延塑。
2.讀取節(jié)點(diǎn)
讀取節(jié)點(diǎn)可以通過ls 和 get命令,ls命令可以列出ZooKeeper指定節(jié)點(diǎn)下的第一級的所有子節(jié)點(diǎn)答渔;get命令可以獲取ZooKeeper指定節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容和屬性信息关带。
若獲取根節(jié)點(diǎn)下面的所有子節(jié)點(diǎn),使用ls / 命令即可 前文已經(jīng)用過了沼撕。
若想要獲取某個節(jié)點(diǎn)數(shù)據(jù)內(nèi)容 和 元數(shù)據(jù)(描述性信息)宋雏,使用get / 命令即可,如獲取前文創(chuàng)建的順序節(jié)點(diǎn)
3.更新節(jié)點(diǎn)
使用set命令可以更新指定節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容务豺,用法如下
set path data [version]
針對上面讀取的同一個節(jié)點(diǎn)磨总,更新節(jié)點(diǎn)后,可以看到dataVersion由0變?yōu)榱?
并且可以看到此節(jié)點(diǎn)的內(nèi)容數(shù)據(jù)由原來的“123”變?yōu)榱恕癲ata-update”
4.刪除節(jié)點(diǎn)
delete /path 刪除節(jié)點(diǎn)笼沥。
rmr /path? 刪除節(jié)點(diǎn)及子節(jié)點(diǎn)蚪燕。
可以看到 FirstZnode0000000001節(jié)點(diǎn)已經(jīng)被刪除。
總結(jié)概念
至此奔浅,對于ZooKeeper基本對象Znode節(jié)點(diǎn)和層次命名空間馆纳,我們已經(jīng)有了概念。
ZooKeeper提供的命名空間更像一個標(biāo)準(zhǔn)的文件系統(tǒng)汹桦。名稱是被“/”分割開的路徑元素序列鲁驶。ZooKeeper中的每個節(jié)點(diǎn)由路徑進(jìn)行唯一標(biāo)識。
不像標(biāo)準(zhǔn)的文件系統(tǒng)营勤,ZooKeeper命名空間中的每個Znode節(jié)點(diǎn)都有與之相關(guān)的內(nèi)容數(shù)據(jù)以及子節(jié)點(diǎn)灵嫌。它就像一個允許Znode既是文件同時也是目錄的文件系統(tǒng)。(ZooKeeper用來存儲協(xié)調(diào)數(shù)據(jù):狀態(tài)信息葛作、配置、位置信息等猖凛,每個節(jié)點(diǎn)存儲的數(shù)據(jù)通常是很小的赂蠢,以字節(jié)為單位。)我們使用術(shù)語Znode來稱呼ZooKeeper的節(jié)點(diǎn)辨泳。
Znode保有一個stat的結(jié)構(gòu)虱岂,包含了 數(shù)據(jù)修改的版本號玖院,ACL的變化,和時間戳信息 用來做緩存驗(yàn)證和協(xié)調(diào)更新第岖。每次znode的數(shù)據(jù)變化难菌,版本號的增加。舉個例子蔑滓,當(dāng)一個客戶端檢索數(shù)據(jù)郊酒,它也會收到數(shù)據(jù)的版本信息。
czxid. 節(jié)點(diǎn)創(chuàng)建時的zxid.
mzxid. 節(jié)點(diǎn)最新一次更新發(fā)生時的zxid.
ctime. 節(jié)點(diǎn)創(chuàng)建時的時間戳.
mtime. 節(jié)點(diǎn)最新一次更新發(fā)生時的時間戳.
dataVersion. 節(jié)點(diǎn)數(shù)據(jù)的更新次數(shù).
cversion. 其子節(jié)點(diǎn)的更新次數(shù).
aclVersion. 節(jié)點(diǎn)ACL(授權(quán)信息)的更新次數(shù).
ephemeralOwner. 如果該節(jié)點(diǎn)為臨時節(jié)點(diǎn), ephemeralOwner值表示與該節(jié)點(diǎn)綁定的session id. 如果該節(jié)點(diǎn)不是臨時節(jié)點(diǎn), ephemeralOwner值為0. 至于什么是臨時節(jié)點(diǎn), 請看前后的講述.
dataLength. 節(jié)點(diǎn)數(shù)據(jù)的字節(jié)數(shù).
numChildren. 子節(jié)點(diǎn)個數(shù).
znode節(jié)點(diǎn)的狀態(tài)信息中包含czxid和mzxid, 那么什么是zxid呢? ZooKeeper狀態(tài)的每一次改變, 都對應(yīng)著一個遞增的Transaction id, 該id稱為zxid. 由于zxid的遞增性質(zhì), 如果zxid1小于zxid2, 那么zxid1肯定先于zxid2發(fā)生. 創(chuàng)建任意節(jié)點(diǎn), 或者更新任意節(jié)點(diǎn)的數(shù)據(jù), 或者刪除任意節(jié)點(diǎn), 都會導(dǎo)致Zookeeper狀態(tài)發(fā)生改變, 從而導(dǎo)致zxid的值增加.
ZooKeeper也有臨時節(jié)點(diǎn)的概念,這些znode只存在于創(chuàng)建它的當(dāng)前會話狀態(tài)為活躍,一旦會話結(jié)束隧出,臨時節(jié)點(diǎn)也會消失扼劈。當(dāng)你想要實(shí)現(xiàn)斷開連接會被撤銷的事務(wù),臨時節(jié)點(diǎn)非常好用乾颁。