2025年12月06日/ 浏览 17
标题:CentOS环境下HDFS高可用(HA)架构深度配置指南
关键词:CentOS, HDFS, 高可用, Hadoop, JournalNode, ZKFC
描述:本文详细解析在CentOS 7系统中部署HDFS高可用集群的核心步骤,涵盖架构设计、关键组件配置与故障转移验证,提供可直接复用的代码模板与避坑指南。
正文:
在传统HDFS架构中,NameNode(NN)是单点故障的核心隐患。一旦NN宕机,整个集群将陷入不可用状态,直至管理员手动恢复。这对生产环境无疑是灾难性的。HDFS HA通过Active/Standby双NameNode架构彻底解决该问题,结合ZooKeeper实现故障自动切换,保障业务连续性。
环境准备
– 三台CentOS 7服务器:nn1(Active NN), nn2(Standby NN), jn1/jn2/jn3(JournalNode)
– JDK 8+、Hadoop 3.x(以3.3.4为例)
编辑每台JournalNode节点的hdfs-site.xml:
xml
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data/journalnode</value> <!-- 持久化目录 -->
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value> <!-- 启用自动故障转移 -->
</property>
启动所有JournalNode服务:
bash
hdfs --daemon start journalnode
在Active NN(nn1)执行:
bash
hdfs namenode -initializeSharedEdits -force
此命令将格式化JournalNode共享目录,建立初始元数据。
在core-site.xml中设置HA逻辑名称:
xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value> <!-- 逻辑集群名 -->
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>zk1:2181,zk2:2181,zk3:2181</value> <!-- ZK集群地址 -->
</property>
在hdfs-site.xml中定义HA细节:
xml
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value> <!-- 物理NN ID -->
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>nn1:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>nn1:9870</value>
</property>
<!-- 为nn2配置相同结构 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
在每台NN节点启动故障转移控制器:
bash
hdfs --daemon start zkfc
ZKFC将自动向ZooKeeper注册NN状态,并监听心跳。
模拟Active NN宕机:
1. 在nn1执行强制停机:
bash
sudo systemctl kill -9 namenode
2. 观察日志(或ZK CLI):
bash
zkCli.sh get /hadoop-ha/mycluster/ActiveStandbyElectorLock
30秒内nn2应接管Active状态,业务无感知。
手动主备切换(运维场景):
bash
hdfs haadmin -transitionToActive --forcemanual nn2
hdfs-site.xml中HA参数必须完全一致。 通过上述架构,HDFS集群在NameNode层面实现了99.99%的高可用性。后续可结合YARN HA与HDFS Federation进一步扩展集群容灾与吞吐能力。