2.1 Apache ZooKeeper (ZK)
2.1.1 基本原理
简介
ZooKeeper 是一个分布式、高可用性的协调服务。主要提供两个功能:
- 帮助系统避免单点故障,建立可靠的应用程序。
- 提供分布式协作服务和维护配置信息。
结构
ZooKeeper 集群中的节点分为三种角色:Leader、Follower 和 Observer,其结构和相互关系如 图 1 所示。通常来说,需要在集群中配置奇数个(2N+1)ZooKeeper 服务,至少(N+1)个投票才能成功的执行写操作。
图 1 ZooKeeper 结构
表格 5 ZK 结构图说明
名称 | 描述 |
---|---|
Leader | 在 ZooKeeper 集群中只有一个节点作为集群的领导者,由各 Follower 通过 ZooKeeper Atomic Broadcast(ZAB) 协议选举产生,主要负责接收和协调所有写请求,并把写入的信息同步到 Follower 和 Observer。 |
Follower | Follower 的功能有两个: 每个 Follower 都作为 Leader 的储备,当 Leader 故障时重新选举 Leader,避免单点故障。 处理读请求,并配合 Leader 一起进行写请求处理。 |
Observer | Observer 不参与选举和写请求的投票,只负责处理读请求、并向 Leader 转发写请求,避免系统处理能力浪费。 |
Client | ZooKeeper 集群的客户端,对 ZooKeeper 集群进行读写操作。例如 HBase 可以作为 ZooKeeper 集群的客户端,利用 ZooKeeper 集群的仲裁功能,控制其 HMaster 的“Active”和“Standby”状态。 |
如果集群启用了安全服务,在连接 ZooKeeper 时需要进行身份认证,认证方式有以下两种:
· keytab 方式:需要从管理员处获取一个“人机”用户,用于登录 FusionInsight HD 平台并通过认证,并且获取到该用户的 keytab 文件。
· 票据方式:从管理员处获取一个“人机”用户,用于后续的安全登录,开启 Kerberos 服务的 renewable 和 forwardable 开关并且设置票据刷新周期,开启成功后重启 kerberos 及相关组件。
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 所示。
图 ZooKeeper 和 HDFS 的关系
ZKFC(ZKFailoverController)作为一个 ZooKeeper 集群的客户端,用来监控 NameNode 的状态信息。ZKFC 进 程仅在部署了 NameNode 的节点中存在。HDFS NameNode 的 Active 和 Standby 节点均部署有 zkfc 进程。
- HDFS NameNode 的 ZKFC 连接到 ZooKeeper,把主机名等信息保存到 ZooKeeper 中,即“/hadoop-ha”下的 znode 目录里。先 创建 znode 目录的 NameNode 节点为主节点,另一个为备节点。HDFS NameNode Standby 通过 ZooKeeper 定时读取 NameNode 信息。
- 当主节点进程异常结束时,HDFS NameNode Standby 通过 ZooKeeper 感知“/hadoop-ha”目录下发生了变化,NameNode 会进行主备切换。
ZK 和 YARN 的配合关系
ZooKeeper 与 YARN 的关系如 图 2 所示。
图 ZooKeeper 与 YARN 的关系
- 在系统启动时,ResourceManager 会尝试把选举信息写入 ZooKeeper,第一个成功把写入 ZooKeeper 的 ResourceManager 被选举为 Active ResourceManager,另一个为 Standby ResourceManager。Standby ResourceManager 定时去 ZooKeeper 监控 Active ResourceManager 选举信息。
- Active ResourceManager 还会在 ZooKeeper 中创建 Statestore 目录,存储 Application 相关信息。当 Active ResourceManager 产生故障时,Standby ResourceManager 会从 Statestore 目录获取 Application 相关信息,恢复数据。
ZK 和 HBase 的配合关系
ZooKeeper 与 HBase 的关系如 图 3 所示。
图 ZooKeeper 和 HBase 的关系
- HRegionServer 以 Ephemeral node 的方式注册到 ZooKeeper 中。其中 ZooKeeper 存储 HBase 的如下信息:HBase 元数据、HMaster 地址。
- HMaster 通过 ZooKeeper 随时感知各个 HRegionServer 的健康状况,以便进行控制管理。
- HBase 也可以部署多个 HMaster,类似 HDFS NameNode,当 HMaster 主节点出现故障时,HMaster 备用节点会通过 ZooKeeper 获取主 HMaster 存储的整个 HBase 集群状 态信息。即通过 ZooKeeper 实现避免 HBase 单点故障问题的问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论