阅读量:2
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.defaultFSname>
<value>hdfs://myclustervalue>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/home/hadoop/tmpvalue>
property>
<property>
<name>io.file.buffer.sizename>
<value>4096value>
property>
<property>
<name>fs.trash.intervalname>
<value>10080value>
property>
<property>
<name>ha.zookeeper.quorumname>
<value>ubuntu1:2181,ubuntu2:2181,ubuntu3:2181value>
property>
configuration>
- hdfs-site.xml
<configuration>
<property>
<name>dfs.replicationname>
<value>3value>
property>
<property>
<name>dfs.namenode.name.dirname>
<value>file:///home/hadoop/dfs/namevalue>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:///home/hadoop/dfs/datavalue>
property>
<property>
<name>dfs.nameservicesname>
<value>myclustervalue>
property>
<property>
<name>dfs.ha.namenodes.myclustername>
<value>nn1,nn2value>
property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1name>
<value>ubuntu1:8020value>
property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2name>
<value>ubuntu2:8020value>
property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1name>
<value>ubuntu1:9870value>
property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2name>
<value>ubuntu2:9870value>
property>
<property>
<name>dfs.namenode.shared.edits.dirname>
<value>qjournal://ubuntu1:8485;ubuntu2:8485;ubuntu3:8485/myclustervalue>
property>
<property>
<name>dfs.journalnode.edits.dirname>
<value>/home/hadoop/journalvalue>
property>
<property>
<name>dfs.client.failover.proxy.provider.myclustername>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
property>
<property>
<name>dfs.ha.fencing.methodsname>
<value>sshfencevalue>
property>
<property>
<name>dfs.ha.fencing.ssh.private-key-filesname>
<value>/home/hadoop/.ssh/id_rsavalue>
property>
<property>
<name>dfs.ha.automatic-failover.enabledname>
<value>truevalue>
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
或断网,观察自动切换与恢复。
四 常见问题与排错要点
- 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 健康。
以上就是关于“如何在Ubuntu HDFS上配置高可用性”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm