- 在ZooKeeper ensemble中怎么查找Leader
這里提供兩種方法
一種是在每個node上執行下面的命令看看哪個node是下面的輸出
# grep LEAD /var/log/zookeeper/zookeeper-zookeeper-server-xyz.out 2016-02-29 22:33:47,113 - INFO [QuorumPeer[myid=3]/0:0:0:0:0:0:0:0:2181:QuorumPeer@829] - LEADING 2016-02-29 22:33:47,114 - INFO [QuorumPeer[myid=3]/0:0:0:0:0:0:0:0:2181:Leader@358] - LEADING - LEADER ELECTION TOOK - 9066
另一種方法是在每個node上使用nc命令
# echo stat | nc localhost 2181 | grep Mode Mode: leader # echo stat | nc localhost 2181 | grep Mode Mode: follower
- 創建一個名叫znode_test的znode,數據是znode_test_data
[zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 1] create /znode_test znode_test_data Created /znode_test [zk: localhost:2181(CONNECTED) 2] get /newznode znode_test_data cZxid = 0x200000002 ctime = Wed Oct 14 05:19:00 EDT 2015 mZxid = 0x200000002 mtime = Wed Oct 14 05:19:00 EDT 2015 pZxid = 0x200000009 cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 1
- 創建一個遞歸的名叫znode_rtest3的znode,數據為znode_rtest_data
[zk: localhost:2181(CONNECTED) 3] ls / [zookeeper, znode_test] [zk: localhost:2181(CONNECTED) 4] create /znode_rtest1/znode_rtest2/znode_rtest3 znode_rtest_data3 Node does not exist: /znode_rtest1/znode_rtest2/znode_rtest3 [zk: localhost:2181(CONNECTED) 5] create /znode_rtest1 znode_rtest_data1 Created /znode_rtest1 [zk: localhost:2181(CONNECTED) 6] create /znode_rtest1/znode_rtest2/znode_rtest3 znode_rtest_data3 Node does not exist: /znode_rtest1/znode_rtest2/znode_rtest3 [zk: localhost:2181(CONNECTED) 7] create /znode_rtest1/znode_rtest2 znode_rtest_data2 Created /znode_rtest1/znode_rtest2 [zk: localhost:2181(CONNECTED) 8] create /znode_rtest1/znode_rtest2/znode_rtest3 znode_rtest_data3 Created /znode_rtest1/znode_rtest2/znode_rtest3
- 刪除一個Znode
delete /<znode>
如果想要刪除一個child znode
delete /<parent_znode>/<child_znode
遞歸刪除znode(小心使用該命令)
rmr /<znode-with-child>
- 讀取Znode數據
如果你想要讀取某個znode的數據,你必須要擁有該znode的R權限(注意是不是擁有ACL的配置)
get /<znode-name>
- 重寫Znode數據
你必須在擁有這個znode的W權限(注意是不是擁有ACL的配置)
set /<znode-name> <new-data>
- 查看某個znode的權限
[zk: localhost:2181(CONNECTED) 27] getAcl /yandufeng_test 'world,'anyone : cdrwa
- World Schema
World schema有一個ID(anyone),代表世界上的所有用戶,例如,輸入下面的命令來使任何用戶可以訪問那個znode
setAcl /newznode world:anyone:crdwa
- Auth Schema
當你使用Auth Schema的時候,你必須提供ID,否則將會報錯,下面是錯誤的例子
[zk: localhost:2181(CONNECTED) 36] setAcl /yandufeng_test auth:crdwa
auth:crdwa does not have the form scheme:id:perm
Acl is not valid : /yandufeng_test正確的形式應該是
setAcl /newznode auth:username:password:crdwa