文章内容输出来源:拉勾教育Java高薪训练营。
本篇文章是 分布式集群架构场景方案 学习课程中的一部分笔记
Zookeeper基本使用
系统模型
-
ZooKeeper数据模型Znode
Zookeeper中,数据信息被保存再一个个数据节点上,这些节点被称为znode。ZNode是Zookeeper中最小数据单位,在ZNode下面可以再挂ZNode,这样一层层下去形成了一个层次化命名空间ZNode树,我们称为Znode Tree 采用了类似文件系统的层级树状结构进行管理
-
ZNode类型
持久性节点(Persistent)
临时性节点(Ephemeral)
顺序性节点(Sequential)
在开发中创建节点的时候通过组合可以生成一下四种节点类型;持久节点,持久顺序节点,临时节点,临时顺序节点。不同类型的节点会有不同的生命周期- 持久节点:是Zookeeper中最常见的一种节点类型,节点创建后一直存在服务器,知道删除操作主动清除
- 持久顺序节点:有顺序的持久节点,创建时,会在节点名后面加上一个数字后缀,来表示其顺序
- 临时节点:就是会被自动清理掉的节点,他的生命周期和客户端会话绑再一起,客户端会话结束,节点会被删除掉,与持久节点不同的是,临时节点不能创建子节点
- 临时顺序节点:有顺序的临时节点,在其创建时会在名字后面加数字后缀
-
-
事务ID
- Zookeeper中,事务是指能够改变Zookeeper服务器状态的操作,一般包括数据节点创建与删除,数据节点内容更新等操作。对于每一个事物请求,Zookeeper都会为其分配一个全局唯一的事务ID,用ZXID来表示,通常是一个64位的数组。每一个ZXID对应一次更新操作,从这些ZXID中可以间接的识别出Zookeeper处理这些更新操作请求的全局顺序。
-
ZNode状态信息
-
内容包括两部分,节点数据内容和节点状态信息。
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 表示直系⼦节点数。
-
-
Watch数据变更通知
一个典型的发布/订阅模型系统,定义了一种一对多的订阅关系,能够让多台订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,是他们能够做出相应的处理。
Zookeeper允许客户端向服务端注册一个Watcher监听,当服务端的一些指定事件触发了这个Watcher,那么就会指定客户端发送一个事件通知来实现分布式的通知功能
- 该机制主要包括客户端线程,客户端WatcherManager,Zookeeper服务器三部分,具体的工作流程位:客户端在向Zookeeper服务器注册的同时,会将Watcher对象存储在客户端的WatcherManager当中。当Zookeeper服务器出发Watcher事件后,会向客户端发送通知,客户端线程从WatcherManager中取出对应的Watcher对象来执行回调逻辑。
-
ACL(Access Control List)权限控制
Zookeeper内部存储了分布式运行时状态的元数据,这些元数据会直接影响Zookeeper进行构造的分布式系统的允许状态。因此使用ACL机制保证数据安全。
通常使用"scheme🆔permission"来标识一个有效的ACL信息-
权限模式(Scheme)
用来确定权限验证过程中使用的检验策略
- IP:通过IP地址粒度来进行权限控制,如 ip:192.168.0.110,或者 ip:192.168.0.1/24
- Digest:最常用的权限控制模式,“username:password”的形式的权限标识进行权限配置,配置后,Zk会先后对其进行SHA-1加密和BASE64编码
- World:数据节点访问权限对所有用户开放,可以看作是特殊的Digest, “world:anyone”
- Super:也可以看作特殊的Digest,在Super模式下,超级用户可以对任意Zookeeper上的数据节点进行任何操作
-
授权对象(ID)
指权限赋予的用户或者一个指定实体,例如IP地址或者解其等。
-
权限(Permission)
通过权限检查后,允许被执行的操作。
- CREATE(C):数据节点的创建权限,允许授权对象在该数据节点下创建子节点
- DELETE(D):删除权限,允许授权对象删除该数据节点的子节点
- READ(R):读取权限,允许授权对象访问该节点数据内容或子节点列表等
- WRITE(W):更新权限:允许授权对象对该数据节点进行更新操作
- ADMIN(A):管理权限:允许授权对象对该节点进行ACL相关的设置操作
-
命令行操作
-
创建节点
create [-s][-e] path data acl
其中,-s或-e分别指定节点特性,顺序或临时节点,若不指定,则创建持久节点;acl⽤来进⾏权限控制。 -
读取节点
ls path 其中,path表示的是指定数据节点的节点路径,ls命令只能查看指定节点下的第一级所有子节点
get path 可以获取Zk指定节点的数据内容和属性信息 -
更新节点
set path data [version] 其中data表示要更新的数据内容,version表示数据版本。
-
删除节点
delete path [version] 若删除的节点存在子节点,那么无法删除该节点,必须先删除子节点,再删除父节点。
API使用
-
项目依赖
-
创建节点