阅读量:2
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
fs.defaultFS hdfs://mycluster ha.zookeeper.quorum ubuntu1:2181,ubuntu2:2181,ubuntu3:2181
- hdfs-site.xml(要点)
- 命名服务与 NameNode ID
dfs.nameservices mycluster dfs.ha.namenodes.mycluster nn1,nn2
- RPC 与 HTTP 地址
dfs.namenode.rpc-address.mycluster.nn1 ubuntu1:8020 dfs.namenode.rpc-address.mycluster.nn2 ubuntu2:8020 dfs.namenode.http-address.mycluster.nn1 ubuntu1:9870 dfs.namenode.http-address.mycluster.nn2 ubuntu2:9870
- 共享编辑日志(JournalNode)
dfs.namenode.shared.edits.dir qjournal://ubuntu3:8485;ubuntu4:8485;ubuntu5:8485/mycluster dfs.journalnode.edits.dir /data/hadoop/journal
- 客户端故障转移代理
dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
- 隔离与防护(避免脑裂)
dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files /home/hadoop/.ssh/id_rsa
- 启用自动故障转移
dfs.ha.automatic-failover.enabled true
- 命名服务与 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 - 再次检查状态,确认 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。
以上就是关于“Ubuntu如何配置HDFS的高可用性”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm