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

  1. ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
  2. 每个znode支持设置多种权限控制方案和多个权限
  3. 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点
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 base64
x1nq8J5GOJVPY6zgzhtTtA9izLc=

setAcl /mynode2 digest:admin:x1nq8J5GOJVPY6zgzhtTtA9izLc=:cdrwa

addauth digest admin:admin #添加认证用户

quota

zookeeper中可以往节点存放数据,但是一般来说存放数据总是要有个度量的对吧,不然空间就那么大,如果某个节点将空间全占用了其它节点没得用了,所以zookeeper提供了一个对节点配额功能,不过这个配额功能有点鸡肋,当占用的空间超过了设置的大小时只会打印WARN级别的日志提醒而不是直接让超出配额的操作失败。既然只是在日志中打印一个警告信息,首先就是要找到日志的位置,默认情况下,日志的位置在$ZOOKEEPER/bin/zkEnv.sh

image-20201211173313561

setquota -n|-b val path

用来设置某个节点的子节点个数和其本身的数据长度。

-n 限制此节点最大可拥有多少个子节点

-b 限制此节点能够存储的数据最大是多少个字节

-n 只要是挂在这个节点下的节点都算数,是递归计算,自己本身也算一个

listquota path

显示配置

image-20201211174044820

delquota [-n|-b] path

删除节点时并不会自动删除绑定在特定路径上的quota,需要手动删除


02基本命令
https://jiajun.xyz/2020/12/16/java/zookeeper/02基本命令/
作者
Lambda
发布于
2020年12月16日
许可协议