首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Hadoop HDFS-ZKFailoverController(ZKFC)详细介绍

Hadoop HDFS-ZKFailoverController(ZKFC)详细介绍

作者头像
运维小路
发布2025-07-16 15:54:11
发布2025-07-16 15:54:11
2960
举报
文章被收录于专栏:运维小路运维小路

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:

Web服务器

代理服务器

ZooKeeper

Kafka

RabbitMQ

Hadoop HDFS(本章节)

前面3个小节,我们介绍了单机情况下的HDFS的3个组件,其中nn和dn无论单机还是集群都是需要的,而2nn则只在单机下才有用,后面几个我们将介绍高可用集群模式涉及到的几个组件:JournalNode,ZKFailoverController(ZKFC),本小节介绍:ZKFC。

ZKFC(ZooKeeper Failover Controller)是 Hadoop 中用于实现 HDFS(Hadoop Distributed File System)高可用性(HA)的关键组件之一,它主要负责监控 NameNode 的状态,并在必要时进行故障转移操作。以下是关于它的详细介绍。

基本原理

ZKFC 依赖于 ZooKeeper 的一些特性来实现其功能,具体如下:

  • 可靠存储与强一致性:ZooKeeper 能够可靠地存储小量数据,并提供强一致性保证,这使得 ZKFC 可以依赖它来存储和获取 NameNode 的状态等关键信息。
  • 临时节点:ZooKeeper 中的临时节点(ephemeral node)在创建它的客户端关闭后会自动删除。ZKFC 利用这一特性来实现对 Active NameNode 的选举和状态管理。
  • 事件通知:ZooKeeper 可以为节点状态的变化提供异步通知(watcher)。ZKFC 通过注册 watcher 来及时获取 NameNode 相关节点的状态变化,从而做出相应的处理。

主要模块

  • ZKFailoverController(DFSZKFailoverController):是 ZKFC 的核心驱动模块,它通过向 HealthMonitor 和 ActiveStandbyElector 注册回调函数,来订阅这两个模块的事件,并根据事件做出相应的处理,比如触发故障转移等操作。
  • HealthMonitor:主要职责是定期检查 NameNode 的健康状况。它会通过 RPC 方式周期性地调用 HAServiceProtocol 接口的 monitorHealth 方法来获取 NameNode 的状态信息。当 NameNode 的健康状况发生变化时,会通过回调函数将变化通知给 ZKFailoverController。
  • ActiveStandbyElector:用于管理 NameNode 在 ZooKeeper 上的状态。它通过 ZooKeeper 来判断哪个 NameNode 可以成为 Active 状态,具体方式是看哪个 NameNode 能够成功创建一个特定的临时锁文件(znode),成功创建的那个就成为 Active NameNode,其他的则为 Standby NameNode。同时,它会监控 ZooKeeper 上对应节点的状态变化,并将变化通知给 ZKFailoverController。
  • FailoverController:提供了进行优雅故障转移的相关功能。管理员可以通过命令行工具手工发起故障转移,此时 FailoverController 就会负责执行一系列的操作,来确保故障转移的顺利进行。

系统架构

通常情况下,NameNode 和 ZKFC 会部署在同一台物理机器上。其中,HealthMonitor、FailoverController、ActiveStandbyElector 等模块都在 ZKFC 这个 JVM 进程中,而 NameNode 则是一个单独的 JVM 进程。ZKFC 在系统中具有以下重要作用:

  • 监控与抢锁:向 ZooKeeper 尝试获取锁,成功抢到锁的 ZKFC 会让对应的 NameNode 成为 Active NameNode。同时,它会监控锁对应的 znode,当当前 Active NameNode 状态发生变化导致失锁时,会及时尝试再次抢锁,以让自己对应的 NameNode 成为 Active 状态。
  • 监控 NameNode 状态:定期检查对应 NameNode 的活性和健康状况,一旦发现 NameNode 的状态出现异常,就会通过自身的机制进行相应的处理,比如触发故障转移等。
  • 隔离其他 NameNode:当本地的 NameNode 要成为 Active NameNode 时,需要先对其他的 NameNode 进行隔离(fence)操作,确保不会同时出现多个 Active NameNode,从而保证系统的一致性和稳定性。

线程模型

ZKFC 的线程模型相对比较简单,主要包括以下三类线程:

  • 主线程:在启动所有的服务后,就进入循环等待状态,主要用于协调和管理其他线程和模块的运行。
  • HealthMonitor 线程:是一个单独的线程,它会定期向 NameNode 发送请求包,以检查 NameNode 的健康状况。当 NameNode 的状态发生变化时,该线程会回调 ZKFailoverController 注册的回调函数,通知其状态变化情况。
  • ZooKeeper 客户端线程:负责与 ZooKeeper 进行交互,通过调用 ZooKeeper 客户端 API 来监控 ZooKeeper 上节点的状态变化。当节点状态发生变化时,会回调 ZKFailoverController 的回调函数,让其做出相应的处理。

总之,ZKFC 在 Hadoop 的 HDFS 高可用架构中起着至关重要的作用,它通过与 ZooKeeper 的紧密配合,实现了对 NameNode 的健康监控和自动故障转移,确保了 HDFS 集群能够在 NameNode 出现故障时依然保持高可用性,为大数据处理提供了稳定的基础存储环境。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本原理
  • 主要模块
  • 系统架构
  • 线程模型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档