news 2026/9/9 7:26:48

HDFS集群的高可用集群一遍过!!!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HDFS集群的高可用集群一遍过!!!

目录

一.HDFS的高可用集群

1.1简单介绍

1.2部署zookeeper集群

1.2.1简单介绍

1.2.2准备工作

1.2.3下载并解压软件包

1.2.4编辑配置文件

1.2.5启动zookeeper集群节点

1.3启动HDFS高可用集群

1.3.1编辑.xml文件

1.3.2初始化集群

1.3.3启动hdfs集群

1.4Yarn高可用集群(RM节点)

1.4.1简单介绍

1.4.2编辑配置文件

1.4.3启动集群

1.4.4浏览器访问web页面

1.4.5测试yarn故障切换

1.5停止所有集群


一.HDFS的高可用集群

1.1简单介绍

1.说明:
HDFS 高可用集群就是给 HDFS 的“文件总管(NameNode)”配备了一个时刻同步数据的“影子副手(Standby)”,并借助 JournalNode 共享日志和 ZooKeeper 选举裁判,实现了存储层元数据的自动容灾,保证即使单台服务器宕机,HDFS 依然能对外提供不间断的文件读写服务。
2.作用:

在典型的HA集群中,通常有两台不同的机器充当NN。在任何时间,只有一台机器处于Active状态;另一台机器是处于Standby状态。ActiveNN负责集群中所有客户端的操作;而StandbyNN主要用于备用,它主要维持足够的状态,如果必要,可以提供快速的故障恢复。

如果同时出现两台Active,NameSpace状态将会出现分歧,这将会导致数据的丢失及其它不正确的结果。为了保证这种情况不会发生,在任何时间,JNs只允许一个NN充当writer在故障恢复期间,将要变成Active 状态的NN将取得writer的角色,并阻止另外一个NN继续处于Active状态

3.工作机制:
为了让StandbyNN的状态和ActiveNN保持同步,即元数据保持一致,它们都将会和JournalNodes守护进程通信。
当ActiveNN执行任何有关命名空间的修改,它需要持久化到一半以上的JournalNodes上(通过edits log持久化存储),而StandbyNN负责观察edits log的变化,它能够读取从JNs中读取edits信息,并更新其内部的命名空间。StandbyNN读取全部的edits可确保发生故障转移之前,是和ActiveNN拥有完全同步的命名空间状态
一旦ActiveNN出现故障,StandbyNN将会保证从JNs中读出了全部的Edits,然后切换成Active状态。
4.工作原理图:

1.2部署zookeeper集群

1.2.1简单介绍

1.说明:zookeeper集群是一个为分布式应用提供一致性服务的中央化系统。类似于分布式集群中的操作内核,负责管理集群中的各个节点的沟通和共识。同时,自身具有高可用架构,当Leader节点宕机时,会自动选举出新Leader。zookeeper集群本身不做数据存储。

注意:因为该集群采用投票方式决定新Leader,所以ZK集群中的节点必须是奇数

2.集群的角色划分:

角色名作用说明
Leader(领导者)集群的唯一写入口所有数据的请求都必须经过Leader处理,它负责发起投票并协调事务
Follower(追求者)核心参与者主要负责处理客户端的请求,同时参与投票并同步数据,也可作为新Leader的竞选者
Observer(观察者)观察员(只读)和 Follower 一样能处理读请求,提高集群的吞吐量,但它并不参与投票

3.核心作用:

1.领导者选举:

说明:在 HDFS HA 架构中,通常有两个 NameNode:一个处于Active(活跃/工作)状态,另一个处于Standby(待命/备份)状态.。

原理:当两个 NameNode 启动时,都会在 ZooKeeper 的指定目录下尝试创建同一个临时节点。谁能成功创建这个节点,谁就被选举为Active NameNode,获得“主控权”;另一个则成为 Standby,随时待命。

2.故障检测与自动切换

说明:在活跃的namenode上存在着一个组件——zkfc(zk集群的故障切换转移器)。

原理:Active 节点的 ZKFC 会定期向 ZooKeeper 发送心跳,并持续修改/刷新它持有的那个临时节点的数据。如果 Active NameNode 宕机、网络断连或 JVM(Java虚拟机)崩溃,ZKFC 的心跳就会中断。ZooKeeper 检测到该临时节点超时被自动删除时,会立刻触发新一轮选举,自动将 Standby NameNode 提升为 Active。

3.节点隔离防护:

说明:ZooKeeper 不仅负责“选出来”,还负责“按住老的”。当网络出现极端抖动时,老 Active 可能还没彻底死掉,只是与 ZK 网络不通,但它仍认为自己是 Active(脑裂问题)

原理:ZK 在触发新选举并切换后,会利用 ZK 中记录的事务日志版本号(ACL 或 Epoch),强制旧 Active 节点进行自毁,例如:强制旧 NameNode 进程退出,或禁止其继续访问共享存储(如 JournalNode),确保只有一个活跃的 namenode

1.2.2准备工作

1.完成域名解析

