写点什么

HDFS 的 HA 以及 Yarn 的 HA 高可用

发布于: 2021 年 05 月 06 日
HDFS的HA以及Yarn的HA高可用

​ HA(High Available), 高可用,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,分为活动节点(Active)及备用节点(Standby)。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。


​ Hadoop1.X 版本,NN 是 HDFS 集群的单点故障点,每一个集群只有一个 NN,如果这个机器或进程不可用,整个集群就无法使用。为了解决这个问题,出现了一堆针对 HDFS HA 的解决方案(如:Linux HA, VMware FT, shared NAS+NFS, BookKeeper, QJM/Quorum Journal Manager, BackupNode 等)。


​ 在 HA 具体实现方法不同情况下,HA 框架的流程是一致的, 不一致的就是如何存储、管理、同步 edits 编辑日志文件。


​ 在 Active NN 和 Standby NN 之间要有个共享的存储日志的地方,Active NN 把 edit Log 写到这个共享的存储日志的地方,Standby NN 去读取日志然后执行,这样 Active 和 Standby NN 内存中的 HDFS 元数据保持着同步。一旦发生主从切换 Standby NN 可以尽快接管 Active NN 的工作。

Namenode HA 介绍

​ hadoop2.x 之后,Clouera 提出了 QJM/Qurom Journal Manager,这是一个基于 Paxos 算法(分布式一致性算法)实现的 HDFS HA 方案,它给出了一种较好的解决思路和方案,QJM 主要优势如下:


​ 不需要配置额外的高共享存储,降低了复杂度和维护成本。


​ 消除 spof(单点故障)。


​ 系统鲁棒性(Robust)的程度可配置、可扩展。


​ 基本原理就是用 2N+1 台 JournalNode 存储 EditLog,每次写数据操作有>=N+1 返回成功时即认为该次写成功,数据不会丢失了。当然这个算法所能容忍的是最多有 N 台机器挂掉,如果多于 N 台挂掉,这个算法就失效了。这个原理是基于 Paxos 算法。


​ 在 HA 架构里面 SecondaryNameNode 已经不存在了,为了保持 standby NN 时时的与 Active NN 的元数据保持一致,他们之间交互通过 JournalNode 进行操作同步。


​ 任何修改操作在 Active NN 上执行时,JournalNode 进程同时也会记录修改 log 到至少半数以上的 JN 中,这时 Standby NN 监测到 JN 里面的同步 log 发生变化了会读取 JN 里面的修改 log,然后同步到自己的目录镜像树里面,如下图:


​ 当发生故障时,Active 的 NN 挂掉后,Standby NN 会在它成为 Active NN 前,读取所有的 JN 里面的修改日志,这样就能高可靠的保证与挂掉的 NN 的目录镜像树一致,然后无缝的接替它的职责,维护来自客户端请求,从而达到一个高可用的目的。


​ 在 HA 模式下,datanode 需要确保同一时间有且只有一个 NN 能命令 DN。为此:


​ 每个 NN 改变状态的时候,向 DN 发送自己的状态和一个序列号。


​ DN 在运行过程中维护此序列号,当 failover 时,新的 NN 在返回 DN 心跳时会返回自己的 active 状态和一个更大的序列号。DN 接收到这个返回则认为该 NN 为新的 active。


​ 如果这时原来的 active NN 恢复,返回给 DN 的心跳信息包含 active 状态和原来的序列号,这时 DN 就会拒绝这个 NN 的命令。


Failover Controller :


​ HA 模式下,会将 FailoverController 部署在每个 NameNode 的节点上,作为一个单独的进程用来监视 NN 的健康状态。FailoverController 主要包括三个组件:


​ HealthMonitor: 监控 NameNode 是否处于 unavailable 或 unhealthy 状态。当前通过 RPC 调用 NN 相应的方法完成。


​ ActiveStandbyElector: 监控 NN 在 ZK 中的状态。


​ ZKFailoverController: 订阅 HealthMonitor 和 ActiveStandbyElector 的事件,并管理 NN 的状态,另外 zkfc 还负责解决 fencing(也就是脑裂问题)。


​ 上述三个组件都在跑在一个 JVM 中,这个 JVM 与 NN 的 JVM 在同一个机器上。但是两个独立的进程。一个典型的 HA 集群,有两个 NN 组成,每个 NN 都有自己的 ZKFC 进程。

发布于: 2021 年 05 月 06 日阅读数: 451
用户头像

专注于大数据技术研究 2020.11.10 加入

运营公众号:五分钟学大数据。大数据领域原创技术号,深入大数据技术

评论

发布
暂无评论
HDFS的HA以及Yarn的HA高可用