如何在Ubuntu HDFS上配置高可用性
导读:Ubuntu 上配置 HDFS 高可用 HA 实操指南 一 架构与前置准备 架构要点 使用 Active/Standby 双 NameNode,通过 **QJM(Quorum Journal Manager)**共享编辑日志,消除单点故...
Ubuntu 上配置 HDFS 高可用 HA 实操指南
一 架构与前置准备
- 架构要点
- 使用 Active/Standby 双 NameNode,通过 **QJM(Quorum Journal Manager)**共享编辑日志,消除单点故障。
- JournalNode 至少 3 台且为奇数,保证写入过半成功与可用性。
- ZooKeeper 集群 3/5 台配合 **ZKFC(ZooKeeper Failover Controller)**实现自动故障转移;ZKFC 需与 NameNode 同机部署。
- DataNode 向两台 NameNode 同时上报块信息,Standby 可快速接管。
- 推荐节点规划(示例)
- NameNode/ZKFC:ubuntu1、ubuntu2
- JournalNode:ubuntu1、ubuntu2、ubuntu3
- DataNode:ubuntu3、ubuntu4、ubuntu5
- 基础环境
- 关闭防火墙或放行端口(如 8020/8485/9870/2181),配置 /etc/hosts 主机映射,配置 SSH 免密,安装 JDK 1.8+,时间同步(如 chrony/ntp)。
- 安装并启动 ZooKeeper 集群(3 节点为示例)。
二 核心配置示例
- 说明
- 以下为最小可用示例,按你的实际主机名与目录调整;端口示例:QJM 8485,NameNode RPC 8020,HTTP 9870(Hadoop 3.x),ZooKeeper 2181。
- core-site.xml
<
configuration>
<
property>
<
name>
fs.defaultFS<
/name>
<
value>
hdfs://mycluster<
/value>
<
/property>
<
property>
<
name>
hadoop.tmp.dir<
/name>
<
value>
/home/hadoop/tmp<
/value>
<
/property>
<
property>
<
name>
io.file.buffer.size<
/name>
<
value>
4096<
/value>
<
/property>
<
property>
<
name>
fs.trash.interval<
/name>
<
value>
10080<
/value>
<
/property>
<
!-- ZooKeeper 地址 -->
<
property>
<
name>
ha.zookeeper.quorum<
/name>
<
value>
ubuntu1:2181,ubuntu2:2181,ubuntu3:2181<
/value>
<
/property>
<
/configuration>
- hdfs-site.xml
<
configuration>
<
!-- 基本目录 -->
<
property>
<
name>
dfs.replication<
/name>
<
value>
3<
/value>
<
/property>
<
property>
<
name>
dfs.namenode.name.dir<
/name>
<
value>
file:///home/hadoop/dfs/name<
/value>
<
/property>
<
property>
<
name>
dfs.datanode.data.dir<
/name>
<
value>
file:///home/hadoop/dfs/data<
/value>
<
/property>
<
!-- 命名服务与 NN 列表 -->
<
property>
<
name>
dfs.nameservices<
/name>
<
value>
mycluster<
/value>
<
/property>
<
property>
<
name>
dfs.ha.namenodes.mycluster<
/name>
<
value>
nn1,nn2<
/value>
<
/property>
<
!-- RPC 与 HTTP 地址 -->
<
property>
<
name>
dfs.namenode.rpc-address.mycluster.nn1<
/name>
<
value>
ubuntu1:8020<
/value>
<
/property>
<
property>
<
name>
dfs.namenode.rpc-address.mycluster.nn2<
/name>
<
value>
ubuntu2:8020<
/value>
<
/property>
<
property>
<
name>
dfs.namenode.http-address.mycluster.nn1<
/name>
<
value>
ubuntu1:9870<
/value>
<
/property>
<
property>
<
name>
dfs.namenode.http-address.mycluster.nn2<
/name>
<
value>
ubuntu2:9870<
/value>
<
/property>
<
!-- QJM 共享编辑日志 -->
<
property>
<
name>
dfs.namenode.shared.edits.dir<
/name>
<
value>
qjournal://ubuntu1:8485;
ubuntu2:8485;
ubuntu3:8485/mycluster<
/value>
<
/property>
<
property>
<
name>
dfs.journalnode.edits.dir<
/name>
<
value>
/home/hadoop/journal<
/value>
<
/property>
<
!-- 客户端故障转移代理 -->
<
property>
<
name>
dfs.client.failover.proxy.provider.mycluster<
/name>
<
value>
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider<
/value>
<
/property>
<
!-- 隔离方法(SSH 示例,需免密) -->
<
property>
<
name>
dfs.ha.fencing.methods<
/name>
<
value>
sshfence<
/value>
<
/property>
<
property>
<
name>
dfs.ha.fencing.ssh.private-key-files<
/name>
<
value>
/home/hadoop/.ssh/id_rsa<
/value>
<
/property>
<
!-- 启用自动故障转移 -->
<
property>
<
name>
dfs.ha.automatic-failover.enabled<
/name>
<
value>
true<
/value>
<
/property>
<
/configuration>
- 分发与权限
- 将 core-site.xml、hdfs-site.xml 分发到所有节点相同路径;确保 ubuntu1/ubuntu2 间 SSH 免密 与私钥路径一致;如以 root 运行,需在 start-dfs.sh/stop-dfs.sh 等脚本顶部设置用户环境变量(如 HDFS_DATANODE_USER、HDFS_NAMENODE_USER、HDFS_ZKFC_USER 等)。
三 启动与验证
- 启动顺序
- 启动 ZooKeeper(3 台)
- zkServer.sh start
- 启动 JournalNode(3 台)
- hadoop-daemon.sh start journalnode
- 格式化第一个 NameNode(仅一次)
- hdfs namenode -format
- 在另一台 NameNode 引导 Standby(首次)
- hdfs namenode -bootstrapStandby
- 初始化 ZKFC(任一 NN 执行)
- hdfs zkfc -formatZK
- 启动 HDFS
- start-dfs.sh
- 启动 ZooKeeper(3 台)
- 常用验证
- 查看进程:jps(应见到 NameNode/DataNode/JournalNode/ZKFC)
- 查看状态:hdfs haadmin -getServiceState nn1 / nn2(返回 active/standby)
- Web UI:访问 http://ubuntu1:9870 与 http://ubuntu2:9870 查看 Active/Standby 与集群概况
- 故障演练:kill -9 < Active NN 进程> 或断网,观察自动切换与恢复。
四 常见问题与排错要点
- JournalNode 无法启动或未过半:确认 3 台 JN 已启动且磁盘可写,编辑日志目录权限正确;QJM 写入需多数派成功。
- 自动故障转移失败:检查 ZooKeeper 连通性、ZKFC 是否运行、隔离方法(如 sshfence)与私钥路径是否正确;首次需执行 zkfc -formatZK。
- 两个 NameNode 同时 Active:多因未配置或失效的 fencing 方法,导致隔离不彻底;启用并验证 sshfence 能成功隔离旧 Active。
- 客户端连不通/切换慢:确认 core-site.xml 的 fs.defaultFS=hdfs://mycluster,客户端能解析 mycluster;必要时调整故障转移代理与重试策略。
- 端口与防火墙:放行 8020/8485/9870/2181;浏览器访问 9870 检查 Active/Standby 状态与 JournalNode 健康。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu HDFS上配置高可用性
本文地址: https://pptw.com/jishu/753076.html
