操作手册 · 大数据运维

待环境验证

Hadoop 高可用与恢复演练规划

区分 QJM 日志多数派、自动切换与 fencing,核对恢复输入、隔离演练和新写入后的回切边界。

Hadoop大数据
阅读导引 · 理解后再操作

这篇知识解决什么问题

本篇将服务接管与数据找回作为两个独立目标,核对 QJM 多数派、ZKFC、隔离和客户端恢复。演练完成需要角色、日志、业务样本与恢复时间共同支撑;双 NameNode 或快照存在都只是局部条件。

共享日志单写与旧节点隔离分别核验

QJM 约束 JournalNode 写入资格,旧 Active 的陈旧读取路径仍需注意。隔离是否成功应有真实效果证据,不能只读到脚本返回成功就宣告旧节点退出服务。

元数据恢复不能代替文件内容恢复

fsimage 与 edits 描述命名空间,完整业务恢复仍需对应数据块、配置及权限依赖。恢复输入应按同一可解释窗口逐项清点,而不是只确认备份文件可下载。

进入文章正文
关联架构图解8 个组件 · 点击展开

从 Hadoop 场景图的元数据与数据节点关系出发,补画 JournalNode、ZooKeeper、ZKFC 和客户端逻辑入口。原图不替代 HA 设计,真实多数派、机架分布、fencing 和恢复副本必须由演练清单明确。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

HDFS 存储与 YARN 计算的双层架构

把 HDFS 元数据、数据块与 YARN 资源调度分开阅读:客户端直接读写 DataNode,作业由 ApplicationMaster 协调执行;维护需要同时满足数据副本和队列容量条件。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

HDFS 存储与 YARN 计算的双层架构:组件关系图把 HDFS 元数据、数据块与 YARN 资源调度分开阅读:客户端直接读写 DataNode,作业由 ApplicationMaster 协调执行;维护需要同时满足数据副本和队列容量条件。 作业与数据客户端 → NameNode:查询元数据;作业与数据客户端 → DataNode 组:直接读写数据块;NameNode → DataNode 组:块管理指令;作业与数据客户端 → ResourceManager:提交应用;ResourceManager → ApplicationMaster:分配容器资源;ApplicationMaster → NodeManager 组:协调任务执行;Prometheus → NameNode:采集存储状态;Prometheus → ResourceManager:采集队列状态;Grafana → Prometheus:查询趋势。箭头说明见下方流向解读。
逻辑参考图,只展开现有集群的核心职责;主备、JournalNode、机架与副本实例未全部展开,不代表真实部署或维护已验证。

NameNode

控制 / 治理

表示当前有效的 HDFS 元数据入口;实际主备和 JournalNode 健康必须核对。SecondaryNameNode 不能被当作热备。

查看关联工具
全部组件职责 8 个组件
NameNode
表示当前有效的 HDFS 元数据入口;实际主备和 JournalNode 健康必须核对。SecondaryNameNode 不能被当作热备。工具介绍 NameNode
DataNode 组
保存数据块并服务客户端读写,副本和机架放置需按真实拓扑核对;节点退出前评估剩余可用副本。工具介绍 DataNode 组
作业与数据客户端
客户端查询 HDFS 元数据后直接访问 DataNode;YARN 应用提交走独立计算控制路径,不把所有流量都画成经过 NameNode。
ResourceManager
管理计算资源与队列分配;排队还可能受用户配额和请求规格影响,不能仅用总体 CPU 判断。工具介绍 ResourceManager
ApplicationMaster
为本应用申请资源、跟踪任务,并与 NodeManager 协调容器执行;任务管理不由全局调度器单独承担。
Grafana
将主备、容量、块健康和排队原因关联到同一时间范围,给值班人员保留原生命令核对入口。工具介绍 Grafana
Prometheus
通过已验证的指标适配端点采集控制面、存储、计算和关键作业信号;图中仅展示核心入口观测。工具介绍 Prometheus
NodeManager 组
在计算节点管理任务容器及资源状态,维护前应按所选版本流程排空或退出调度,不能只停止进程。工具介绍 NodeManager 组
流向解读 9 条连接
  1. 1

    作业与数据客户端 NameNode

    控制 / 管理 · 查询元数据

    客户端请求文件与块位置元数据,业务数据块本身不流经 NameNode。

  2. 2

    作业与数据客户端 DataNode 组

    数据 / 请求 · 直接读写数据块

    客户端根据元数据访问 DataNode;图中聚合多个数据节点,未展开具体写入复制管线。

  3. 3

    NameNode DataNode 组

    控制 / 管理 · 块管理指令

    NameNode 管理块放置与复制,DataNode 心跳、块报告等返回关系在此简化省略。

  4. 4

    作业与数据客户端 ResourceManager

    控制 / 管理 · 提交应用

    作业提交进入 YARN 控制路径,需核对队列、配额、资源请求和业务窗口。

  5. 5

    ResourceManager ApplicationMaster

    控制 / 管理 · 分配容器资源

    ApplicationMaster 请求资源后由 ResourceManager 返回分配结果,本连线强调调度职责。

  6. 6

    ApplicationMaster NodeManager 组

    控制 / 管理 · 协调任务执行

    ApplicationMaster 与获分配节点的 NodeManager 协调启动及监控任务容器。

  7. 7

    Prometheus NameNode

    观测 / 查询 · 采集存储状态

    通过实际启用的端点或适配器观测角色、容量和块健康,并与原生命令抽样比对。

  8. 8

    Prometheus ResourceManager

    观测 / 查询 · 采集队列状态

    观测队列和应用状态,采集失败与真实资源不足分别呈现。

  9. 9

    Grafana Prometheus

    观测 / 查询 · 查询趋势

    查询存储与计算侧同时间段趋势,为单节点维护提供可复核证据。

