Zookeeper介绍

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 一、Zookeeper概述

一、Zookeeper概述

Zookeeper作为Hadoop项目中的一个子项目,是Hadoop集群管理的一个必不可少的模块,它主要用来控制集群中的数据,如它管理Hadoop集群中的NameNode,还有

Hbase中Master Election、Server 之间状态同步等。

Zoopkeeper提供了一套很好的分布式集群管理的机制,就是它这种基于层次型的目录树的数据结构,并对树中的节点进行有效管理,从而可以设计出多种多样的分布式的数据管理模型。Zookeeper并不是用来专门存储数据,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。

二、Zookeeper特性

1、结构简单

类似于文件系统的树状结构

2、单系统镜像

无论客户端连接到哪一个服务器,他将看到相同的、Zookeeper试图

3、有序性

有序的事务编号,客户端的更新顺序与它们被发送的顺序相一致

4、原子性

更新操作要么成功要么失败,没有第三种结果

二、Zookeeper工作原理

Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数server的完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。

为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

每个Server在工作过程中有三种状态:LOOKING:当前Server不知道leader是谁,正在搜寻LEADING:当前Server即为选举出来的leaderfollowing:leader已经选举出来,当前Server与之同步

image.png

三、Leader工作流程

1、Leader主要有三个功能:

a.恢复数据

b.维持与Follower的心跳,接收Follower请求并判断Follower的请求消息类型

c.Follower的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理

四、Follower工作流程

1、Follower主要有四个功能:

a、向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE息)

b、接收Leader消息并进行处理

c、接收Client的请求,如果为写请求,发送给Leader进行投票返回Client结果

2、Follower的消息循环处理如下几种来自Leader的消息:

a、PING消息: 心跳消息

b、PROPOSAL消息:Leader发起的提案,要求Follower投票

c、COMMIT消息:服务器端最新一次提案的信息

d、UPTODATE消息:表明同步完成

e、REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息

f、SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。

五、Zookeeper的目录结构

image.png

1、每个znode的名称都是绝对路径名来组成的,如“/app1/p_1”等。

2、读取或写入znode中的数据都是原子操作,read会获取znode中的所有字节, write会整个替换znode中的信息.每个znode都包含一个访问控制列表(ACL)以约束该节点的访问者和权限。

3、有些znode是临时节点,临时节点在创建它的session的生命周期内存活, 当其session终止时,此类节点将会被删除。

4、zookeeper提供znode监听器的概念. Client可以在某个znode上设置监听器以监听该znode的变更. 当znode有变更时, 这些Client将会收到通知,并执行预先敲定好的函数。

六、Zookeeper的节点

1、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识

2、znode有三种类型,临时的( EPHEMERAL )、持久的( PERSISTENT )和有序的 (SEQUENTIAL)

3、znode的类型在创建时确定并且之后不能再修改znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点

4、znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本

5、节点不支持部分读写,而是一次性完整读写

6、短暂znode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点

7、持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除

8、客户端应用可以在节点上设置监视器

七、观察(watcher)

Watcher 在 zookeeper 是一个核心功能,Watcher 可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的 Watcher,从而每个客户端都很快知道它所关注的目录节点的状态发生变化,而做出相应的反应

八、Zookeeper的读写机制

zookeeper是一个由多个server组成的集群

一个leader,多个follower

每个server保存一份数据副本

全局数据一致

分布式读写

更新请求转发,由leader实施

更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行

数据更新原子性,一次数据更新要么成功,要么失败

全局唯一数据视图,client无论连接到哪个server,数据视图都是一致的

实时性,在一定事件范围内,client能读到最新数据

九、Zookeeper的API接口

String create(String path, byte[] data, List<ACL> acl, CreateMode createMode) //创建一个节点
void delete(String path, int version) //删除一个节点 
void setData(String path, byte[] data, int version) //设置一个节点的数据 
Boolean exists(String path, boolean watch) //查看一个节点的状况,如果没有返回null,可注入watcher
 byte[] getData(String path, boolean watch, Stat stat) //获取一个节点的数据, 可注入watcher
List<String> getChildren(String path, boolean watch) //获取一个节点的子节点, 可注入watcher 
void addAuthInfo(String scheme, byte[] auth) //设置权限
 Stat setACL(String path, List<ACL> acl, int version) //设置权限 
List<ACL> getACL(String path, Stat stat) //获取权限列表

十、配置管理

配置的管理在分布式应用环境中很常见,例如同一个应用系统需要多台 PC Server运行,但是它们运行的应用系统的某些配置项是相同的,如果要修改这些相同的配置项,那么就必须同时修改每台运行这个应用系统的 PC Server,这样非常麻烦而且容易出错。

将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中。

image.png

十一、命名服务

分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于人识别和记住,通常情况下用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构,既对人友好又不会重复。

Name Service 是 Zookeeper 内置的功能,只要调用 Zookeeper 的 API 就能实现

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
5月前
|
存储 分布式计算 算法
ZooKeeper
【6月更文挑战第21天】ZooKeeper
168 39
|
5月前
|
消息中间件 分布式计算 负载均衡
ZooKeeper在哪些场景中被使用?
【6月更文挑战第21天】ZooKeeper在哪些场景中被使用?
121 38
|
5月前
|
存储 Java 数据库
对于Zookeeper的一些理解
该文档介绍了如何使用ZooKeeper实现统一配置、命名服务和分布式锁以及集群管理。首先,为了解决多个系统重复配置的问题,提出了抽取公共配置到`common.yml`并存储在ZooKeeper中的方法,系统通过监听ZNode变化实时更新配置。接着,详细说明了配置管理的实现步骤,包括在服务器端将配置同步到ZooKeeper,以及客户端监听配置变更。此外,还解释了命名服务如何根据名称获取服务地址,并以域名访问为例进行了说明。最后,讨论了ZooKeeper实现的两种分布式锁策略,并阐述了其在集群管理中的应用,如检测节点状态变化和选举Master节点。
|
6月前
|
存储 分布式计算 资源调度
ZooKeeper详解
ZooKeeper是大数据组件中的协调器,确保高可用性和一致性。它用于监控主备节点切换(如Hadoop YARN的ResourceManager,HBase的RegionServer,Spark的Master)并实现数据同步。设计基于文件系统和通知机制,通过Znodes的状态变化(创建、删除、更新、子节点变化)进行协调。ZooKeeper使用观察者模式,当Znode变化时,通知客户端。其数据结构为树形,提供CLI工具如`zkCli.sh`进行交互。ZooKeeper有三个默认端口:2181(客户端连接),2888(服务器间同步),3888(选举)。选举采用半数机制,确保集群稳定性。
135 1
ZooKeeper详解
|
运维 分布式计算 算法
Zookeeper解读
Zookeeper解读
67 0
|
JSON Linux Shell
zookeeper
zookeeper
159 0
|
存储 监控 Unix
一文了解Zookeeper
一文了解Zookeeper
261 0
一文了解Zookeeper
|
存储 消息中间件 算法
ZooKeeper 到底解决了什么问题?
目标 ZooKeeper 很流行,有个基本的疑问: ZooKeeper 是用来做什么的? 之前没有ZK,为什么会诞生 ZK?
338 0
ZooKeeper 到底解决了什么问题?
|
存储 分布式计算 监控
Zookeeper介绍
一、Zookeeper概述
205 0
Zookeeper介绍
zookeeper理解与应用
它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。
106 0