集群角色
zk集群成员一共分为三个角色,分别是
- leader:提供写服务,提供读服务,参与leader选举。
- follower:提供读服务,参与leader选举。
- observer:提供读服务
leader和follwer的定义比较清楚,典型的Master/Salver模式,observer的加入主要是为了在提升集群读服务能力的同时,不增加因为集群规模扩大带来的选举消耗。
会话
指客户端会话,一个客户端与服务端的TCP长链接。通过该会话,客户端可以请求zk的服务,或者监听zk上事件的通知。
ZNode
在zk中节点的定义分为两种
- 代表zk服务器的节点
- ZNode代表zk每一个数据节点,例如/conf/client1
服务器节点不用多说就是每一个部署zk服务的容器。数据节点ZNode存储数据内容以子节点内容。
ZNode按照持久性的种类分,可以分为
- 持久性节点(Persistent)
- 临时行节点(Ephemeral)
此外还有一种功能性节点
- 顺序性节点(Sequential):在节点后加上一串数字,标识序号。
两种分类可以拥有四种组合
- 持久节点
- 持久顺序节点
- 临时节点
- 临时顺序节点
每一个节点存储的内容包括以下字段
cZxid 就是 Create ZXID,表示节点被创建时的事务ID。
ctime 就是 Create Time,表示节点创建时间。
mZxid 就是 Modified ZXID,表示节点最后一次被修改时的事务ID。
mtime 就是 Modified Time,表示节点最后一次被修改的时间。
pZxid 表示该节点的子节点列表最后一次被修改时的事务 ID。只有子节点列表变更才会更新 pZxid,
子节点内容变更不会更新。
cversion 表示子节点的版本号。
dataVersion 表示内容版本号。
aclVersion 标识acl版本
ephemeralOwner 表示创建该临时节点时的会话 sessionID,如果是持久性节点那么值为 0 dataLength 表示数据⻓度。
numChildren 表示直系子节点数。
版本
对于每一个ZNode,zk会为其存储一份版本信息,版本包括三种
- version:表示当前ZNode的版本
- cversion:ZNode子节点的版本
- aversion:ZNode的ACL版本
ZXID
zk标识事务的全局唯一ID,当客户端触发一次事务操作是,zk会为其分配一个全局的事务ID,命名为ZXID,用来表示zk的事务请求顺序。
Watcher
事件监听器,客户端调用zk服务时可以决策是否要注册一些watcher服务,这样就可以在相关的事件发生时进行通知,客户端也可以在此时进行一些额外的操作,比如分布式锁的竞争。
ACL
zk采用ACL策略来完成权限的控制,并且zk提供了五种权限
- CREATE:创建节点权限
- READ:获取节点数据和子节点列表
- WRITE:更新节点数据
- DELETE:删除子节点
- ADMIN :设置节点ACL权限
网友评论