温馨提示×

Ubuntu下HDFS如何配置高可用性

小樊
45
2025-11-29 03:24:48
栏目: 智能运维

Ubuntu下HDFS高可用性配置指南

一 架构与前置准备

  • 架构要点
    • 部署2 台 NameNode(nn1/nn2)实现Active/Standby,通过QJM(Quorum Journal Manager)共享编辑日志,至少3 个 JournalNode(奇数)保障可用性;启用ZooKeeper + ZKFC实现自动故障转移;DataNode 同时向两台 NameNode 上报块信息。HA 模式下不再需要 SecondaryNameNode。建议将 ZooKeeper 与 JournalNode 分布在至少 3 台机器上,生产常见为 5 台节点(2 台 NN + 3 台 JN/ZK)。
  • 环境与网络
    • 安装 OpenJDK 8、配置 SSH 免密、统一 /etc/hosts 主机名映射、确保节点间网络互通;如启用防火墙,放行 8020/8485/9870/2181 等端口(或临时关闭以便部署)。
  • 基础安装与目录
    • 下载并解压 Hadoop(如 3.3.x),设置环境变量(JAVA_HOME、HADOOP_HOME、PATH),创建本地目录:dfs.namenode.name.dirdfs.datanode.data.dirdfs.journalnode.edits.dir

二 配置步骤

  1. 安装并启动 ZooKeeper 集群(3 台或 5 台)
    • 配置 zoo.cfg 的 server 列表,启动每台节点的 ZooKeeper 服务,验证集群状态(如 zkServer.sh status)。
  2. 配置 HDFS 核心与 HA 参数
    • core-site.xml:设置 fs.defaultFS=hdfs://(如 hdfs://mycluster),以及 ha.zookeeper.quorum=zk1:2181,zk2:2181,zk3:2181
    • hdfs-site.xml:设置 dfs.nameservicesdfs.ha.namenodes.(如 nn1,nn2)、各 NameNode 的 rpc-addresshttp-addressdfs.namenode.shared.edits.dir=qjournal://jn1:8485;jn2:8485;jn3:8485/dfs.journalnode.edits.dirdfs.client.failover.proxy.provider.(如 ConfiguredFailoverProxyProvider)、dfs.ha.automatic-failover.enabled=truedfs.ha.fencing.methods=sshfencedfs.ha.fencing.ssh.private-key-files
  3. 同步配置到所有节点
    • 将 Hadoop 配置目录分发到 nn1、nn2、jn1/2/3 等所有节点,保持一致性。
  4. 启动 JournalNode 并初始化共享编辑日志
    • 在每台 JournalNode 上执行:hdfs --daemon start journalnode;在 nn1 上执行 hdfs namenode -format 初始化元数据;随后在 nn1 上启动 NameNode(hdfs --daemon start namenode),在 nn2 上执行 hdfs namenode -bootstrapStandby 同步元数据并启动 NameNode。
  5. 初始化并启动自动故障转移
    • 在任一 NameNode 上执行:hdfs zkfc -formatZK 初始化 ZK 故障转移根节点;启动 ZKFC(hdfs --daemon start zkfc)。
  6. 启动 DataNode
    • 在各 DataNode 上执行:hdfs --daemon start datanode。
  7. 验证
    • 使用 hdfs dfsadmin -report 查看节点与容量;访问 http://:9870 查看 NameNode Web UI 与 HA 状态;执行 hdfs haadmin -getServiceState nn1nn2 确认 Active/Standby。

三 关键配置示例

  • core-site.xml
    • 设置默认文件系统为 nameservice:fs.defaultFS=hdfs://mycluster
    • 指定 ZooKeeper 仲裁:ha.zookeeper.quorum=zk1:2181,zk2:2181,zk3:2181
  • hdfs-site.xml(按 nameservice=mycluster,nn1/nn2)
    • 命名服务与 NameNode 列表:
      • dfs.nameservices=mycluster
      • dfs.ha.namenodes.mycluster=nn1,nn2
    • RPC 与 HTTP 地址(示例主机名,请替换为实际):
      • dfs.namenode.rpc-address.mycluster.nn1=nn1:8020
      • dfs.namenode.rpc-address.mycluster.nn2=nn2:8020
      • dfs.namenode.http-address.mycluster.nn1=nn1:9870
      • dfs.namenode.http-address.mycluster.nn2=nn2:9870
    • 共享编辑日志与本地目录:
      • dfs.namenode.shared.edits.dir=qjournal://jn1:8485;jn2:8485;jn3:8485/mycluster
      • dfs.journalnode.edits.dir=/var/lib/hadoop/journal
    • 客户端故障转移代理与自动切换:
      • dfs.client.failover.proxy.provider.mycluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
      • dfs.ha.automatic-failover.enabled=true
    • 隔离与 SSH fencing:
      • dfs.ha.fencing.methods=sshfence
      • dfs.ha.fencing.ssh.private-key-files=/home/hadoop/.ssh/id_rsa
    • 数据存储与副本(示例):
      • dfs.namenode.name.dir=/var/lib/hadoop/namenode
      • dfs.datanode.data.dir=/var/lib/hadoop/datanode
      • dfs.replication=3
    • 说明:上述键名与语义与 Hadoop HA 的标准配置一致,包含 nameservices/namenode IDsQJM 地址自动故障转移fencing等关键项。

四 运维与验证

  • 常用命令
    • 查看状态:hdfs dfsadmin -report;hdfs haadmin -getServiceState nn1 / nn2
    • 手动切换(慎用):hdfs haadmin -failover --forcefence --forceactive nn2 nn1
    • 启动/停止:start-dfs.sh / stop-dfs.sh;单进程:hdfs --daemon {start|stop} namenode/journalnode/datanode/zkfc
  • 故障排查要点
    • 无法选出 Active:检查 ZooKeeper 仲裁、ZKFC 是否运行、网络与防火墙、fencing 方法与密钥是否可用。
    • EditLog 不同步:确认 JournalNode 多数派存活(3/5 至少 2 台)、共享编辑目录权限与磁盘空间、NameNode 与 JN 时钟同步。
    • 客户端连不通:核对 fs.defaultFSnameservice、客户端 core-site.xml/hdfs-site.xml 与集群一致、端口(如 8020/9870)可达。

0