一 zk基本概念
集群角色
- Leader:为客户端提供读写服务
- Follower:提供读服务,所有写服务都需要转交给 Leader 角色,参与选举
- Observer:提供读服务,不参与选举过程,一般是为了增强 zk 集群的读请求并发能力
会话(session)
- zk 客户端与服务端之间的连接
- 通过心跳检测保持客户端连接的存活
- 接收来自服务端 watch 时间通知
- 可以设置超时时间
数据节点(ZNode)
- zk 树形结构中的数据节点,用于存储数据,可分为持久节点和临时节点
- 持久节点:一旦创建,除非主动调用删除操作,否则一直存储在 zk 上
- 临时节点:与 session 绑定,一旦session 失效,这个客户端创建的所有临时节点都会被移除
- SEQUENTIAL ZNode:创建节点时,如果设置属性 SEQUENTIAL ,则会自动在节点名后面追加一个整型数字
版本
- Version:当前 Znode 的版本
- Cversion:当前Znode 子节点的版本
- Aversion:当前Znode 的ACL 版本
Watcher
- 作用于 Znode 节点上
- 多种事件通知:数据更新,子节点状态等
ACL
- Access Control Lists:访问控制列表
- 类似于Linux/Unix 的权限控制
- CREATE:创建子节点的权限
- READ:获取节点数据和子节点列表的权限
- WRITE:更新节点数据的权限
- DELETE:删除子节点的权限
- ADMIN:设置子节点 ACL 的权限
二 zk 客户端命令
ls path [watch]
- 列出指定节点下所有子节点
- path:指定数据节点的节点路径
- ls 只能查看指定节点第一级的所有子节点
- watch 表示 监听 path 的子节点的变化,只有一次有效
create [-s] [-e] path data acl
- 创建 zk 节点
- -s 或 -e 表示创建顺序节点还是临时节点,不加默认创建的是持久节点
- path 为节点的全路径,没有相对节点的表示方式
- data 为当前节点内存储的数据
- acl 用来进行权限控制,默认不做任何权限控制
get path [watch]
- 获取指定节点的数据内容和属性信息
- path 表示指定数据节点的节点路径
- 获取的信息包括
- 节点内数据信息
- cZxid:创建该节点的事务id
- ctime:创建时间
- Mzxid:最后一次更新该节点的事务id
- mtime:最后一次更新时间
- cversion:子节点版本
- dateVersion:数据版本
- aclVersion:acl 访问控制版本
- ephemeralOwner:临时节点拥有者
- dataLength:当前节点长度
- numChildren:子节点数量
set path data [version]
- 更新指定节点的数据内容
- path 表示被更新的节点路径
- data 为更新的数据
- version 为指定被更新的数据版本,一般不指定,如果数据版本已经更新,则指定旧版本时会报错
delete path [version]
- 删除指定节点
- path 和 version 同 set 操作