zookeeper

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: ZNodeZNode是ZK树形结构的一个节点,它可以包含或者不包含数据。ZK提供了如下API,用于操作ZNode。create path datadelete path dataexists pathgetdata pathputdata path datagetChildren pathZK客户端通过建立一个Session会话,来连接ZK服务,通过这些API来操作ZNode。

ZNode

ZNode是ZK树形结构的一个节点,它可以包含或者不包含数据。

ZK提供了如下API,用于操作ZNode。

  • create path data
  • delete path data
  • exists path
  • getdata path
  • putdata path data
  • getChildren path
    ZK客户端通过建立一个Session会话,来连接ZK服务,通过这些API来操作ZNode。

ZNode模式

  • PERSISTENT-持久化节点:创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点也不会被删除(除非您使用API强制删除)。
  • PERSISTENT_SEQUENTIAL-持久化顺序编号节点:当客户端请求创建这个节点A后,zookeeper会根据parent-znode的zxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当客户端与zookeeper服务的连接断开后,这个节点也不会被删除。
  • EPHEMERAL-临时znode节点:创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点就会被删除。ephemeral模式可以用于检测master或者worker是否挂掉。ephemeral模式的节点也可以被主动删除。
  • EPHEMERAL_SEQUENTIAL-临时顺序编号znode节点:当客户端请求创建这个节点A后,zookeeper会根据parent-znode的zxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当创建这个节点的客户端与zookeeper服务的连接断开后,这个节点被删除

zNode的结构

节点的属性

每个znode都包含了一系列的属性,通过命令get,我们可以获得节点的属性。

get /module1/app2 
app2 
cZxid = 0x20000000e 
ctime = Thu Jun 30 20:41:55 HKT 2016 
mZxid = 0x20000000e 
mtime = Thu Jun 30 20:41:55 HKT 2016 
pZxid = 0x20000000e 
cversion = 0 
dataVersion = 0 
aclVersion = 0 
ephemeralOwner = 0x0 
dataLength = 4 
numChildren = 0

版本号

对于每个znode来说,均存在三个版本号:

  • dataVersion :数据版本号,每次对节点进行set操作,dataVersion的值都会增加1(即使设置的是相同的数据)。
  • cversion :子节点的版本号。当znode的子节点有变化时,cversion 的值就会增加1。
  • aclVersion ACL的版本号

以数据版本号来说明ZooKeeper中版本号的作用。每一个znode都有一个数据版本号,它随着每次数据变化而自增。ZooKeeper提供的一些API例如setData和delete根据版本号有条件地执行。多个客户端对同一个znode进行操作时,版本号的使用就会显得尤为重要。例如,假设客户端C1对znode /config写入一些配置信息,如果另一个客户端C2同时更新了这个znode,此时C1的版本号已经过期,C1调用setData一定不会成功。这正是版本机制有效避免了数据更新时出现的先后顺序问题。在这个例子中,C1在写入数据时使用的版本号无法匹配,使得操作失败。图2描述了这个情况。
20180807104346923

事务ID

对于ZooKeeper来说,每次的变化都会产生一个唯一的事务id,zxid(ZooKeeper Transaction Id)。通过zxid,可以确定更新操作的先后顺序。例如,如果zxid1小于zxid2,说明zxid1操作先于zxid2发生。
需要指出的是,zxid对于整个ZooKeeper都是唯一的,即使操作的是不同的znode。

cZxid :Znode创建的事务id。

mZxid :Znode被修改的事务id,即每次对znode的修改都会更新mZxid。

20180807104522349
在集群模式下,客户端有多个服务器可以连接,当尝试连接到一个不同的服务器时,这个服务器的状态要与最后连接的服务器的状态要保持一致。ZooKeeper正是使用zxid来标识这个状态,图3描述了客户端在重连情况下zxid的作用。当客户端因超时与S1断开连接后,客户端开始尝试连接S2,但S2延迟于客户端所识别的状态。然而,S3的状态与客户端所识别的状态一致,所以客户端可以安全连接上S3

WatchedEvent

WatchedEvent代表watcher到的事件,它包含发生了什么事件,ZooKeeper的当前连接状态以及产生事件的ZNode路径。

  • KeeperState
  • EventType
  • path

KeeperState

  • Disconnected
  • SyncConnected
  • AuthFailed
  • ConnectedReadOnly
  • SaslAuthenticated
  • Expired
  • Unknown(已废弃)
  • NoSyncConnected(已废弃)

EventType

EventType包含五种状态:

  • None
  • NodeCreated
  • NodeDeleted
  • NodeDataChanged
  • NodeChildrenChanged
    其中后四种用于表示ZNode的状态或者数据变更,而None则用于会话的状态变更
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
5月前
|
存储 分布式计算 算法
ZooKeeper
【6月更文挑战第21天】ZooKeeper
158 39
|
6月前
|
存储 消息中间件 负载均衡
Zookeeper 简单介绍
Zookeeper 简单介绍
|
6月前
|
存储 分布式计算 资源调度
ZooKeeper详解
ZooKeeper是大数据组件中的协调器,确保高可用性和一致性。它用于监控主备节点切换(如Hadoop YARN的ResourceManager,HBase的RegionServer,Spark的Master)并实现数据同步。设计基于文件系统和通知机制,通过Znodes的状态变化(创建、删除、更新、子节点变化)进行协调。ZooKeeper使用观察者模式,当Znode变化时,通知客户端。其数据结构为树形,提供CLI工具如`zkCli.sh`进行交互。ZooKeeper有三个默认端口:2181(客户端连接),2888(服务器间同步),3888(选举)。选举采用半数机制,确保集群稳定性。
103 1
ZooKeeper详解
|
5月前
|
算法 Java Apache
你真的了解Zookeeper吗?
你真的了解Zookeeper吗?
41 0
|
存储 域名解析 负载均衡
Zookeeper—应用
前言 在前面的几篇文章中,我们讲解了ZooKeeper的组成,基本功能,集群选举,ZAB协议和数据一致性。所有的设计都因应用场景而生,不结合场景的方案都是耍流氓。在今天的文章中,我们将要去了解ZK的应用,加深对ZK的认识。
118 0
|
存储 监控 Unix
一文了解Zookeeper
一文了解Zookeeper
256 0
一文了解Zookeeper
|
SQL 存储 关系型数据库
|
存储 Dubbo 网络协议
关于ZooKeeper,你好像还有不知道的事情
Dubbo 通过注册中心在分布式环境中实现服务的注册与发现,而注册中心通常采用 ZooKeeper,研究注册中心相关源码绕不开 ZooKeeper,所以学习了 ZooKeeper 的基本概念以及相关 API 操作。
关于ZooKeeper,你好像还有不知道的事情
|
存储 消息中间件 算法
ZooKeeper 到底解决了什么问题?
目标 ZooKeeper 很流行,有个基本的疑问: ZooKeeper 是用来做什么的? 之前没有ZK,为什么会诞生 ZK?
335 0
ZooKeeper 到底解决了什么问题?
zookeeper理解与应用
它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。
106 0