悠悠楠杉
HDFS高可用性在CentOS上的深度配置指南
一、HDFS高可用架构核心原理
传统HDFS架构中,NameNode存在单点故障(SPOF)风险。高可用(HA)方案通过"Active-Standby双NameNode+共享存储"解决该问题,其核心组件包括:
- JournalNode集群:基于QJM(Quorum Journal Manager)实现EditLog共享
- Zookeeper集群:负责选举监控和故障自动转移
- ZKFC进程:每个NameNode上的守护进程,通过ZK完成健康监测
二、CentOS 7环境准备
2.1 系统基础配置
bash
关闭防火墙(生产环境需配置规则)
systemctl stop firewalld
systemctl disable firewalld
设置主机名解析
echo "192.168.1.101 nn01" >> /etc/hosts
echo "192.168.1.102 nn02" >> /etc/hosts
echo "192.168.1.103 jn01" >> /etc/hosts
2.2 依赖安装
bash
所有节点安装JDK
yum install -y java-1.8.0-openjdk-devel
配置SSH互信(重点确保NameNode间无密码登录)
ssh-keygen -t rsa
ssh-copy-id nn01
ssh-copy-id nn02
三、关键配置步骤详解
3.1 配置JournalNode服务
在hdfs-site.xml
中增加:
xml
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://jn01:8485;jn02:8485;jn03:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/data/hadoop/journal</value> <!-- 需提前创建目录 -->
</property>
3.2 Zookeeper集成配置
xml
<!-- 在hdfs-site.xml中 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>zk01:2181,zk02:2181,zk03:2181</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
3.3 初始化HA状态
bash
在JournalNode节点启动服务
hadoop-daemon.sh start journalnode
格式化第一个NameNode
hdfs namenode -format -clusterId mycluster
同步第二个NameNode
hdfs namenode -bootstrapStandby
四、故障转移实战测试
手动触发切换:
bash hdfs haadmin -transitionToStandby --forcemanual nn01
模拟崩溃测试:bash
kill -9jps | grep NameNode | awk '{print $1}'
观察ZKFC日志自动切换过程
tail -f /var/log/hadoop/zkfc.log
五、生产环境优化建议
- 网络隔离:将JournalNode部署在独立物理机,避免与DataNode竞争带宽
- 监控指标:重点关注:
- JournalNode的RPC延迟
- ZKFC的health-check周期
- NameNode的GC时间
- 备份策略:定期对ZK的HA状态进行导出备份
六、典型问题排查
案例1:Failover超时
▸ 检查项:
- Zookeeper会话超时时间(建议≤30s)
- 网络延迟(ping/jitter测试)
案例2:EditLog不同步
▸ 解决方案:
bash
恢复QJM数据
hdfs namenode -initializeSharedEdits