連接api
在ZooKeeper的 bin 目錄下執(zhí)行zkCli.sh
./zkCli.sh -server 127.0.0.1:2181
退出api
quit
幫助
h
顯示歷史命令
history
權(quán)限括荡?
setAcl命令
設(shè)置節(jié)點(diǎn)Acl。
此處重點(diǎn)說一下acl棚蓄,acl由大部分組成:1為scheme叫确,2為user皆辽,3為permission因苹,一般情況下表示為scheme:id:permissions移国。
其中scheme和id是相關(guān)的文捶,下面將scheme和id一起說明荷逞。
scheme和id
world: 它下面只有一個(gè)id, 叫anyone, world:anyone代表任何人,zookeeper中對(duì)所有人有權(quán)限的結(jié)點(diǎn)就是屬于world:anyone的
auth: 它不需要id, 只要是通過authentication的user都有權(quán)限(zookeeper支持通過kerberos來進(jìn)行authencation, 也支持username/password形式的authentication)
digest: 它對(duì)應(yīng)的id為username:BASE64(SHA1(password))粹排,它需要先通過username:password形式的authentication
ip: 它對(duì)應(yīng)的id為客戶機(jī)的IP地址种远,設(shè)置的時(shí)候可以設(shè)置一個(gè)ip段,比如ip:192.168.1.0/16, 表示匹配前16個(gè)bit的IP段
super: 在這種scheme情況下顽耳,對(duì)應(yīng)的id擁有超級(jí)權(quán)限坠敷,可以做任何事情(cdrwa)
permissions
CREATE(c): 創(chuàng)建權(quán)限,可以在在當(dāng)前node下創(chuàng)建child node
DELETE(d): 刪除權(quán)限射富,可以刪除當(dāng)前的node
READ(r): 讀權(quán)限膝迎,可以獲取當(dāng)前node的數(shù)據(jù),可以list當(dāng)前node所有的child nodes
WRITE(w): 寫權(quán)限胰耗,可以向當(dāng)前node寫數(shù)據(jù)
ADMIN(a): 管理權(quán)限限次,可以設(shè)置當(dāng)前node的permission
綜上,一個(gè)簡單使用setAcl命令柴灯,則可以為:
setAcl /zookeeper/node1 world:anyone:cdrw
getAcl命令
獲取節(jié)點(diǎn)Acl卖漫。
如getAcl /zookeeper/node1
'world,'anyone
: cdrwa
注:可參見setAcl命令。
查詢相關(guān)指令
#ls path:列出path下的文件
[zk: 127.0.0.1:2181(CONNECTED) 4] ls /
[zookeeper]
#如上:列出根目錄節(jié)點(diǎn)下的所有文件赠群,目前就只有一個(gè)系統(tǒng)自帶的zookeeper節(jié)點(diǎn)
#stat path:查看節(jié)點(diǎn)狀態(tài)
[zk: 127.0.0.1:2181(CONNECTED) 6] stat /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
#cZxid:創(chuàng)建節(jié)點(diǎn)時(shí)的事務(wù)id
#pZxid:子節(jié)點(diǎn)列表最后一次被修改的事務(wù)id
#cversion:節(jié)點(diǎn)版本號(hào)
#dataCersion:數(shù)據(jù)版本號(hào)
#aclVerson:acl權(quán)限版本號(hào)
#......
#get path:獲取指定節(jié)點(diǎn)的內(nèi)容
#ls2 path:列出path節(jié)點(diǎn)的子節(jié)點(diǎn)及狀態(tài)信息
創(chuàng)建指令
#create [-s] [-e] path data acl
1 [zk: 127.0.0.1:2181(CONNECTED) 10] create /node_1 123
2 Created /node_1
#如上:在根目錄創(chuàng)建了node_1節(jié)點(diǎn)羊始,攜帶數(shù)據(jù) 123,使用 get /node_1 驗(yàn)證是否添加節(jié)點(diǎn)及其數(shù)據(jù)成功
修改相關(guān)指定
#set path data [version]
[zk: 127.0.0.1:2181(CONNECTED) 14] set /node_1 998
cZxid = 0x200000002
ctime = Sat Aug 27 15:24:39 CST 2016
mZxid = 0x20000000a
mtime = Sat Aug 27 15:38:40 CST 2016
pZxid = 0x200000008
cversion = 5
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 3
#如果我們多次修改查描,會(huì)發(fā)現(xiàn) dataVersion 店枣,也就是數(shù)據(jù)版本速警,在不停得發(fā)生變化(自增)
#如果我們在set的時(shí)候手動(dòng)去指定了版本號(hào)叹誉,就必須和上一次查詢出來的結(jié)果一致鸯两,否則 就會(huì)報(bào)錯(cuò)。
#這個(gè)可以用于我們在修改節(jié)點(diǎn)數(shù)據(jù)的時(shí)候长豁,保證我們修改前數(shù)據(jù)沒被別人修改過钧唐。因?yàn)槿绻麆e人修改過了,我們這次修改是不會(huì)成功的
刪除指令
#delete path [version]
delete /node_1/node_1_10000000001
#刪除指定節(jié)點(diǎn)數(shù)據(jù)匠襟,其version參數(shù)的作用于set指定一致
#整個(gè)節(jié)點(diǎn)全刪除
#注意:delete只能刪除不包含子節(jié)點(diǎn)的節(jié)點(diǎn)钝侠,如果要?jiǎng)h除的節(jié)點(diǎn)包含子節(jié)點(diǎn),使用rmr命令
rmr /node_1