在 Linux 环境下,Hadoop 的“容灾”通常包含**集群内部高可用(HA)和跨集群/异地灾备(DR)**两个层面。下面按实际运维常见做法系统说明。
目标:NameNode 单点故障消除
关键组件
典型架构
NameNode(Active) <-> JournalNode(3+) <-> NameNode(Standby)
ZKFC + ZooKeeper 负责自动切换
核心配置示例
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://jn1:8485;jn2:8485;jn3:8485/mycluster</value>
</property>
容灾效果
HDFS 副本机制
dfs.replication=3
机架感知(重要)
<property>
<name>net.topology.script.file.name</name>
<value>/etc/hadoop/rack-awareness.sh</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
hadoop distcp hdfs://clusterA/path hdfs://clusterB/path
hdfs dfs -createSnapshot /data snap1
hadoop distcp /data/.snapshot/snap1 remote:/data
✅ 定期演练 NameNode 故障切换
✅ 定期恢复测试(不是只备份)
✅ 监控:
✅ 文档化切换流程(人肉兜底)
| 层级 | 手段 |
|---|---|
| 进程 | NameNode HA |
| 数据 | 副本 + 机架感知 |
| 主机 | RAID + 多电源 |
| 机房 | DistCp / 异地集群 |
| 运维 | 演练 + 监控 |
如果你有 具体场景(如:单集群怎么配 HA、两个机房怎么同步、云上 Hadoop 容灾),可以直接说,我可以给你更针对性的方案。