Zookeeper (Hadoop 权威指南)

Zookeeper 是一个高可用的分布式协调服务,提供组成员管理、数据模型(如短暂znode、顺序号、观察机制)、操作(如创建、删除、观察触发器、ACL)等功能。它通过Zab协议实现一致性,确保更新原子性,同时提供了会话管理、故障切换和恢复能力。在生产环境中,Zookeeper通常以复制模式运行,以提高可恢复性和性能。配置和使用Zookeeper时,要考虑服务器的放置、资源隔离以及避免性能瓶颈。
摘要由CSDN通过智能技术生成

一. ZooKeeper 组成员管理应用

假设有一组服务器用户为客户端提供某种服务。我们希望每个客户端能找到其中一台服务器,这样他们就可以使用这项服务。在这个例子中,一个挑战是如何维护这组服务器觉得成员列表。

这组服务器的成员列表显然不能存储在网络中的单个节点上,否则该节点的故障将意味着整个系统的故障(我们希望这个成员列表时高度可用的)。我们先假设已经有了一种可靠的方法来解决成员列表的存储问题。接下来,如果其中有一台服务器出现故障,我们需要解决如何从服务器成员列表将它删除的问题。某个进程需要来负责删除故障服务器,但注意不能由故障服务器自己来完成,因为故障服务器已经不再运行!

我们描述的不是一个被动的分布式数据结构,而是一个主动的,能够在某个外部事件发生时发生修改数据项状态的数据结构,ZooKeeper 提供给了这种服务。


1.1 ZooKeeper 中的组成员关系

理解ZooKeeper 的一种方式就是将其看成一个具有高可用性特征的文件系统。这个文件系统中没有文件和目录。而是统一使用“节点”(node) 的概念,称为 znode 。znode 既可以作为保存数据的容器(如同文件),也可以作为保存其他 znode 的容器(目录)。所有的 znode 构成了一个层次化的命名空间,一种自然的建立组成员列表的方式就是利用这种层次结构, 创建一个以组名为节点名的 znode 作为父节点,然后以组成员(服务器名)为节点名来创建作为子节点的 znode。如下图所示:

这里写图片描述

在这个实例中,我们没有在任何 znode 中存储数据,但在一个真实的应用中,你可以想象将成员相关的数据存储在它们的 znode 中,例如主机名。


1.2 ZooKeeper 提供的操作

  • 创建组
  • 加入组
  • 列出组成员
  • 删除组



二. ZooKeeper 服务

ZooKeeper 是一个具有高可用性的高性能协调服务。下面将从三个方面来了解这个服务:模型操作实现


2.1 数据模型

1. ZooKeeper 维护这一个树形层次结构
树中的节点被称为 znode。znode 可以用于存储数据,并且有一个与之相关联的 ACL。ZooKeeper 被设计来实现协服务(这类服务通常使用小数据文件),而不是用于大容量数据存储,因此一个 znode 能存储的数据被限制在 1 MB 以内。

2. ZooKeeper 的数据访问具有原子性
客户端在读取一个 znode 的数据时,要么读到所有的数据,要么读操作失败,不会只读到部分数据。同样,一个写操作将替换 znode 存储的所有数据。ZooKeeper 会保证写操作不成功就失败,不会出现部分写之类的情况,也就是说不会存在只保存客户端所写部分数据的情况。ZooKeeper 不支持添加操作。这些特征都输与 HDFS 所不同的。HDFS 被设计用于大容量数据存储,支持流式数据访问和添加操作。

3. znode 通过路径被引用
想 Unix 中的文件系统路径一样,在 ZooKeeper 中路径被表示成用斜杠分割的 Unicode 字符串。与 Unix 中的文件系统路径不同的是,ZooKeeper 中的路径必须是绝对路径,也就是说每条路径必须从一个斜杠字符开始。此外,所有的路径表示必须是规范的,即每条路径只有唯一的一种表示方法,不支持路径解析,例如在 Unix 中,一个具有路径 /a/b 的文件也可以通过路径 /a/./b 来表示。原因在于 “.” 在 Unix 的路径中表示当前目录。在 ZooKeeper 中 “.” 不具备这样的特殊含义,这样表示的路径名是不合法的。

在 ZooKeeper 中,路径由 Unicode 字符串构成,并且有一些限制,字符串 “zookeeper ” 是一个保留词,不能将它作为路径表示中的一部分。需要注意的是,Zookeeper 使用 /zookeeper 子树来保存管理信息,例如关于配额的信息。


2.1.1 短暂的znode

znode 有两种类型:短暂的和持久的。znode 的类型在创建时被确定并且之后不能再修改。在创建短暂 znode 的客户端会话结束时,Zookeeper 会将将短暂的 znode 删除。相比之下,持久 znode 不依赖与客户端会话,只有当客户端(不一定是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值