HA架构的组成和原理

一、HA架构(High Availability,高可用性架构)是什么?

HA架构是一种系统设计模式,旨在确保服务即使在部分组件发生故障时也能持续运行,从而避免因单点故障导致的服务中断。

通俗理解:就像家里的电路,如果只有一条线路供电,一旦跳闸家里就断电;但如果有备用线路自动切换,就可以继续使用电器。HA就是给系统加上“备用线路”。

HA的主要目标:

  • 避免单点故障(SPOF)
  • 实现故障自动切换(Failover)
  • 提供快速恢复能力

二、HA架构组成部分及其任务

我们以HDFS和YARN为例来说明HA架构的组成与各组件的任务。


(一)HDFS HA架构组成

1. Active NameNode(主NameNode)
  • 角色:主节点
  • 功能
    • 处理客户端的所有读写请求
    • 管理文件系统的命名空间(Namespace)
    • 维护文件到数据块(Block)的映射关系(即告诉客户端相关Block放在哪里)

命名空间(Namespace):指的是文件系统的目录结构,包括文件名、权限、路径等信息。

举个例子:就像图书馆管理员,他知道每本书叫什么名字,这本书分成了几页,这些页分别放在哪几个书架上。

2. Standby NameNode(备NameNode)
  • 角色:热备份节点
  • 功能
    • 不对外提供服务
    • 实时同步Active NameNode的状态
    • 在故障发生时迅速接管职责,实现无缝切换

热备份(Hot Standby):指备用设备已经启动并处于准备状态,随时可以接替主设备的工作。

举个例子:就像飞机上的副驾驶,平时不操作飞机,但一旦飞行员无法工作,他可以立即接手飞行。

3. JournalNodes(日志节点)
  • 角色:共享编辑日志存储节点
  • 功能
    • 存储由Active NameNode产生的编辑日志(EditLog)
    • Standby NameNode通过JournalNodes获取最新的编辑日志,保持与Active NameNode状态一致

编辑日志(EditLog):记录对HDFS文件系统所做的每一次更改(如创建、删除、修改文件等)。

为什么需要三个JournalNodes?

  • 使用奇数机制(至少3个)保证数据一致性
  • 类似于投票机制,防止脑裂(Split Brain),确保只有一个NameNode是活跃的
4. ZooKeeper Failover Controller (ZKFC)
  • 角色:故障切换控制器
  • 功能
    • 每个NameNode运行一个ZKFC实例
    • 负责监控NameNode的健康状况
    • 在检测到Active NameNode失效时触发故障转移过程

ZKFC(ZooKeeper Failover Controller):连接ZooKeeper的控制组件,用于选举新主节点。

举个例子:像裁判员,负责判断主节点是否“受伤”,并决定谁来替补。

5. ZooKeeper(分布式协调服务)
  • 角色:集群协调中心
  • 功能
    • 用于选举新的Active NameNode
    • 提供分布式锁、状态监控、心跳检测等功能

ZooKeeper:是一个轻量级的分布式协调服务,常用于集群中节点之间的通信与协调。

举个例子:就像会议主持人,确保大家说话有序、意见统一。


(二)YARN HA架构组成

1. ResourceManager(资源管理器)
  • 角色:YARN的核心调度者
  • 功能
    • 管理整个集群的资源(CPU、内存等)
    • 调度应用程序(如MapReduce、Spark任务)
    • 接收来自ApplicationMaster的任务请求

ResourceManager(RM):相当于公司的人力资源部门,分配员工(资源)去完成不同项目(任务)。

2. Standby ResourceManager(备RM)
  • 角色:热备份节点
  • 功能
    • 监听Active RM的状态
    • 准备好接管资源调度职责
    • 故障时快速切换,保证应用继续执行
3. Shared Storage for ResourceManager State(共享存储)
  • 角色:状态持久化存储
  • 功能
    • 存放ResourceManager的状态信息(如应用程序列表、任务进度)
    • 故障切换时,新激活的RM可以从这里恢复之前的状态

共享存储(Shared Storage):多个RM实例都能访问的同一个存储位置,比如NFS、HDFS或数据库。

