zookeeper 从入门到放弃(01)

看看 zookeeper 有哪些用法吧,共勉。

help

可以列出 zookeeper 的用法

Alt text

addauth scheme auth

添加认证用户

scheme 可选值:

  • word 表示所有。创建节点的默认权限。有唯一的id是anyone授权的时候的模式为 world:anyone:rwadc 表示所有人都对这个节点有rwadc的权限。这里用的是id而不是expression
  • ip 使用 IP 地址认证
  • auth 不需要id。不过这里应该用expression来表示。即(scheme:expression:perm)
  • host 使用用户主机名作为访问控制列表的id。但是这里需要注意的是表达式用的是主机名的后缀即可。举个例子。如果表达式设置为 corp.com可以匹配如host1.corp.com, host2.corp.com的主机名,但是不能匹配 host1.zookeeper.com这个主机名。
  • digest 使用用户名:密码编码成md5的方式来作为访问控制列表的id。但是这里id不作为授权语句的一部分,这里也是用expression的方式。用户名: 密码先进行sha1编码后再用base64编码。这个比较恶心,后面再详细介绍。

示例:

1
addauth digest liuwen:123456

setAcl [-s] [-v version] [-R] path acl

为节点设置权限

权限 ACL简写 描述
CREATE c 可以创建子节点
DELETE d 可以删除子节点(仅下一级节点)
READ r 可以读取节点数据及显示子节点列表
WRITE w 可以设置节点数据
ADMIN a 可以设置节点访问控制列表权限

示例:

1.auth

1
2
create /test0 "test0"
setAcl /test0 auth:liuwen:w

这是为 addauth 添加的 liuwen 账号 对 节点 /test0 的一个 w 权限(即写权限),楼主无意中发现,如果不是 create 此节点的 client,是不能 对此节点设置权限的,报错如下:

Alt text

没有权限是不能访问的

Alt text

上述示例中,如果在新的客户端 addauth liuwen,是可以对 /test0 赋值的,因为 liuwen 有 test0 的 write 权限

Alt text

2.world

1
2
create /test1 "test1"
setAcl /test1 world:anyone:cdrwa

任意 client 都可以随意访问

Alt text

Alt text

getAcl [-s] path

获取节点acl信息

Alt text

get [-s] [-w] path

获取一个节点的 value

Alt text

看起来 zookeeper 是有持久化的,我关闭 server 和 clients 之后,依然可以访问到之前创建的 node

close

关闭连接,会关闭当前 client ,但是不会影响其他 client

Alt text

delete [-v version] path

删除 node,没有 acl 权限的 client 也可以删除相应节点

Alt text

注:如果一个节点下有子节点,使用delete是不行的,需要使用deleteall

Alt text

deleteall path

删除此节点及此节点下的子节点

注:path必须是一个完整的节点path

Alt text

Alt text

setquota -n|-b val path

  • -n 表示自身节点+子节点的最大个数
  • -b 表示数据值的最大长度
  • val 子节点最大个数或数据值的最大长度
  • path 节点路径

-n 设置自身节点+子节点的最大个数

Alt text

注:比较坑的一点是,虽然可以设置子节点的最大个数,但是超过此个数create也是成功的!!!自身也算最大节点数中的一个

超过个数限制的话,server端会出现警告信息

Alt text

-b 设置节点值的最大数值(单位 byte)

Alt text

设置的byte value也可以小于当前节点长度

重新set节点value byte长度如果大于设置值,server 也会看到相应的 warn 信息

Alt text

Alt text

注:如果使用setquota,-n、-b是被锁定的,如果切换设置会提示,org.apache.commons.cli.AlreadySelectedException: The option ‘b’ was specified but an option from this group has already been selected: ‘n’,org.apache.commons.cli.AlreadySelectedException: The option ‘n’ was specified but an option from this group has already been selected: ‘b’,重新create的节点也会被锁定quota,需要关闭当前client,重新启动一个client,诡异?or坑爹?

Alt text

Alt text

delquota [-n|-b] path

移除节点数量、长度限制

注:delete 节点的时候,是不是把 节点 的 quota 删除的

Alt text

listquota path

显示节点的 quota 信息

Alt text

注:Output quota 表示子节点 quota 信息,Output stat 表示当前节点 quota 信息,Output stat 里面的 bytes = (当前节点bytes+子节点bytes),-1表示没有限制

history

查看历史命令

Alt text

ls [-s] [-w] [-R] path

  • -s 状态
  • -w 添加监听
  • -R 节点及其子节点

Alt text

Alt text

Alt text

注:如果一个client a在一个节点添加了watcher监听,那么针对此节点增删子节点的改动将被监听到1次,但是别的client b对此节点做的改动,client a监听不到,超过一次,client a也监听不到,困惑,难道是为了节约资源,让程序员自己去控制监听???

Alt text

ls2 path [watch]

被 ls 取代

Alt text

printwatches on|off

是否打印 watcher 信息,默认值是 on

Alt text

quit

关闭连接并且退出

redo cmdno

重新执行 command no 序列的命令

Alt text

removewatches path [-c|-d|-a] [-l]

移除节点的 watcher

[-c|-d|-a] [-l] 代表什么意思,暂时没有搞懂,居然找不到官方 docs,这项目凉了吗?

Alt text

rmr

被 deleteall 取代了

Alt text

但是节点及其子节点也能被实实在在地删除,真是坑的一匹啊

Alt text

set [-s] [-v version] path data

设置节点值

Alt text

stat [-w] path

可以查看到 节点属性,并为之添加一个一次性 watcher

Alt text

sync path

手动同步节点值

个人感觉在 zookeeper 集群运转正常的情况下,不需要使用这条语句

Alt text

config [-c] [-w] [-s]

查看当前集zk server配置

  • -c 仅输出与当前配置相对应的版本和客户端连接字符串
  • -w 用于在znode上设置watcher
  • -s 用于显示znode的统计信息

Alt text

Alt text

reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,…]]] | [-add serverId=host:port1:port2;port3[,…]] [-remove serverId[,…]*]

添加/删除/修改新机器到zookeeper集群

暂时没搞懂

参考资料: ZooKeeper ACL权限控制 Zookeeper权限管理之坑 zookeeper-04-基本命令 Zookeeper笔记之quota Zookeeper源语(客户端命令)集合(3.5.6) Zookeeper 客户端 zkCLI 命令详解 Zookeeper docs

|