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.191 | server1 | namenode,ZK控制点,ResourceManager |
| 192.168.7.192 | server2 | datanode,Journalnode,QuorumPeerMain |
| 192.168.7.193 | server3 | datanode,Journalnode,QuorumPeerMain |
| 192.168.7.194 | server4 | datanode,Journalnode,QuorumPeerMain |
| 192.168.7.195 | server5 | namenode,ZK控制点,ResourceManager |

2.关闭防火墙和selinux

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

3.确认时间同步

bash 复制代码
timedatectl    #查看时间同步

1.2.3下载并解压软件包

方式一:官网下载

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

方式二:wget下载

bash 复制代码
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.6/apache-zookeeper-3.8.6.tar.gz
ls

1.2.4编辑配置文件

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

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

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

2.编辑配置文件(sever1)

bash 复制代码
vim zoo.cfg

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

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

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

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

bash 复制代码
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脚本

bash 复制代码
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文件

bash 复制代码
cd hadoop
vim etc/hadoop/core-site.xml

2.编辑hdfs-site.xml文件

bash 复制代码
cd hadoop
vim etc/hadoop/hdfs-site.xml

3.编辑工作节点

bash 复制代码
cd hadoop
vim etc/hadoop/worker

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

bash 复制代码
cd hadoop
bin/hdfs --daemon start journalnode

1.3.2初始化集群

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

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

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

bash 复制代码
bin/hdfs namenode -format

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

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

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

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

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

bash 复制代码
bin/zkfc --formatZK 

1.3.3启动hdfs集群

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

bash 复制代码
cd hadoop
sbin/start-dfs.sh     #确保启动时,无错误

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

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

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

bash 复制代码
bin/hdfs --daemon stop datanode    #停止该节点上的datanode
bash 复制代码
bin/hdfs --daemon start namenode    #停止该节点上的namenode

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

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

bash 复制代码
jps

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

bash 复制代码
bin/zkCli.sh 

4.查看namenode的节点状态

bash 复制代码
浏览器:主机(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 文件

bash 复制代码
cd hadoop
vim etc/hadoop/mapred-site.xml

添加以下内容:

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

bash 复制代码
cd hadoop
vim etc/hadoop/yarn-site.xml

添加以下内容:

1.4.3启动集群

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

bash 复制代码
sbin/start-yarn.sh

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

bash 复制代码
jps

1.4.4浏览器访问web页面

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

第一个Web页面

bash 复制代码
server1IP:8088

第二个Web页面:

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

bash 复制代码
server5IP:8088/cluster

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

1.4.5测试yarn故障切换

说明:

|---------|---------|
| server1 | standby |
| server5 | active |

切换后:

|---------|---------|
| server1 | active |
| server5 | standby |

1.停止server5上的RM节点

bash 复制代码
kill -9 RM节点PID

2.查看RM节点状态

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

3.恢复server5上的RM节点

bash 复制代码
bin/yarn --daemon start resourcemanager

1.5停止所有集群

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

bash 复制代码
cd hadoop
sbin/stop-yarn.sh    #停止yarn集群
sbin/stop-dfs.sh     #停止dfs集群

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

bash 复制代码
cd apache-zookeeper-3.8.6-bin
bin/zkServer.sh stop
相关推荐
Vcaker1 小时前
Linux学习22-openstack部署与使用
linux·运维·学习
小周学学学1 小时前
vmware-horizon第四章:事件数据库配置(docker)
运维·docker·容器
姓刘的哦2 小时前
STM32的启动流分析
linux·运维·arm开发
2601_949499942 小时前
芯瑞科技 DT‑1414完全兼容HFBR‑1414TZ光模块国产化优选方案深度解析(工程师视角)
运维·网络·人工智能·科技·光模块
一路向北finish2 小时前
《CentOS7 OpenStack Mitaka 全栈部署实战:双节点搭建全流程与典型故障排坑指南》
运维·mysql·serverless·云计算·openstack
XUEYUAN52122 小时前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
guo_wen_qiang2 小时前
mac中iTerm有没有类似xshell远程连接服务器的用户名密码方式,不用每次都要输入用户密码
运维·服务器·macos
xzl042 小时前
Ubuntu24.04 生产环境 Docker(全国内源)
运维·docker·容器
lajidecrd2 小时前
Ubuntu 24.04 LTS安装
linux·运维·ubuntu