举个例子:相当于HR部门的电子档案库,即使换人上班,也能查到之前的员工资料和项目进度。


三、HA架构是如何协同工作的?

我们以HDFS HA为例,说明各组件如何协同运作:

正常运行阶段:

  1. Active NameNode处理客户端请求,将每次变更写入JournalNodes。
  2. Standby NameNode定期从JournalNodes拉取EditLog,更新自己的元数据副本,保持与Active NameNode同步。
  3. ZKFC监控NameNode状态,同时向ZooKeeper注册节点状态。

故障发生阶段:

  1. ZKFC检测到Active NameNode不可用(如进程崩溃、网络断开等)。
  2. 向ZooKeeper发起故障切换请求。
  3. ZooKeeper选举出一个新的Active NameNode(通常是原来的Standby)。
  4. 新的Active NameNode加载最新的FsImage和EditLog,重建完整的命名空间。
  5. 开始接收客户端请求,服务恢复正常。

四、HA架构的优缺点及原因分析

优点 原因
提高系统可靠性 即使某个关键节点发生故障,系统也能继续运行,减少了服务中断的风险。
快速恢复能力 故障发生后,备用节点可以迅速接管服务,最大限度地减少业务影响。
缺点 原因
增加复杂度 需要额外的组件(如JournalNodes、ZKFC等)和配置,增加了系统的复杂性。
成本增加 更多的硬件资源需求以及更复杂的运维管理可能导致成本上升。

五、实际应用场景示例

场景背景:

某大型电商平台每天产生海量用户行为日志,需进行实时推荐和离线分析。平台采用Hadoop生态系统构建大数据平台,要求7x24小时不间断运行。

HA部署方案:

  • HDFS HA:部署一对NameNode(1 Active + 1 Standby),搭配3个JournalNodes和ZooKeeper集群。
  • YARN HA:部署两个ResourceManager(1 Active + 1 Standby),使用HDFS作为共享存储保存RM状态。

运行流程:

  1. 数据分析师提交Spark任务到YARN集群。
  2. 如果Active ResourceManager宕机,Standby RM会立即接管,继续执行未完成任务。
  3. 如果Active NameNode出现问题,Standby NameNode自动切换为主节点,保证数据可读写。
  4. 用户无感知服务中断,平台持续稳定运行。

六、补充问题:NN和RM为什么会宕机?

1. NameNode(NN)为什么会宕机?

  • 硬件故障:服务器硬盘损坏、电源故障、主板损坏等。
  • 软件异常:JVM崩溃、OOM(内存溢出)、Bug导致程序退出。
  • 网络问题:与其他节点通信中断,被误判为宕机。
  • 负载过高:处理大量并发请求时,响应延迟甚至停止响应。
  • 人为操作失误:误删配置文件、错误升级等。

举例:就像电脑突然蓝屏关机,NameNode也可能因为某些异常而停止工作。


2. ResourceManager(RM)为什么会宕机?

  • 资源耗尽:当RM管理的资源过多(如成千上万任务),内存或CPU不足导致崩溃。
  • 任务堆积:大量任务排队等待调度,RM压力过大。
  • 配置错误:如调度策略配置不当,引发死锁或无限循环。
  • 外部依赖失败:如共享存储不可用、ZooKeeper连接失败等。
  • 版本兼容性问题:升级过程中版本冲突,导致RM无法正常运行。

举例:就像交通指挥中心突然瘫痪,导致整座城市的交通陷入混乱。


总结

HA架构通过引入备用节点、共享日志、故障探测与自动切换机制,有效解决了HDFS NameNode和YARN ResourceManager的单点故障问题,显著提高了系统的可靠性和稳定性。

虽然它带来了更高的复杂性和成本,但在对高可用性有严格要求的大数据平台中,HA架构是不可或缺的设计。

下期讲解

  • HDFS Federation(联邦)架构
  • YARN的Capacity Scheduler调度策略
  • ResourceManager的共享存储具体实现方式

你可能感兴趣的:(架构,hadoop,大数据,分布式,yarn)