02基本命令
基本命令 base 3.6.1
创建节点
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
只加path:创建一个持久化的节点
-s创建有序节点:zookeeper会在我们指定的znode后面加上一串数字,这个数字会不断增加,这个序号的计数器的排序是znode的父节点来维护的。
-e创建临时节点:创建者session失效后,自动删除
-c创建容器节点:当容器节点最后一个子节点被删除后,容器节点会自动被删除(有延迟),只有创建过节点才会被删除
-t创建ttl节点 :设置过期时间
默认情况下没有开启ttl功能,若要启用要在启动参数中加入 -Dzookeeper.extendedTypesEnabled=true
列出节点
ls [-s] [-w] [-R] path
只有path:查询该path的下一层所有子节点。
-s 附带查询节点的状态(节点状态+下一次所有的节点)
-w 添加一个监听器
-R 查询该节点下面所有的子节点,-s -R 等同于-R
添加监听器是一次性的,能够监听到能够监听到子节点的新增和删除,子节点的修改事件监听不到(NodeChildrenChanged),同时也能监听该节点的删除事件(NodeDeleted)。
查询节点信息
get [-s] [-w] path
只有path:获取到指定路径的值
-s附带节点的状态(节点状态+节点的值)
-w添加一个监听器,效果同ls
查询节点状态
stat [-w] path
-w添加一个监听器,效果同ls
修改节点的值
set [-s] [-v version] path data
只有path:设置成功后,没有返回值
-s设置成功后返回节点的状态
-v设置值的时候带上dataVersion ,只有dataVersion与服务端一致的时候才会设置成功,否则version No is not valid : /watchDemo
每次修改 mZxid、mtime、dataVersion 都发生了变化 ,dataVersion+1
删除节点的值
deleteall path [-b batch size]
递归删除
delete [-v version] path
删除,只能删除没有子节点的节点
-v同上
添加持久性Watch
addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
该watch不是一次性的,会一直监听
监听包括自己和子节点的所有增删改操作
查看历史记录
history
重复之前的命令
redo cmdno
根据cmdno重复之前的命令
[zk: localhost:10087(CONNECTED) 60] cmdno –>60
是否输出watch事件
printwatches on|off
不加on|off 打印当前开关状态
ACL
- ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
- 每个znode支持设置多种权限控制方案和多个权限
- 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点
| ACL 权限 | ACL 简写 | 允许的操作 |
|---|---|---|
| CREATE | c | 创建子节点 |
| READ | r | 获取节点的数据和它的子节点 |
| WRITE | w | 设置节点的数据 |
| DELETE | d | 删除子节点 (仅下一级节点) |
| ADMIN | a | 设置 ACL 权限 |
| 命令 | 语法 | 描述 |
|---|---|---|
| getAcl | getAcl [-s] path |
读取ACL权限 |
| setAcl | setAcl [-s] [-v version] [-R] path acl |
设置ACL权限 |
| addauth | addauth scheme auth |
添加认证用户 |
| create | create [-s] [-e] path data acl |
创建节点时指明 ACL 权限 |
zookeeper内置的权限控制方案
| 方案 | 描述 |
|---|---|
| world | 只有一个用户:anyone,代表所有人(默认) |
| ip | 使用IP地址认证 |
| auth | 使用已添加认证的用户认证 |
| digest | 使用“用户名:密码”方式认证 |
world
setAcl <path> world:anyone:<acl>
setAcl /mynode world:anyone:cdr
ip
setAcl <path> ip:<ip>:<acl>
<ip>:可以是具体IP也可以是IP/bit格式,即IP转换为二进制,匹配前bit位,如192.168.0.0/16匹配192.168.*.*
setAcl /mynode ip:192.168.1.250:cdrwa
auth
addauth digest <user>:<password> #添加认证用户setAcl <path> auth:<user>:<acl>
addauth digest admin:admin #添加认证用户
setAcl /mynode1 auth:admin:cdrwa
digest
setAcl <path> digest:<user>:<password>:<acl>
这里的密码是经过SHA1及BASE64处理的密文,在SHELL中可以通过以下命令计算:
echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64
echo -n admin:admin | openssl dgst -binary -sha1 | openssl base64x1nq8J5GOJVPY6zgzhtTtA9izLc=
setAcl /mynode2 digest:admin:x1nq8J5GOJVPY6zgzhtTtA9izLc=:cdrwa
addauth digest admin:admin #添加认证用户
quota
zookeeper中可以往节点存放数据,但是一般来说存放数据总是要有个度量的对吧,不然空间就那么大,如果某个节点将空间全占用了其它节点没得用了,所以zookeeper提供了一个对节点配额功能,不过这个配额功能有点鸡肋,当占用的空间超过了设置的大小时只会打印WARN级别的日志提醒而不是直接让超出配额的操作失败。既然只是在日志中打印一个警告信息,首先就是要找到日志的位置,默认情况下,日志的位置在$ZOOKEEPER/bin/zkEnv.sh

setquota -n|-b val path
用来设置某个节点的子节点个数和其本身的数据长度。
-n 限制此节点最大可拥有多少个子节点
-b 限制此节点能够存储的数据最大是多少个字节
-n 只要是挂在这个节点下的节点都算数,是递归计算,自己本身也算一个
listquota path
显示配置

delquota [-n|-b] path
删除节点时并不会自动删除绑定在特定路径上的quota,需要手动删除