深入解析ZooKeeper核心机制与应用(上)

发布于:2025-09-09 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

前言

应用场景:

ZK启动相关指令

zk中数据的存储结构

Znode的结构

Znode 的类型

数据持久化机制


前言

        zk是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一直复杂的过程,zk通过简单的架构和API 解决了这个问题。zk 运行使开发人员专注于核心应用程序逻辑,而不用担心应用程序的分布式特性。

应用场景:

分布式协调组件 协调分布式系统中的状态

分布式锁 zk可以做到强一致性

无状态化实现 可以将无状态信息存储在zk 中,分布式服务直接去zk中获取相关信息。

ZK启动相关指令

启动zk:

zkServer.sh start

关闭zk:

zkServer.sh stop

看运行状态:

 zkServer.sh status

zk 客户端连接:

 zkClient.sh

zk中数据的存储结构

zk中的数据是保存在节点(Znode)上的,多个znode之间构成一棵树形的目录结构。

树是由节点所组成,zk的数据存储也同样基于节点,这种节点就叫做Znode;但是不同于树的节点,Znode 的引用方式是路径引用,类似于文件路径:/a/b;这种层级结构,让每一个Znode节点拥有唯一的路径,就像命名空间一样,对不同的信息做出清晰的隔离。如图:

Znode的结构

znode包含下面四个部分

Znode 的类型

1、持久节点 :(create[节点][存储的值(可选)]

会话结束后依然存在。保存数据。(用于配置文件)

2、持久序号节点:(create -s[节点])

兼具持久节点的特征。自创建出的节点,根据先后顺序,会在节点之后带上一个数值:越后执行,这个数值越大。适合于分布式锁的应用场景(单调递增)。

3、临时节点

创建一个临时节点后,如果创建节点的会话结束,该节点会被自动的删除。通过这个特性,zk可以实现服务的注册与发现。临时节点通过心跳机制,告诉zk服务器自己还存活着。

4、临时序号节点(create -es[节点]或create -e -s节点])兼具临时节点+序号节点的特征总和。

5、容器节点(create -c「节点])

是在3.5.3版本新增的节点。当我们创建完容器节点后,如果该节点下没有任何子节点那么60秒后,该容器节点就会被zk删除。

6、 TTL节点(create -t|毫秒数]|节点])可以指定节点的到期时间,到期后会被zk删除。需要通过系统配置extendedTypesEnabled=true开启。

数据持久化机制

ZooKeeper的数据是在内存中运行的,它提供了两种持久化机制:

1、事务日志

ZooKeeper把执行的命令以日志的形式保存在dataLogDir指定的路径中的文件里,如果没有指定dataLogDir,则按照dataDir指定的路径。

2、数据快照

ZooKeeper会在一定的时间间隔内做一次内存数据的快照,把这段时间的内存数据保存到快照文件中。

        ZooKeeper通过上面的两种形式的持久化,在恢复时先恢复快照文件中的数据到内存中,再用日志文件中的数据做增量恢复,这样可以加快恢复速度。查看事务日志和数据快照文件,如下:

常用指令

官方文档zk常用指令官方文档

查询某个节点下所有“一级”节点ls [节点路径]

查询某节点下“所有”节点ls -R [节点路径]

查询节点上存储的值get [节点路径]

查询节点的详细信息get -s [节点路径]常 用 指 令 - 2

设置/修改节点上存储的值set [节点路径] [存储的值]

删除节点(删除某节点,并且该节点下没有子节点)delete [节点路径]

删除节点(删除某节点以及节点下的所有子节点)deleteall [节点路径]

乐观锁删除(如果删除的版本不匹配,异常提醒:version No is not valid)delete -v [dataVersion] [节点路径

下一节 介绍Curator,读写锁及集群等


网站公告

今日签到

点亮在社区的每一天
去签到