zookeeper基础教程
发布日期:2021-06-28 18:42:11 浏览次数:3 分类:技术文章

本文共 4363 字,大约阅读时间需要 14 分钟。

1、基本概念

在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念。我们将在本章中讨论以下主题:

1、Architecture(架构)
2、Hierarchical namespace(层次命名空间)
3、Session(会话)
4、Watches(监视)

ZooKeeper的架构

看看下面的图表。它描述了ZooKeeper的“客户端-服务器架构”。

ZooKeeper的架构

 

作为ZooKeeper架构的一部分的每个组件在下表中进行了说明。

部分 描述
Client(客户端)

客户端,我们的分布式应用集群中的一个节点,从服务器访问信息。对于特定的时间间隔,每个客户端向服务器发送消息以使服务器知道客户端是活跃的。

类似地,当客户端连接时,服务器发送确认码。如果连接的服务器没有响应,客户端会自动将消息重定向到另一个服务器。

Server(服务器) 服务器,我们的ZooKeeper总体中的一个节点,为客户端提供所有的服务。向客户端发送确认码以告知服务器是活跃的。
Ensemble ZooKeeper服务器组。形成ensemble所需的最小节点数为3。
Leader 服务器节点,如果任何连接的节点失败,则执行自动恢复。Leader在服务启动时被选举。
Follower 跟随leader指令的服务器节点。

层次命名空间

下图描述了用于内存表示的ZooKeeper文件系统的树结构。ZooKeeper节点称为 znode 。每个znode由一个名称标识,并用路径(/)序列分隔。

  • 在图中,首先有一个由“/”分隔的znode。在根目录下,你有两个逻辑命名空间 config  workers 

  • config 命名空间用于集中式配置管理,workers 命名空间用于命名。

  •  config 命名空间下,每个znode最多可存储1MB的数据。这与UNIX文件系统相类似,除了父znode也可以存储数据。这种结构的主要目的是存储同步数据并描述znode的元数据。此结构称为 ZooKeeper数据模型

分层命名空间

ZooKeeper数据模型中的每个znode都维护着一个 stat 结构。一个stat仅提供一个znode的元数据。它由版本号,操作控制列表(ACL),时间戳和数据长度组成。

  • 版本号 - 每个znode都有版本号,这意味着每当与znode相关联的数据发生变化时,其对应的版本号也会增加。当多个zookeeper客户端尝试在同一znode上执行操作时,版本号的使用就很重要。

  • 操作控制列表(ACL) - ACL基本上是访问znode的认证机制。它管理所有znode读取和写入操作。

  • 时间戳 - 时间戳表示创建和修改znode所经过的时间。它通常以毫秒为单位。ZooKeeper从“事务ID"(zxid)标识znode的每个更改。Zxid 是唯一的,并且为每个事务保留时间,以便你可以轻松地确定从一个请求到另一个请求所经过的时间。

  • 数据长度 - 存储在znode中的数据总量是数据长度。你最多可以存储1MB的数据。

Znode的类型

Znode被分为持久(persistent)节点,顺序(sequential)节点和临时(ephemeral)节点。

  • 持久节点  - 即使在创建该特定znode的客户端断开连接后,持久节点仍然存在。默认情况下,除非另有说明,否则所有znode都是持久的。

  • 临时节点 - 客户端活跃时,临时节点就是有效的。当客户端与ZooKeeper集合断开连接时,临时节点会自动删除。因此,只有临时节点不允许有子节点。如果临时节点被删除,则下一个合适的节点将填充其位置。临时节点在leader选举中起着重要作用。

  • 顺序节点 - 顺序节点可以是持久的或临时的。当一个新的znode被创建为一个顺序节点时,ZooKeeper通过将10位的序列号附加到原始名称来设置znode的路径。例如,如果将具有路径 /myapp 的znode创建为顺序节点,则ZooKeeper会将路径更改为 /myapp0000000001 ,并将下一个序列号设置为0000000002。如果两个顺序节点是同时创建的,那么ZooKeeper不会对每个znode使用相同的数字。顺序节点在锁定和同步中起重要作用。

Sessions(会话)

会话对于ZooKeeper的操作非常重要。会话中的请求按FIFO顺序执行。一旦客户端连接到服务器,将建立会话并向客户端分配会话ID 

客户端以特定的时间间隔发送心跳以保持会话有效。如果ZooKeeper集合在超过服务器开启时指定的期间(会话超时)都没有从客户端接收到心跳,则它会判定客户端死机。

会话超时通常以毫秒为单位。当会话由于任何原因结束时,在该会话期间创建的临时节点也会被删除。

Watches(监视)

监视是一种简单的机制,使客户端收到关于ZooKeeper集合中的更改的通知。客户端可以在读取特定znode时设置Watches。Watches会向注册的客户端发送任何znode(客户端注册表)更改的通知。

