zookeeper

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6月前
|
消息中间件 分布式计算 负载均衡
ZooKeeper在哪些场景中被使用?
【6月更文挑战第21天】ZooKeeper在哪些场景中被使用?
125 38
|
6月前
|
算法 Java Apache
你真的了解Zookeeper吗?
你真的了解Zookeeper吗?
47 0
|
存储 算法 Linux
Zookeeper
 ZooKeeper 是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
153 0
|
JSON Linux Shell
zookeeper
zookeeper
162 0
|
存储 域名解析 负载均衡
Zookeeper—应用
前言 在前面的几篇文章中,我们讲解了ZooKeeper的组成,基本功能,集群选举,ZAB协议和数据一致性。所有的设计都因应用场景而生,不结合场景的方案都是耍流氓。在今天的文章中,我们将要去了解ZK的应用,加深对ZK的认识。
125 0
|
存储 设计模式 分布式计算
Zookeeper系列 (一)
Zookeeper 是 Apache 的一个分布式服务框架,是 Apache Hadoop 的一个子项目。
121 0
Zookeeper系列 (一)
|
存储 监控 Unix
一文了解Zookeeper
一文了解Zookeeper
261 0
一文了解Zookeeper
|
存储 分布式计算 数据管理
|
消息中间件 存储 分布式计算
初识ZooKeeper
特点、应用场景
591 0
|
存储 分布式计算 监控
Zookeeper介绍
一、Zookeeper概述
479 0
Zookeeper介绍