作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
前面我们介绍介绍了几个常用的代理服务器,本章节我们讲来讲解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
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。