- 在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