故障域与操作边界

一个物理节点可能同时影响两层

DataNode 与 NodeManager 共置时,退出节点会同时减少存储副本与计算容量;不能只看磁盘健康或只看队列资源。

核心角色不明时停止维护

图中未展开的主备、JournalNode 和机架关系仍是前置条件。同故障域不可并行维护,副本或调度不满足时不能强制退出。

副本和快照不是独立备份

数据删除、逻辑损坏与整个故障域受损需要独立恢复路径;全量 fsck、均衡和退役还需另行评估负载。

架构依据与版本核对 2 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

适用范围与恢复目标

本文以 Apache Hadoop 3.4.1 的 HDFS QJM 高可用架构为基线,用于计划切换和灾难恢复演练前的设计核对,不提供直接切换生产节点的执行脚本。NFS HA、Observer NameNode、联邦与厂商托管形态需要按对应文档增加边界。示例没有在真实环境执行,状态为 PENDING。

先区分两个目标:高可用关注故障后服务多久恢复,灾难恢复关注哪些数据能够找回。分别定义可接受恢复时间、数据恢复点、涉及路径以及业务写入的归属。不能只用“有两台 NameNode”代替恢复目标,也不能用最近一次快照时间直接声称满足所有业务的恢复点要求。

QJM、Standby 与自动切换的关系

Active NameNode 把元数据变更写入 JournalNode 多数派,Standby 持续读取 edits。QJM 必须有可用多数派;例如三节点部署失去其中两个后不能继续满足多数写入,节点应分布在实际独立的故障域。自动切换通过 ZooKeeper 和 ZKFC 协调,JournalNode 的日志职责与 ZooKeeper 的协调职责不同。

QJM 约束共享日志单写,但旧 Active 在失去写入资格后仍可能短暂服务陈旧读取,因此 fencing 仍有意义。不能把返回成功却未隔离旧节点的脚本当作已经证明隔离有效。机制与配置边界依据 Hadoop 3.4.1 QJM HA 指南

绘制故障域与依赖清单

拓扑应标明所有 NameNode、JournalNode、ZooKeeper、ZKFC、客户端逻辑 nameservice,以及承载配置与认证的依赖。补充机架、可用区、共享磁盘、DNS 和网络路径,找出看起来多副本却共用单点的组件。以维护一个机架为例,逐项说明剩余 JournalNode 和 ZooKeeper 是否仍有多数派、客户端能否到达接管节点。

再列出 HDFS 路径与业务系统关系:Hive 等目录注册、Spark checkpoint、下游数据消费和调度器均可能依赖相同 nameservice。切换前先找到固定连接到物理 NameNode 地址的客户端;服务端成功接管并不保证这些客户端会自动恢复。

切换前做有限角色与健康核对

以下仅适用于已确认的单个 nameservice,读取角色与健康,不触发切换。-ns 显式选择命名服务,其格式可对照 Hadoop 3.4.1 通用 haadmin 用法

hdfs getconf -confKey fs.defaultFS
hdfs haadmin -ns REPLACE_WITH_NAMESERVICE -getServiceState REPLACE_WITH_NN_A
hdfs haadmin -ns REPLACE_WITH_NAMESERVICE -getServiceState REPLACE_WITH_NN_B
hdfs haadmin -ns REPLACE_WITH_NAMESERVICE -checkHealth REPLACE_WITH_NN_B

角色输出 activestandby 等说明当前查询对象报告的服务状态,不能单独证明业务连通、共享日志新鲜度和隔离有效。checkHealth 要保留退出状态与错误输出,不能仅按“终端没有文字”判为健康。另行查看同窗口的 edits 跟踪进度、JournalNode 错误、ZKFC 选举记录和已知客户端错误。命令语义见 HDFS Commands Guide

计划演练按故障类型分别组织

第一轮验证客户端经逻辑入口访问和长连接重连,第二轮验证单个 NameNode 故障,第三轮在隔离环境验证网络分区与 fencing。每轮只引入一个故障,记录触发、检测、角色变化、客户端恢复与数据核验的时间点,再撤销本轮故障条件。不要同时停止多个仲裁组件后用一次“启动成功”宣告方案可靠。