Znode更改是与znode相关的数据的修改或znode的子项中的更改。只触发一次watches。如果客户端想要再次通知,则必须通过另一个读取操作来完成。当连接会话过期时,客户端将与服务器断开连接,相关的watches也将被删除。

2、Zookeeper 工作流

一旦ZooKeeper集合启动,它将等待客户端连接。客户端将连接到ZooKeeper集合中的一个节点。它可以是leader或follower节点。一旦客户端被连接,节点将向特定客户端分配会话ID并向该客户端发送确认。如果客户端没有收到确认,它将尝试连接ZooKeeper集合中的另一个节点。 一旦连接到节点,客户端将以有规律的间隔向节点发送心跳,以确保连接不会丢失。

  • 如果客户端想要读取特定的znode,它将会向具有znode路径的节点发送读取请求,并且节点通过从其自己的数据库获取来返回所请求的znode。为此,在ZooKeeper集合中读取速度很快。

  • 如果客户端想要将数据存储在ZooKeeper集合中,则会将znode路径和数据发送到服务器。连接的服务器将该请求转发给leader,然后leader将向所有的follower重新发出写入请求。如果只有大部分节点成功响应,而写入请求成功,则成功返回代码将被发送到客户端。 否则,写入请求失败。绝大多数节点被称为 Quorum 

3、zkCli命令

//连接命令,-r表示即使ZooKeeper服务器集群一般以上的服务器当掉,也给客户端体统读服务zkCli.sh -timeout 5000 -r -server localhost:2181//显示所有命令h//列出目录ls ///获取指定节点的状态信息//czxid 创建该节点的事物ID//ctime 创建该节点的时间//mZxid 更新该节点的事物ID//mtime 更新该节点的时间//pZxid 操作当前节点的子节点列表的事物ID(这种操作包含增加子节点,删除子节点)//cversion 当前节点的子节点版本号//dataVersion 当前节点的数据版本号//aclVersion 当前节点的acl权限版本号//ephemeralowner 当前节点的如果是临时节点,该属性是临时节点的事物ID//dataLength 当前节点的d的数据长度//numchildren 当前节点的子节点个数stat /// (ls2 /) = (ls /) + (stat /)//获取节点内容get ///创建节点create [-s] [-e] path data acl//-s 表示是顺序节点//-e 标识是临时节点//path 节点路径//data 节点数据//acl 节点权限//退出客户端quit//set path data [version] 修改当前节点的数据内容  如果指定版本,需要和当前节点的数据版本一致//delete path [version] 删除指定路径的节点 如果有子节点要先删除子节点//rmr path 删除当前路径节点及其所有子节点//listquota path 查看路径节点的配额信息,-1表示无限制//setquota -n|-b val path 设置节点配额(比如限制节点数据长度,限制节点中子节点个数)//-n 是限制子节点个数 -b是限制节点数据长度//超出配额后,ZooKeeper不会报错,而是在日志信息中记录//tail zookeeper.out//一旦设置,不能重新设置,必须先删除再设置setquota -n 9 /studysetquota -b 16 /study//delquota [-n|-b] path 删除节点路径的配额信息 //connect host:port 和 close在当前连接中连接其他的ZooKeeper服务器和关闭服务器//history 和 redo cmdno :查看客户端这次会话所执行的所有命令 和 执行指定历史命令

4、zookeeper ACL权限及quota配额(了解即可)

一个ZooKeeper的节点(znode)存储两部分内容:数据和状态,状态中包含ACL信息。创建一个znode会产生一个ACL列表,列表中每个ACL包括:

  • 验证模式(scheme)
  • 具体内容(Id)(当scheme=“digest”时,Id为用户名密码,例如“root:J0sTy9BCUKubtK1y8pkbL7qoxSw=”)
  • 权限(perms)

ZooKeeper提供了如下几种验证模式(scheme):

  • digest:Client端由用户名和密码验证,譬如user:password,digest的密码生成方式是Sha1摘要的base64形式
  • auth:不使用任何id,代表任何已确认用户。
  • ip:Client端由IP地址验证,譬如172.2.0.0/24
  • world:固定用户为anyone,为所有Client端开放权限
  • super:在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)

注意的是,exists操作和getAcl操作并不受ACL许可控制,因此任何客户端可以查询节点的状态和节点的ACL。

节点的权限(perms)主要有以下几种:

  • Create 允许对子节点Create操作
  • Read 允许对本节点GetChildren和GetData操作
  • Write 允许对本节点SetData操作
  • Delete 允许对子节点Delete操作
  • Admin 允许对本节点setAcl操作

 

 

 

转载地址:https://blog.csdn.net/xl_1803/article/details/104072878 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:zookeeper单机版安装教程
下一篇:kafka客户端脚本windows版

发表评论

最新留言

不错!
[***.144.177.141]2024年04月18日 23时36分01秒