ZooKeeper-数据结构(Znode)

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

图片

前面我们介绍介绍了几个常用的代理服务器,本章节我们讲来讲解Zookeeper这个中间件。

我们前面完成了Zookeeper的安装,实际上的Zookeeper的使用对象或者使用方,是各个应用程序。我们一般情况下不会直接操作Zookeeper的读写,但是我们还是对Zookeeper里面的数据存储到哪里以及是如何存储还是需要有一定的理解。

1. 什么是 Znode

Znode 是 ZooKeeper 数据模型中的基本数据节点,类似于文件系统中的文件或目录。它以树形结构存储数据,并可以包含子节点。每个 Znode 都有一个唯一的路径,用于标识其在 ZooKeeper 树中的位置,例如 /root/child1。Zookeeper的存储结构是下面这样的树形结构

图片

这里的/app1和/app1/p_1并没有从属关系。他们的本质是一样的,都是一个普通的Znode节点。

Znode 存储的数据包括:

数据内容:比如配置信息、状态信息等,他并不适合存储大量的的数据,也不适合存储频繁写的数据。

元数据:如版本号、时间戳、访问权限(ACL)等。


2. Znode 的分类

ZooKeeper 中的 Znode 主要分为以下几类,每种类型具有不同的生命周期和用途:

(1)持久节点(Persistent Znode)

特点:一旦创建,将一直存在于 ZooKeeper 中,直到被显式删除。

用途:通常用于存储长期需要保存的数据,如配置信息、服务注册信息等。

示例:/config 节点用于存储系统配置。

(2)临时节点(Ephemeral Znode)

特点:与客户端会话绑定,当客户端会话断开时,该节点会被自动删除。

用途:常用于实现分布式锁、临时状态监控等场景。

示例:/lock 节点用于实现分布式锁。

(3)持久顺序节点(Persistent Sequential Znode)

特点:具有持久性,并且在创建时会自动附加一个唯一的序列号。

用途:常用于实现分布式系统的唯一标识或顺序控制。

示例:/task-0000000001 节点用于任务队列。

(4)临时顺序节点(Ephemeral Sequential Znode)

特点:结合了临时节点和顺序节点的特性,会话断开后节点会被删除,且创建时附加序列号。

用途:适用于需要临时唯一标识的场景,如选主(Leader Election)过程。

示例:/election-0000000001 节点用于选主。


3. Znode 的特点

    树形结构:Znode 以树状形式组织,每个节点可以有多个子节点。

    数据与元数据:除了存储数据内容外,还包含版本号、时间戳等元数据。

    权限控制(ACL):每个 Znode 可以设置访问控制列表(ACL),用于限制节点的读写权限。

    监听机制(Watcher):客户端可以注册监听器,当 Znode 发生变化(如数据修改、子节点增加或删除)时,监听器会被触发。

    4. Znode 的操作

    我们日常查看操作是通过Zookeeper给我们的命令行工具进行操作,真实业务场景则是使用API操作。

    链接Zookeeper
    [root@localhost zookeeper]# ./bin/zkCli.sh
    /usr/bin/java
    Connecting to localhost:2181
    #省略部分内容
    WATCHER::
    
    WatchedEvent state:SyncConnected type:None path:null
    [zk: localhost:2181(CONNECTED) 0]

    列出Znode​​​​​​​
    #从/开始,也可以是具体路径(和Linux目录类似)ls /ls /zookeeper
    创建Znode​​​​​​​
    #前面是znode,后面是znode的数据create /myNode "Hello ZooKeeper"   #持久节点create -e /myTempNode "Temporary Data" #临时节点create -s /mySeqNode "Sequential Data" #顺序节点
    更新Znode
    set /myNode "New Data"
    删除Znode
    delete /myNode

    运维小路

    一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

    关注微信公众号《运维小路》获取更多内容。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值