演练使用专用目录与可追踪序号,不直接借用生产数据作为试写目标。验证窗口同时覆盖读请求、文件创建与关闭、作业重试和重连后的错误比例。只在维护窗口的明确范围内实施故障注入;本文提供的是演练设计,具体执行命令应从实际部署生成并评审。

备份必须同时覆盖元数据和数据

NameNode 的 fsimage 与 edits 用于恢复命名空间,但它们不包含所有业务文件内容;只有元数据备份而没有可用 DataNode 块或独立数据副本,不能完成文件恢复。配置、认证引用、加密相关依赖和目录权限也要纳入恢复清单,秘密材料只保存受控引用,避免放入公开演练报告。

HDFS snapshot 为受支持目录保留时间点视图,适合提供误变更前的文件入口,但它仍依赖原集群和相关数据块,不能替代独立故障域的灾备副本。保留快照会影响实际可释放空间,清理评估要计算这一点。快照语义见 HDFS Snapshots

隔离恢复的验收样本如何选

按业务关键性挑选已知目录与文件,保存相同生成窗口的文件清单、大小、业务记录数或业务摘要;仅检查路径存在不足以证明内容正确。恢复环境应与生产写入入口隔离,并明确集群标识、存储位置、认证来源及计算任务的输出目标,防止恢复的作业向生产继续写数据。

用一份完整输入清单解释“能恢复到哪一刻”:元数据检查点、连续 edits、数据副本窗口和外部目录信息缺一项就记录缺口。恢复演练实际耗时应从可用备份定位开始计,到业务验收通过结束,而不是只测 NameNode 启动时间。

常见误区与事故分流

把 SecondaryNameNode 视为自动接管节点,会忽略 HA 配置与同步机制;把“只有一个 Active”视为全部健康,会忽略陈旧读取与客户端入口;把手工 transitionToActive 当作常规故障恢复,会绕开它本身不提供的 fencing。上述操作边界在官方命令指南中有明确区分,本文不以强制参数处理不确定角色。

如果只是一组 DataNode 失联,应先核查块健康与故障域,不能因为 HDFS 告警就进行 NameNode 切换。如果同窗出现多组件失联、日志多数派不可达或旧主无法隔离,停止计划演练,保留角色和日志证据并进入事故流程。日常基线可参考 HDFS 健康巡检

验收与回退边界

一次 HA 演练的完成标准应包括角色收敛、日志多数派可用、隔离结果、客户端恢复和专用样本一致性。一次灾难恢复则要另外提交恢复输入完整性、实际恢复点、业务数据检查与耗时,二者不能互相替代。未覆盖的机架故障、凭据失效等情况要明确列出,不能推断已验证。

新 Active 已承接写入后,回退必须保持 edits 连续性并走受控切换流程,不能恢复旧目录镜像后直接重新上线。灾备实例已经接收新写入时,原集群回切涉及数据重新同步和业务写入归属,不能简单更改 DNS。初学者可先阅读 Hadoop 架构基础,确认每项恢复动作影响的组件。

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. NameNode 角色已经变化,但部分客户端仍访问原物理地址并持续出错。

    只读核对
    读取客户端 URI、failover 配置与重连日志,对齐角色变化和业务错误的时间窗。
    如何判读
    服务端接管与客户端恢复存在不同边界,固定地址可能阻止自动重新连接。
  2. 多个 JournalNode 同时不可达,NameNode 角色仍显示 Active,但新建文件失败。

    只读核对
    核对实际 JournalNode 数量、可达节点和共享故障域,关联 edits 写入错误。
    如何判读
    Active 标签不能证明日志写入条件仍满足;多数派缺失时应停止计划切换并进入事故处理。
  3. 隔离恢复后目录结构存在,代表性文件却无法读取或业务汇总不一致。

    只读核对
    比对元数据、数据副本和外部目录的恢复窗口,检查样本块可读性及业务摘要。
    如何判读
    路径恢复只是局部成功;数据内容或跨系统输入缺口需要独立补齐。
常见误区与判断边界 2 项

用强制提升代替完整切换流程

手工 transitionToActive 本身不提供 fencing。角色不确定或旧节点无法隔离时,应先保存证据并处置故障,不能以强制参数消除保护检查。

新主写入后直接恢复旧镜像

新写入已经改变日志与业务状态,旧镜像不能直接作为在线回退结果。回切必须保持元数据连续性,并明确增量同步与写入归属。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 记录 RTO、RPO、业务路径与实际恢复范围,区分可用性演练和灾难恢复目标。
  • 保存 NameNode、JournalNode、ZooKeeper、ZKFC 与客户端入口的同窗角色和故障域证据。
  • 归档隔离效果、角色收敛、客户端重连与专用样本结果,并记录每轮故障的撤销情况。
  • 列明恢复输入窗口、实际耗时、新写入归属和不能直接回切的条件,注明尚未覆盖的故障类型。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。