阅读量:218
以下是在CentOS上实现HDFS高可用性的核心方案,基于ZooKeeper和JournalNode实现故障自动切换:
-
集群规划
- 至少部署 2个NameNode(1个Active,1个Standby)和 3个JournalNode(奇数节点确保数据一致性)。
- 所有节点需在同一局域网,配置静态IP并确保网络互通。
-
基础环境准备
- 安装JDK 8+和Hadoop 3.x+,配置环境变量。
- 配置节点间免密登录,便于SSH通信。
-
ZooKeeper集群配置
- 下载并解压ZooKeeper,在每个节点的
conf/zoo.cfg中配置集群信息(如server.1=node1:2888:3888)。 - 在每个节点的
dataDir目录下创建myid文件,写入唯一ID(如节点1写1)。 - 启动ZooKeeper服务:
zkServer.sh start。
- 下载并解压ZooKeeper,在每个节点的
-
HDFS高可用配置
- 修改
hdfs-site.xml:dfs.nameservices:指定集群名称(如mycluster)。dfs.ha.namenodes.mycluster:列出NameNode节点(如nn1,nn2)。dfs.namenode.rpc-address/http-address:配置Active和Standby节点的RPC和HTTP地址。dfs.namenode.shared.edits.dir:指向JournalNode集群(如qjournal://node1:8485;node2:8485;node3:8485/mycluster)。dfs.client.failover.proxy.provider:设置为ConfiguredFailoverProxyProvider,启用自动故障转移。
- 修改
core-site.xml:fs.defaultFS:指向集群名称(如hdfs://mycluster)。
- 修改
-
初始化与启动
- 在Active NameNode上执行:
hdfs namenode -format,初始化元数据。 - 在Standby NameNode上执行:
hdfs namenode -bootstrapStandby,同步元数据。 - 启动JournalNode服务:
hdfs --daemon start journalnode。 - 启动ZooKeeper Failover Controller(ZKFC):
hdfs zkfc -formatZK,并设置开机自启。
- 在Active NameNode上执行:
-
验证与测试
- 通过
hdfs dfsadmin -report查看集群状态,确认NameNode状态为active/standby。 - 模拟Active NameNode故障(如停止服务),观察Standby节点是否自动接管。
- 通过
-
监控与维护
- 部署Prometheus+Grafana监控集群状态,重点关注NameNode存活、JournalNode数据同步延迟等指标。
- 定期备份NameNode元数据和JournalNode数据,制定灾难恢复计划。
关键组件说明:
- ZooKeeper:监控NameNode状态,触发故障转移。
- JournalNode:存储NameNode的编辑日志,确保元数据一致性。
- 自动故障转移:通过ZKFC实现秒级切换,避免人工干预。
参考来源: