返回介绍

2.1 Apache ZooKeeper (ZK)

发布于 2024-09-23 22:13:01 字数 5497 浏览 0 评论 0 收藏 0

2.1.1 基本原理

简介

ZooKeeper 是一个分布式、高可用性的协调服务。主要提供两个功能:

  • 帮助系统避免单点故障,建立可靠的应用程序。
  • 提供分布式协作服务和维护配置信息。

结构

ZooKeeper 集群中的节点分为三种角色:Leader、Follower 和 Observer,其结构和相互关系如 图 1 所示。通常来说,需要在集群中配置奇数个(2N+1)ZooKeeper 服务,至少(N+1)个投票才能成功的执行写操作。

image-20191205203956037

图 1 ZooKeeper 结构

图 1 中各部分的功能说明如 表 1 所示。

表格 5 ZK 结构图说明

名称描述
Leader在 ZooKeeper 集群中只有一个节点作为集群的领导者,由各 Follower 通过 ZooKeeper Atomic Broadcast(ZAB) 协议选举产生,主要负责接收和协调所有写请求,并把写入的信息同步到 Follower 和 Observer。
FollowerFollower 的功能有两个: 每个 Follower 都作为 Leader 的储备,当 Leader 故障时重新选举 Leader,避免单点故障。 处理读请求,并配合 Leader 一起进行写请求处理。
ObserverObserver 不参与选举和写请求的投票,只负责处理读请求、并向 Leader 转发写请求,避免系统处理能力浪费。
ClientZooKeeper 集群的客户端,对 ZooKeeper 集群进行读写操作。例如 HBase 可以作为 ZooKeeper 集群的客户端,利用 ZooKeeper 集群的仲裁功能,控制其 HMaster 的“Active”和“Standby”状态。

如果集群启用了安全服务,在连接 ZooKeeper 时需要进行身份认证,认证方式有以下两种:

· keytab 方式:需要从管理员处获取一个“人机”用户,用于登录 FusionInsight HD 平台并通过认证,并且获取到该用户的 keytab 文件。

· 票据方式:从管理员处获取一个“人机”用户,用于后续的安全登录,开启 Kerberos 服务的 renewable 和 forwardable 开关并且设置票据刷新周期,开启成功后重启 kerberos 及相关组件。

image-20191205204036915

Zookeeper 中的角色主要有以下三类,如下表所示:

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 即为选举出来的 leader
  • FOLLOWING:leader 已经选举出来,当前 Server 与之同步

2.1.2 与组件的关系

ZK 和 HDFS 的配合关系

ZooKeeper 与 HDFS 的关系如 图 1 所示。

image-20191205204058095

图 ZooKeeper 和 HDFS 的关系

ZKFC(ZKFailoverController)作为一个 ZooKeeper 集群的客户端,用来监控 NameNode 的状态信息。ZKFC 进 程仅在部署了 NameNode 的节点中存在。HDFS NameNode 的 Active 和 Standby 节点均部署有 zkfc 进程。

  1. HDFS NameNode 的 ZKFC 连接到 ZooKeeper,把主机名等信息保存到 ZooKeeper 中,即“/hadoop-ha”下的 znode 目录里。先 创建 znode 目录的 NameNode 节点为主节点,另一个为备节点。HDFS NameNode Standby 通过 ZooKeeper 定时读取 NameNode 信息。
  2. 当主节点进程异常结束时,HDFS NameNode Standby 通过 ZooKeeper 感知“/hadoop-ha”目录下发生了变化,NameNode 会进行主备切换。

ZK 和 YARN 的配合关系

ZooKeeper 与 YARN 的关系如 图 2 所示。

image-20191205204117054

图 ZooKeeper 与 YARN 的关系

  1. 在系统启动时,ResourceManager 会尝试把选举信息写入 ZooKeeper,第一个成功把写入 ZooKeeper 的 ResourceManager 被选举为 Active ResourceManager,另一个为 Standby ResourceManager。Standby ResourceManager 定时去 ZooKeeper 监控 Active ResourceManager 选举信息。
  2. Active ResourceManager 还会在 ZooKeeper 中创建 Statestore 目录,存储 Application 相关信息。当 Active ResourceManager 产生故障时,Standby ResourceManager 会从 Statestore 目录获取 Application 相关信息,恢复数据。

ZK 和 HBase 的配合关系

ZooKeeper 与 HBase 的关系如 图 3 所示。

image-20191205204139697

图 ZooKeeper 和 HBase 的关系

  1. HRegionServer 以 Ephemeral node 的方式注册到 ZooKeeper 中。其中 ZooKeeper 存储 HBase 的如下信息:HBase 元数据、HMaster 地址。
  2. HMaster 通过 ZooKeeper 随时感知各个 HRegionServer 的健康状况,以便进行控制管理。
  3. HBase 也可以部署多个 HMaster,类似 HDFS NameNode,当 HMaster 主节点出现故障时,HMaster 备用节点会通过 ZooKeeper 获取主 HMaster 存储的整个 HBase 集群状 态信息。即通过 ZooKeeper 实现避免 HBase 单点故障问题的问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文