HDFS NameNode 高可用(HA)原理、组件与实现
一、NameNode HA 架构总览
1.1 架构目标
NameNode HA 的核心目标是:在 Active NameNode 发生故障时,Standby NameNode 能够快速接管服务,且对客户端透明,从而实现 99.99% 以上的服务可用性。
1.2 架构图
- 数据节点层:DataNode 1, DataNode 2, DataNode 3
- 协调服务层:ZooKeeper 1, ZooKeeper 2, ZooKeeper 3
- 共享存储层:JournalNode 1, JournalNode 2, JournalNode 3
- NameNode 集群:Active NameNode, Standby NameNode (均运行 ZKFC)
- 客户端层:HDFS Client
1.3 核心设计思想
| 设计要点 | 说明 |
|---|---|
| 主备模式 | 同一时间只有一个 NameNode(Active)处理客户端请求,其他为 Standby |
| 元数据同步 | Active 的修改实时同步到 Standby,确保切换时状态一致 |
| 快速故障转移 | 通过 ZooKeeper 实现自动检测和切换,秒级完成 |
| 脑裂防护 | 通过 Fencing 机制确保任何时候只有一个 Active |
二、核心组件详解
2.1 组件一览表
| 组件 | 作用 | 部署数量 | 关键技术 |
|---|---|---|---|
| Active NameNode | 处理所有客户端请求的主节点 | 1 | 元数据管理 |
| Standby NameNode | 实时同步元数据的备用节点 | 1+ | 热备、快速接管 |
| JournalNode | 存储编辑日志的分布式系统 | 3 或 5(奇数) | QJM、多数派写入 |
| ZooKeeper | 分布式协调和故障检测 | 3 或 5(奇数) | 选主、会话监控 |
| ZKFC | ZooKeeper 故障转移控制器 | 每个 NameNode 一个 | 健康检查、选主触发 |
2.2 JournalNode:共享存储的核心
JournalNode是 HA 架构中最关键的组件之一,它负责存储 NameNode 的编辑日志(EditLog)。
工作原理
Active NameNode 并行发送到所有 JournalNode
(接收并持久化)
(接收并持久化)
(接收并持久化)
等待响应
收到多数派确认 写入成功返回客户端
Standby NameNode 定期拉取新 EditLog 应用到内存元数据


