Ubuntu如何配置HDFS的高可用性
导读:Ubuntu上配置HDFS高可用 HA 实操指南 一 架构与前置准备 组件与角色 Active/Standby NameNode:双主备,保持元数据一致,对外提供统一命名空间。 ZooKeeper 集群:协调故障检测与自动切换(建议3或...
Ubuntu上配置HDFS高可用 HA 实操指南
一 架构与前置准备
- 组件与角色
- Active/Standby NameNode:双主备,保持元数据一致,对外提供统一命名空间。
- ZooKeeper 集群:协调故障检测与自动切换(建议3或5节点奇数台)。
- JournalNode 集群:至少3节点,持久化共享编辑日志(edits),保证两 NameNode 状态同步。
- ZKFC(DFSZKFailoverController):运行在每个 NameNode 上,借助 ZooKeeper 实现自动故障转移与健康监测。
- DataNode:存储数据块,按副本策略分布。
- 节点规划示例(可按需扩展)
- ubuntu1/ubuntu2:NameNode + ZKFC
- ubuntu3/ubuntu4/ubuntu5:JournalNode
- ubuntu3–ubuntu5:DataNode(可与 JournalNode 混部)
- Ubuntu 基础环境
- 关闭防火墙或放行端口(如 2181/2888/3888 ZooKeeper,8485 JournalNode,8020 RPC,9870 Web UI):
sudo ufw disable或按需放行。 - 配置 /etc/hosts 主机名解析,确保各节点互通。
- 配置 SSH 免密登录(至少 NameNode 之间、NameNode→各节点)。
- 安装 JDK 8/11 并配置 JAVA_HOME,安装相同版本的 Hadoop 3.x。
- 关闭防火墙或放行端口(如 2181/2888/3888 ZooKeeper,8485 JournalNode,8020 RPC,9870 Web UI):
二 安装与配置 ZooKeeper
- 下载解压并配置环境变量(略)。
- 编辑 conf/zoo.cfg(示例):
- 关键项:
tickTime=2000、dataDir=/var/lib/zookeeper、clientPort=2181 - 集群节点:
server.1=ubuntu1:2888:3888、server.2=ubuntu2:2888:3888、server.3=ubuntu3:2888:3888
- 关键项:
- 各节点 dataDir 下创建 myid 文件,内容分别为 1/2/3。
- 启动与验证(三台均执行):
- 启动:
bin/zkServer.sh start - 状态:
bin/zkServer.sh status(应见到 leader/follower)。
- 启动:
三 配置 Hadoop 与 HDFS HA
- 公共环境
- 建议统一 HADOOP_HOME 与配置文件目录,使用
scp分发到所有节点,保持版本与配置一致。 - 在 hadoop-env.sh 中设置
export JAVA_HOME=...。
- 建议统一 HADOOP_HOME 与配置文件目录,使用
- 关键配置示例(按你的主机名与路径调整)
- core-site.xml
< property> < name> fs.defaultFS< /name> < value> hdfs://mycluster< /value> < /property>< property> < name> ha.zookeeper.quorum< /name> < value> ubuntu1:2181,ubuntu2:2181,ubuntu3:2181< /value> < /property>
- hdfs-site.xml(要点)
- 命名服务与 NameNode ID
< 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>
- 共享编辑日志(JournalNode)
< property> < name> dfs.namenode.shared.edits.dir< /name> < value> qjournal://ubuntu3:8485; ubuntu4:8485; ubuntu5:8485/mycluster< /value> < /property>< property> < name> dfs.journalnode.edits.dir< /name> < value> /data/hadoop/journal< /value> < /property>
- 客户端故障转移代理
< property> < name> dfs.client.failover.proxy.provider.mycluster< /name> < value> org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider< /value> < /property>
- 隔离与防护(避免脑裂)
< 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>
- 命名服务与 NameNode ID
- workers(DataNode 列表)
- ubuntu3
- ubuntu4
- ubuntu5
- core-site.xml
- 分发配置
scp -r $HADOOP_HOME/etc/hadoop ubuntu{ 2..5} :$HADOOP_HOME/etc/- 各节点
source /etc/profile使环境变量生效。
四 启动与验证 HA
- 启动顺序
- 启动 ZooKeeper(三台):
zkServer.sh start - 启动 JournalNode(三台):
hdfs --daemon start journalnode - 格式化第一个 NameNode(仅首次):
hdfs namenode -format - 初始化共享编辑日志(仅首次):
hdfs namenode -initializeSharedEdits - 启动该 NameNode:
hdfs --daemon start namenode - 在另一 NameNode 上引导 Standby:
hdfs namenode -bootstrapStandby - 格式化 ZKFC(任一 NameNode):
hdfs zkfc -formatZK - 启动 ZKFC(两台 NameNode):
hdfs --daemon start zkfc - 启动 DataNode(三台):
hdfs --daemon start datanode - 一键启动(可选):
start-dfs.sh
- 启动 ZooKeeper(三台):
- 验证与切换测试
- 查看状态
hdfs haadmin -getServiceState nn1、hdfs haadmin -getServiceState nn2hdfs dfsadmin -report(检查 Live Nodes 与容量)- Web UI:
http://ubuntu1:9870、http://ubuntu2:9870
- 故障演练
- 终止 Active NameNode:
jps查 PID 后kill -9 < PID> - 再次检查状态,确认 Standby 自动切换为 Active,业务无中断或快速恢复。
- 终止 Active NameNode:
- 查看状态
五 常见问题与排障要点
- 端口与防火墙:确保 2181/2888/3888(ZK)、8485(JournalNode)、8020(RPC)、9870(Web)放通;必要时临时
ufw disable验证。 - 目录与数据冲突
- 重新初始化前清理 JournalNode 数据目录:
rm -rf /data/hadoop/journal/mycluster/* - 若 DataNode 未起来或 clusterID 冲突,清理 DataNode 数据目录(如
/home/hadoop/dfs/data/*)后重启。
- 重新初始化前清理 JournalNode 数据目录:
- SSH 免密与 fencing:ZKFC 需要 NameNode 间 SSH 免密;
sshfence需配置私钥路径且可无口令登录对端。 - 配置一致性:所有节点的 core-site.xml/hdfs-site.xml/workers 必须一致;变更后及时分发并重启相关进程。
- 首次启动顺序:务必先启动 JournalNode,再初始化共享编辑日志与格式化 NameNode,最后启动 ZKFC 与 DataNode。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu如何配置HDFS的高可用性
本文地址: https://pptw.com/jishu/762603.html
