Zookeeper
文章目录
1.简介
官网:https://zookeeper.apache.org
ZooKeeper是一项集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。所有这些类型的服务都以某种形式被分布式应用程序使用。
2.应用场景
- 统一配置信息及维护
- 分布式锁
- 集群管理
- 分布式唯一ID
3.客户端命令
3.1.概览
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:port
3.2.示例
序号 | 名称 | 命令 | 示例 | 说明 |
---|---|---|---|---|
1 | 创建节点 | create path [-e] [-s] data | create /mynode/nodename1 “abc” | 其中-e、-s为可选参数;path表示路径;-e表示临时节点;-s表示有序节点;data为节点数据; |
2 | 修改节点 | set path data [dataversion] | set /mynode/nodename1 “dd” 1 | 其中dataversion为可选参数,表示数据的版本号(即匹配版本号才允许修改); |
3 | 删除节点 | delete path [dataversion] | delete /mynode/nodename1 1 | 其中dataversion为可选参数,表示数据的版本号(即匹配版本号才允许删除); |
4 | 递归删除节点及子节点 | rmr path | rmr /mynode/nodename1 | 递归删除节点及子节点 |
5 | 查看节点 | get path | get /mynode/nodename1 | 查看节点 |
6 | 查看节点状态 | stat path | stat /mynode/nodename1 | 同5:但是不会返回节点数据 |
7 | 返回节点列表 | ls path | ls / | 返回节点列表 |
8 | 返回节点列表2 | ls2 path | ls2 / | 返回节点列表,并且返回stat |
9 | 注册监听器 | get path [watch] | get /mynode/nodename1 watch | 一次性触发:当节点变化时,可以被监听到 |
10 | 注册监听器2 | stat path [watch] | stat /mynode/nodename1 watch | 一次性触发: |
11 | 子节点注册监听器 | ls path [watch] | ls /mynode/nodename1 watch | 一次性触发:注册该节点的子节点监听器 |
12 | 子节点注册监听器2 | ls2 path [watch] | ls2 /mynode/nodename1 watch | 一次性触发: |
补充:
-
查看节点: get /mynode/nodename1
a123 cZxid = 0x49239 ctime = Mon Jul 06 20:39:47 CST 2020 mZxid = 0x4923b mtime = Mon Jul 06 20:49:43 CST 2020 pZxid = 0x49239 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0
属性 说明 a123:节点存储的数据 cZxid 节点创建时的事务ID ctime 节点创建时的时间 mZxid 节点最后更新时的事务ID mtime 节点最后更新时的时间 pZxid 节点的子节点最后一次被修改时的事务ID cversion 子节点的更改次数 dataVersion 数据版本:即被修改的次数 aclVersion acl版本:即acl被修改的次数 ephemeralOwner 如果此节点时临时节点,表示创建节点时会话的SessionId;如果是持久节点,则是0(0x0) dataLength 数据长度:data numChildren 子节点个数
3.3.acl(access control list)权限控制
scheme:id:perssion
3.3.1.权限模式(scheme):即采用何种方式授权
序号 | 模式 | 说明 |
---|---|---|
1 | world | 只有一个用户:anyone; 代表登录zookeeper的所有人 |
2 | ip | 客户端使用的ip认证 |
3 | auth | 已添加认证的用户认证 |
4 | digest | 已添加认证的用户认证,使用“用户名:密码”方式认证 |
3.3.2.授权对象(id):即给谁授权
权限授予的实体对象,比如:ip地址或者用户
3.3.3.授权(perssion):即授予何种权限
序号 | 权限 | acl简写 | 说明 |
---|---|---|---|
1 | create | c | 可以创建子节点 |
2 | read | r | 可以读取节点数据以及显示子节点列表 |
3 | write | w | 可以设置节点数据 |
4 | delete | d | 可以删除子节点(仅下一级节点) |
5 | admin | a | 可以设置acl权限 |
#授权:可以同时使用多种授权模式,用逗号分隔
setAcl /test3 world:anyone:cdrwa
setAcl /test3 ip:192.168.1.31:cdrwa
setAcl /test3 auth:wzb:cdrwa
setAcl /test3 digest:wzb:/jkGdS5slDCObV2mWEt7Yf2Xb98=:cdrwa
#shell中通过如下命令生成密文
echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64
#添加授权用户
#addauth <scheme> <auth>
addauth digest wzb:123456
#查看acl
getAcl /test3
'digest,'wzb:/jkGdS5slDCObV2mWEt7Yf2Xb98=
: cdrwa