一、问题现象
- 警告日志手动执行 HA 状态管理时,系统提示自动故障转移已启用但仍强制操作13。关键警告:
WARN ha.HAAdmin: Proceeding with manual HA state management even though
automatic failover is enabled...
- NameNode 状态异常检查发现 nn1 和 nn2 均为 Standby 状态,无 Active 节点25。
二、原因分析
- 自动故障转移冲突ZooKeeper Failover Controller (ZKFC) 可能未正常运行,导致自动选举失败35。
- 配置不一致hdfs-site.xml 中自动故障转移配置 (dfs.ha.automatic-failover.enabled=true) 与实际操作冲突57。
- JournalNode 同步问题EditLog 未同步,导致 Standby 节点无法晋升为 Active28。
三、解决步骤
- 检查 ZKFC 服务
- 确保 ZKFC 进程在所有 NameNode 节点运行:
jps | grep DFSZKFailoverController
- 若无输出,需手动启动:
hadoop-daemon.sh start zkfc
```:ml-citation{ref="3,5" data="citationList"}
- 强制切换 Active 节点
- 选择任一节点强制激活(示例为 nn1):
hdfs haadmin -transitionToActive --forcemanual nn1
- 成功后验证状态:
hdfs haadmin -getServiceState nn1 # 应返回 active
```:ml-citation{ref="2,5" data="citationList"}
- 验证 JournalNode 同步
- 检查 JournalNode 日志是否有错误:
tail -n 100 $HADOOP_HOME/logs/hadoop-*-journalnode-*.log
- 确保无 IOException 或权限问题38。
- 重启 HA 服务
- 按顺序重启集群:
stop-dfs.sh
start-dfs.sh
- 观察日志是否恢复 Active-Standby 模式57。
四、预防措施
- 配置检查确认 hdfs-site.xml 中以下参数一致:
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
```:ml-citation{ref="5,7" data="citationList"}
- 监控 ZooKeeper使用 zkCli.sh 检查 ZK 集群健康状态:
echo "ruok" | nc zk-server 2181
- 预期返回