IP地址主机名节点
192.168.7.191server1namenode,ZK控制点,ResourceManager
192.168.7.192server2datanode,Journalnode,QuorumPeerMain
192.168.7.193server3datanode,Journalnode,QuorumPeerMain
192.168.7.194server4datanode,Journalnode,QuorumPeerMain
192.168.7.195server5namenode,ZK控制点,ResourceManager

2.关闭防火墙和selinux

systemctl disable --now firewalld #关闭防火墙 vim /etc/selinux/config #关闭selinux,并重启系统 #修改以下内容 SELINUX=Disabled

3.确认时间同步

timedatectl #查看时间同步

1.2.3下载并解压软件包

方式一:官网下载

Releases - Apache ZooKeeperhttps://zookeeper.apache.org/releases

方式二:wget下载

wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.6/apache-zookeeper-3.8.6.tar.gz ls

1.2.4编辑配置文件

1.复制模板配置文件(server1)

cd apache-zookeeper-3.8.6-bin/conf #进入zookeeper的配置目录下 cp zoo_sample.cfg zoo.cfg #生成配置文件

说明:默认情况下,是没有zoo.cfg文件的,需要你去手动复制模板,生成一份

2.编辑配置文件(sever1)

vim zoo.cfg

说明:在配置文件的尾行,根据你的数据节点(datanode)的个数,添加相应的地址IP

前面的server.1,server.2等表示数据节点的ID号,不要重复命名

后面的IP加端口号,表示你的数据节点ID对应的主机

3.为数据节点添加ID(三个数据节点)

mkdir /tmp/zookeeper #创建/tmp/zookeeper目录 echo ID > /tmp/zookeeper #添加ID号

说明:这里的myid的值,需要与上面的配置文件相对应。

例如:myid:1 -> server2(192.168.7.192)

myid:2 -> server3(192.168.7.193)

myid:3 -> server4(192.168.7.194)

1.2.5启动zookeeper集群节点

说明:在三个数据节点datanode上启动zkServer.sh脚本

cd apache-zookeeper-3.8.6-bin/bin #进入zookeeper的程序目录下 ./zkServer.sh start #启动服务 ./zkServer.sh status #查看当前节点的集群状态

说明:三个ZK节点中,一个节点为leader,其他两个节点均为follower

1.3启动HDFS高可用集群

1.3.1编辑.xml文件

1.编辑core-site.xml文件

cd hadoop vim etc/hadoop/core-site.xml

2.编辑hdfs-site.xml文件

cd hadoop vim etc/hadoop/hdfs-site.xml

3.编辑工作节点

cd hadoop vim etc/hadoop/worker

说明:在该文件下定义的节点会被作为数据节点添加进集群中。

cd hadoop bin/hdfs --daemon start journalnode

1.3.2初始化集群

1.启动journalnode节点(server2,server3,server4)

cd hadoop bin/hdfs --daemon start journalnode #启动节点 jps #查看当前的节点状态

2.格式化HDFS集群(仅在server1)

bin/hdfs namenode -format

说明:如果你之前有做过hdfs集群,这个操作会清理掉你之前的数据,会让你选择清理数据:

3.将初始化数据传送给另一个namenode节点

scp /tmp/hadoop-hadoop server5:/tmp/ #将初始化的数据传送给另一个namenode节点

说明:hadoop-hadoop目录为初始化后产生的数据,需要将他同步给另一个namenode,确保它存在该数据,确保namenode切过去时,能够正常运行

4.初始化ZK集群(仅在server1上)

bin/zkfc --formatZK

1.3.3启动hdfs集群

1.手动启动集群(仅在server1)

cd hadoop sbin/start-dfs.sh #确保启动时,无错误

注意:如果之前的文件配置有错误,导致节点无法启动。切记一定要去停止掉正在运行的集群,接着去修改配置文件,重新启动,否则会造成数据冗余

说明:当发生数据冗余时,即文件修改后,存在错误的节点,比如:server1缺乏某些节点,或者多了些节点,这时需要你手动去修改它

例如:我的配置文件已正确,现在存在数据冗余

bin/hdfs --daemon stop datanode #停止该节点上的datanode

bin/hdfs --daemon start namenode #停止该节点上的namenode

2.查看集群各节点的状态(在所有节点上执行)

说明:确保主机上的节点正确

jps

3.启动hdfs集群(仅在server1)

bin/zkCli.sh

4.查看namenode的节点状态

浏览器:主机(server1或server5)IP:9870

1.4Yarn高可用集群(RM节点)

1.4.1简单介绍

1.说明:YARN 高可用集群是指为解决 Hadoop 集群中ResourceManager(资源管理器)单点故障问题而设计的高可靠运行模式。该集群中存在一个活跃的RM节点和一个standby状态的RM节点

注意:RM节点并非是HDFS集群的必需品。如果你的HDFS集群只做冷数据存储,则无需RM节点控制。但如果既存数据又需要计算分析,那就需要RM节点分配计算资源。

2.工作机制:

