1 使用zkCli.sh连接到zookeeper
# 一般语法./zkCli.sh ./zkCli.sh -timeout 0 -r -server ip:port # 连接到主机h1 超时时间3秒 ./zkCli.sh -timeout 3000 -server h1:2181# 有类似如下的命令提示符就表示连接成功了[zk: h1:2181(CONNECTED) 0] 12345678910
另外,我们在前面说过。整个zookeeper的节点结构就和linux文件系统是一致的。
都是只有一个最顶层的根节点,其下有若干子节点。
随便敲个字母就可以显示出使用帮助了:
[zk: h1:2181(CONNECTED) 1] h 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:port1234567891011121314151617181920212223
2 基本命令的使用
在一定角度来说zookeeper是个存储数据的东西。
所以他的操作命令大致可以分为增删改查四类了
2.1 查询操作
ls path [watch]
列出指定节点,类似于linux的ls命令
[zk: h1:2181(CONNECTED) 8] ls / [zookeeper] [zk: h1:2181(CONNECTED) 9] ls /zookeeper [quota] [zk: h1:2181(CONNECTED) 10] ls /zookeeper/quota [] [zk: h1:2181(CONNECTED) 11]1234567
stat path [watch]
列出指定节点的状态信息,或者说是元数据信息
[zk: h1:2181(CONNECTED) 11] stat / # 节点被创建时的事务ID cZxid = 0x0 # 节点创建时间 ctime = Thu Jan 01 08:00:00 CST 1970 # 最近一次更新时的事务ID mZxid = 0x0 # 最近一次更新时间 mtime = Thu Jan 01 08:00:00 CST 1970 # 该节点的子节点列表最近一次被修改的事务ID # 添加、删除子节点会影响该值 pZxid = 0x0 # 子节点版本号 cversion = -1 # 数据版本号 dataVersion = 0 # ACL版本号 aclVersion = 0 # 创建临时节点的事务ID # 如果是持久节点,则该值为0x0 ephemeralOwner = 0x0 # 当前节点的数据长度 dataLength = 0 # 当前节点的子节点数目 numChildren = 1 [zk: h1:2181(CONNECTED) 12] 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 [zk: h1:2181(CONNECTED) 13]123456789101112131415161718192021222324252627282930313233343536373839
get path [watch]
可以列出指定节点的数据
格式:
get / get /zookeeper123
ls2 path [watch]
是ls的升级版,列出子节点的同时列出节点的状态信息
[zk: h1:2181(CONNECTED) 15] ls2 / [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 [zk: h1:2181(CONNECTED) 16]1234567891011121314
2.2 创建节点
create [-s] [-e] path data acl s:可选,表示该节点为顺序节点 e:可选,表示该节点为临时节点 path:节点路径 data:节点数据 acl:访问控制列表1234567
# 创建节点/node_1,数据为dataOfNode_1 [zk: h1:2181(CONNECTED) 17] create /node_1 dataOfNode_1 Created /node_1 [zk: h1:2181(CONNECTED) 18] ls / [zookeeper, node_1] # 创建临时节点/node_1/node_1_1 11 # 在会话结束后被删除 [zk: h1:2181(CONNECTED) 20] create -e /node_1/node_1_1 11 Created /node_1/node_1_1 [zk: h1:2181(CONNECTED) 21] ls /node_1 [node_1_1] [zk: h1:2181(CONNECTED) 22] # 创建顺序节点/node_1/node_1_2 [zk: h1:2181(CONNECTED) 22] create -s /node_1/node_1_2 12 Created /node_1/node_1_20000000001 [zk: h1:2181(CONNECTED) 23] create -s /node_1/node_1_3 13 Created /node_1/node_1_30000000002 [zk: h1:2181(CONNECTED) 26] create -s /node_1/node_1_2 12 Created /node_1/node_1_20000000003 [zk: h1:2181(CONNECTED) 27] create -s /node_1/node_1_2 12 Created /node_1/node_1_20000000004 [zk: h1:2181(CONNECTED) 28] create -s /node_1/node_1_2 12 Created /node_1/node_1_20000000005 [zk: h1:2181(CONNECTED) 29] # 目前的/node_1节点 [zk: h1:2181(CONNECTED) 29] ls /node_1 [node_1_20000000005, node_1_1, node_1_30000000002, node_1_20000000001, node_1_20000000003, node_1_20000000004]1234567891011121314151617181920212223242526272829
2.3 修改操作
set path data [version] path : 节点路径 data : 新数据 version : 版本号,要么不写,要么和上一次查询出的版本号一致。该操作会影响节点的mZxid、dataVersion和mtime属性12345
示例:
set /node_1 newdataOfNode_1 set /node_1 newdataOfNode_1 212
2.4 删除操作
delete 只能删除不含子节点的节点
delete path [version] path :要删除的节点的路径123
rmr 递归删除节点
rmr path1
2.5 quota
setquota 对节点增加限制(配额)
setquota -n|-b val path n:表示子节点的最大个数 b:表示数据值的最大长度 val:子节点最大个数或数据值的最大长度 path:节点路径123456
最大节点数示例:
# 创建节点/node_2 [zk: h1:2181(CONNECTED) 51] create /node_2 node2 Created /node_2 # 指定其子节点最大数为2 [zk: h1:2181(CONNECTED) 52] setquota -n 2 /node_2 Comment: the parts are option -n val 2 path /node_2 # 创建第2个子节点 [zk: h1:2181(CONNECTED) 53] create /node_2/node_2_1 21 Created /node_2/node_2_1 # 创建第2个子节点 [zk: h1:2181(CONNECTED) 54] create /node_2/node_2_2 22 Created /node_2/node_2_2 # 创建第3个子节点 # 此处虽然指定了最大两个子节点,但是并没报错,而是成功创建了 # 虽然创建成功了,但是会在${dataDir}/zookeeper.out中记录警告信息 [zk: h1:2181(CONNECTED) 55] create /node_2/node_2_3 23 [zk: h1:2181(CONNECTED) 56] ls /node_2 [node_2_1, node_2_2, node_2_3]1234567891011121314151617181920
最大节点数警告信息:
# 此处的zookeeper.out在zookeeper的 $dataDir目录下 tail -2 /var/zookeeper/zookeeper.out [myid:1] - WARN [CommitProcessor:1:DataTree@301] - Quota exceeded: /node_2 count=3 limit=2 [myid:1] - WARN [CommitProcessor:1:DataTree@301] - Quota exceeded: /node_2 count=4 limit=21234
listquota
列出指定节点的quota
listquota path1
[zk: h1:2181(CONNECTED) 58] listquota /node_2 absolute path is /zookeeper/quota/node_2/zookeeper_limits # 子节点个数为2,数据长度-1表示没限制 Output quota for /node_2 count=2,bytes=-1 # 当前信息,节点数为4(超额了),数据长度为11(包含子节点的数据长度) Output stat for /node_2 count=4,bytes=11 [zk: h1:2181(CONNECTED) 59]1234567
delquota
删除quota,格式:
delquota [-n|-b] path1
示例:
# 删除/node_2对于子节点个数限制的quota [zk: h1:2181(CONNECTED) 64] delquota -n /node_2 [zk: h1:2181(CONNECTED) 65] listquota /node_2 absolute path is /zookeeper/quota/node_2/zookeeper_limits # -1表示不做限制 Output quota for /node_2 count=-1,bytes=-1 Output stat for /node_2 count=4,bytes=11 [zk: h1:2181(CONNECTED) 66]12345678
2.6 ACL
此处的ACL(Access Control List)和Linux文件系统的中的那个访问控制列表有点类似。
权限主要有:
CREATE : 创建子节点 READ : 获取节点数据和子节点列表 WRITE : 更新节点数据 DELETE : 删除子节点 ADMIN : 设置节点ACL的权限12345
与授权相关的几个概念:
shchema:权限模式,有IP和digest两种 ID:授权对象 schema为IP时,该值为具体的IP地址 scheme为digest时,该值为 userName:base64(sha1(userName:password)) zookeeper的javaAPI提供了一个工具类org.apache.zookeeper.server.auth.DigestAuthenticationProvider 可以快速生成加密的密文 permission:权限,指的就是上面所说的五种权限 最终的组合为: schema + ID + permission1234567
和ACL相关的命令
getAcl 获取指定节点的ACL信息
getAcl path1
# 创建节点/node9,并指定其ACL:ip为192.168.161.1,权限为create,read,write,delete,damin [zk: h1:2181(CONNECTED) 22] create /node9 data9 ip:192.168.161.1:crwda Created /node9 [zk: h1:2181(CONNECTED) 23] getAcl /node9 'ip,'192.168.161.1 : cdrwa # schema为digest,用户名为hylexus,密码为123(密文),权限:create,read,write,admin,delete [zk: h1:2181(CONNECTED) 26] create /node10 data10 digest:hylexus:f4Myrgy6YlaWdo4lvv///2jgEDI=:crwad Created /node10 [zk: h1:2181(CONNECTED) 27] getAcl /node10 'digest,'hylexus:f4Myrgy6YlaWdo4lvv///2jgEDI= : cdrwa [zk: h1:2181(CONNECTED) 28] 1234567891011121314
setAcl
setAcl path acl1
setAcl /node_3 digest:hylexus:f4Myrgy6YlaWdo4lvv///2jgEDI=:crwad setAcl /node_4 ip:192.168.161.1:crawd12
addauth 注册会话授权信息
addauth scheme auth schema:可取ip或digest auth schema==digest时为 userName:password schema==ip时为123456
# 用户名:hylexus,密码:123456 addauth digest hylexus:12345612
其他命令
history : 列出命令历史
redo : 该命令可以重新执行指定命令编号的历史命令,命令编号可以通过history查看
[zk: h1:2181(CONNECTED) 70] history 60 - ls /zookeeper 61 - get /node_2 …………………… …………………… # 重新执行编号为60的命令 [zk: h1:2181(CONNECTED) 71] redo 60 [quota] [zk: h1:2181(CONNECTED) 72]
转载请注明:梦绘设计 » linux服务 » zookeeper命令参数操作详解
版权声明
本站《作品展示》类文章均为原创,转载必须注明出处,技术分享类文章部分来源于网络,版权归原作者所有,若侵权请留言。