zookeeper简介(二)
Zookeeper会话机制
session会话机制
- 一个客户端连接一个会话,由zk分配唯一会话id;
- 客户端以特定的时间间隔发送心跳以保持会话有效; tickTime
- 超过会话超时时间未收到客户端的心跳,则判定客户端死了;(默认2倍tickTime)
- 会话中的请求按FIFO顺序执行。
znode节点数据构成
- 节点数据:存储的协调数据(状态信息、配置、位置信息等)
- 节点类型:持久、顺序、临时、临时顺序
- 名称唯一,命名规范
- 节点元数据(stat结构)
- 数据大小上限:1M
- 一个znode维护了一个属性结构,该结构包括:版本号、ACL变更、时间戳。每次znode数据发生变化,版本号都会递增,这样客户端的读请求可以基于版本号来检索状态相关数据。
- 每个znode都有一个ACL,用来限制是否可以访问该znode。
- 在一个命名空间中,对znode上存储的数据执行读和写请求操作都是原子的。
znode—节点类型
-
临时节点(EPHEMERAL):临时创建的,会话结束节点自动被删除,也可以手动删除,临时节点不能拥有子节点.
-
持久节点(PERSISTENT):创建后永久存在,除非主动删除。
临时节点(EPHEMERAL):临时创建的,会话结束节点自动被删除,也可以手动删除,临时节点不能拥有子节点.
-
临时顺序节点(EPHEMERAL_SEQUENTIAL):具有临时节点特征,但是它会有序列号
-
持久顺序节点(PERSISTENT_SEQUENTIAL):具有持久节点特征,但是它会有序列号。
节点元数据(stat结构)
每一个Znode都有对应的stat结构,和文件系统类似。stat状态主要包含下面的信息:
- cZxid. 节点被创建时候的事务ID
- mZxid 节点最后一次被修改时候的事务ID
- pZxid 该节点的子节点最后一次被修改时的事务ID。子节点删除或添加才会影响pZxid
- ctime 节点被创建的时间
- mtime 节点被修改的世界
- dataVersion 这个节点数据改变的次数
- cversion 子节点被改变的次数
- aclVersion 节点的ACL(访问控制列表被改变的次数)
- ephemeralOwner 创建该临时节点的 session ID。如果是持久节点,设置为0
- dataLength 数据内容长度
节点的访问控制(ACL)
zk提供了ACL来控制znode节点的访问,只有符合了ACL控制,才可以操作该节点,否则将无法操作。
Zookeeper支持可配置的认证机制。它利用一个三元组来定义客户端的访问权限:
(scheme:expression, perms) 。其中:
-
Schema 代表权限控制模式,分别为:
- World 任何人
- Auth 不需要ID
- Digest 用户名和密码方式的认证
- IP Address IP地址方式的认证
-
perms(权限),ZooKeeper支持如下权限
- CREATE: 创建子节点
- READ: 获取子节点与自身节点的数据信息
- WRITE:在Znode节点上写数据
- DELETE:删除子节点
- ADMIN:设置ACL权限
Znode的Acl只是针对某个节点,不会作用到它的子节点上