YARN HA 通过引入Active/Standby(主/备)双节点架构,通常在一台物理机上部署一个 Active RM(对外提供服务),在另一台完全独立的物理机上部署一个 Standby RM(热备,时刻同步状态,随时准备接管)。整个集群同时只存在一个 Active RM,由 Standby RM 作为“影子内阁”实时监控。

3.核心作用:

1.自动选举与故障检测:Active RM 会在 ZooKeeper 上创建一个临时节点(锁)。Standby RM 监控该节点。一旦 Active 心跳消失(宕机),临时节点被删除,Standby 会立刻抢注并提升为新的 Active,整个过程无需人工干预。

2.运行状态持久化:与 HDFS HA 依赖 JournalNode 存储元数据不同,YARN HA 将当前集群正在运行的应用程序列表、已完成任务的计数器等轻量级状态信息直接存储在 ZooKeeper 的持久节点中。这使得 Standby 升主时无需加载庞大日志,切换速度通常比 HDFS HA 更快

1.4.2编辑配置文件

1.编辑 etc/hadoop/mapred-site.xml 文件

cd hadoop vim etc/hadoop/mapred-site.xml

添加以下内容:

2.编辑 etc/hadoop/yarn-site.xml 文件

cd hadoop vim etc/hadoop/yarn-site.xml

添加以下内容:

1.4.3启动集群

1.启动yarn集群(仅在server1)

sbin/start-yarn.sh

2.查看集群各节点的状态

jps

1.4.4浏览器访问web页面

说明:一般情况下,在高可用架构中,哪个RM节点先启动,它就是activate,另一个则是standby

第一个Web页面

server1IP:8088

第二个Web页面:

说明:第二个页面地址一定要输全,否则会被解析成域名,导致无法访问

server5IP:8088/cluster

第二个页面的访问地址没输全时,会出现类似下面的情况

1.4.5测试yarn故障切换

说明:

server1standby
server5active

切换后:

server1active
server5standby

1.停止server5上的RM节点

kill -9 RM节点PID

2.查看RM节点状态

说明:节点已切换到server1上,server5的web页面无法访问

3.恢复server5上的RM节点

bin/yarn --daemon start resourcemanager

1.5停止所有集群

1.停止yarn集群和dfs集群(仅在server1)

cd hadoop sbin/stop-yarn.sh #停止yarn集群 sbin/stop-dfs.sh #停止dfs集群

2.停止ZK集群(server2,server3,server4)

cd apache-zookeeper-3.8.6-bin bin/zkServer.sh stop

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 7:24:27

智能体应急响应:数字孪生与多尺度规划,打造生产级AI运维

凌晨 2 点,告警群开始刷屏。支付核心链路的错误率从 0.1% 拉到 8%,值班工程师打开三个监控面板,快速判断"哪里挂了",然后在几十条告警里找出真正的根因。这个过程中,任何一步判断失误,都会让故障…

作者头像 李华
网站建设 2026/8/30 11:42:20

地址驱动的日食可视化Web应用:原理、部署与测试

这次我们来看一个很小但很实用的 Web 项目:“Show HN: How will the Aug 12 eclipse look like from your address?”。它的目标非常明确:用户输入一个地址,页面直接算出 8 月 12 日这一天从这个地点看日食,到底是全食、偏食还是…

作者头像 李华
网站建设 2026/8/30 15:50:11

微分方程建模实战指南:从SIR模型到MATLAB求解,数学建模竞赛必备

1. 项目概述:从笔记到实战,微分方程建模的核心价值如果你正在准备数学建模竞赛,或者你的课程、科研项目里涉及到用数学模型描述现实世界的变化规律,那么“微分方程”这四个字绝对是你绕不开的核心。我当年第一次接触数学建模&…

作者头像 李华
网站建设 2026/8/30 18:58:42

AI资本支出与债务破纪录增长,开发者如何应对算力周期

过去一年里,几乎所有做 AI 相关工作的团队都遇到过同一个问题:算力预算怎么要都批不下来,但大模型 API 的价格却时不时涨一下;调一个 7B 模型要排队等 GPU,买一块卡又怕明年就被淘汰。如果你也处于这种状态&#xff0c…

作者头像 李华
网站建设 2026/8/31 4:09:20

基于YOLOv11的视频人脸检测工具:从原理到实战部署

简介:目标检测是计算机视觉的核心任务之一,旨在识别图像或视频中的特定物体并定位其位置。其原理通常基于深度学习模型,通过卷积神经网络提取特征,并预测边界框和类别。在视频分析领域,目标检测的技术价值尤为突出&…

作者头像 李华
网站建设 2026/8/30 17:21:15

如何优化CSP-J1/S1初赛答题策略

结合小学生信奥备赛、平衡校内学业与CSP备赛的背景,优化CSP-J1/S1初赛答题策略的核心是‌在2小时的有限时间内,优先保住基础分,最大化拉中高分,避免非知识性失分‌,下面为你输出可直接落地的全流程优化方案&#xff1a…

作者头像 李华