Zookeeper 特性
Zookeeper 特性
- 会话(session)
客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输 - 数据节点(znode)
- 版本
- Watcher
事件监听器,客户端可以在节点上注册监听器,当特定的事件发生后,zk会通知到感兴趣的客户端;eventType: NodeCreated、NodeDeleted、NodeDataChanged、NodeChildrenChange - ACL
Zk采用ACL(access control lists)策略来控制权限,5中权限:create、read,write,delete,admin - 集群角色
会话(session)
客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输

Zookeeper数据模型
ZooKeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”。
- 在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。
- 通过客户端可对znode进行增删改查的操作,还可以注册watcher监控znode的变化。
Zookeeper节点类型
- 持久节点(PERSISTENT)
- 持久顺序节点(PERSISTENT_SEQUENTIAL)
- 临时节点(EPHEMERAL)
- 临时顺序节点(EPHEMERAL_SEQUENTIAL)
持久节点和临时节点的区别:
- 持久节点:客户点链接断开后,数据(znode)还在
- 临时节点:客户点链接断开后,数据(znode)不在
对于持久节点和临时节点,同一个znode下,节点的名称是唯一的!这是实现分布式锁的基础。顺序节点(带序号)不会报错。
临时节点下面不能创建节点。
Zookeeper节点状态属性
| 属性 | 类型 | 作用 |
|---|---|---|
czxid |
long |
节点被创建的Zxid值 |
mzxid |
long |
节点被修改的Zxid值 |
pzxid |
long |
子节点最有一次被修改时的事务ID |
ctime |
long |
节点被创建的时间 |
mtime |
long |
节点最后一次被修改的时间 |
dataVersion |
long |
节点被修改的版本号 |
cversion |
long |
节点的所拥有子节点被修改的版本号 |
aclVersion |
long |
节点的ACL被修改的版本号 |
emphemeralOwner |
long |
如果此节点为临时节点,那么它的值为这个节点拥有者的会话ID;否则,它的值为0 |
dataLength |
int |
节点数据域的长度 |
numChildren |
int |
节点拥有的子节点个数 |
- 事务ID可以识别出请求的全局顺序:
czxid mzxid pzxid - 基于CAS理论保证分布式数据原子性操作:
dataVersion cversion aclVersion
ACL保障数据的安全
[zk: localhost:2181(CONNECTED) 18] getAcl /node1
'world,'anyone
: cdrwa
ACL机制,表示为scheme:id:permissions,第一个字段表示采用哪一种机制,第二个id表示用户,permissions表示相关权限(如只读,读写,管理等)。
scheme:授权的策略;id:用户授权;permission:权限。
scheme:授权的策略
zookeeper提供了如下几种机制(scheme):
- world: 它下面只有一个id, 叫anyone, world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的
- auth: 它不需要id, 只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation, 也支持username/password形式的authentication)
- digest: 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication
- ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16个bit的IP段
world是默认方式,谁都能访问。auth和digest都要通过 用户名:密码 的方式认证,auth是明文,digest是密文。
id:验证模式
不同的 scheme 验证方式不一样。
- world: anyone
- auth: username:password(明文)
- digest: username:password(BASE64(SHA1))
- ip: 限制链接的客户端 IP
permission:权限
cdrwa:
- create(c):是否有创建节点的权限
- detete(d):是否有删除节点的权限
- read(r):是否有读取数据的权限
- write(w):是否有修改节点数据的权限
- admin(a):是否有给字节的设置权限的权限
`

浙公网安备 33010602011771号