一:概述
Hadoop HA机制原理,主要分为NameNode HA以及Yarn HA。
Hadoop HA环境搭建
背景
在Hadoop 2.0之前,只有namenode一个节点,存在单点问题,namenode单点故障,难以应用与在线场景,也不利于生产上维护集群。namenode压力过大,且内存受损,影响系统延展性。0
什么是HA
HA:高可用集群(High Availability Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降到最小。
HA机制两种方式(NFS、QJM)
在hadoop2.0引入了HA机制。hadoop2.0的HA机制官方介绍了有2种方式,一种是NFS(Network File System)方式,另外一种是QJM(QuorumJournal Manager)方式。
NFS
NFS(Network File System)
在QJM出现之前,为保障集群的HA,设计的是一种基于NAS的共享存储机制,即主备NameNode间通过NAS进行元数据的同步。该方案有什么缺点呢,主要有以下几点:
1. 定制化硬件设备:必须是支持NAS的设备才能满足需求
2. 复杂化部署过程:在部署好NameNode后,还必须额外配置NFS挂载、定制隔离脚本,部署易出错
3. 简陋化NFS客户端:Bug多,部署配置易出错,导致HA不可用
所以对于替代方案而言,也必须解决NAS相关缺陷才能让HA更好服务。即设备无须定制化,普通设备即可配置HA,部署简单,相关配置集成到系统本身,无需自己定制,同时元数据的同步也必须保证完全HA,不会因client问题而同步失败。所以引出了QJM方式。
QJM
QJM全称是Quorum Journal Manager, 由JournalNode(JN)组成,一般是奇数点结点组成。每个JournalNode对外有一个简易的RPC接口,以供NameNode读写EditLog到JN本地磁盘。当写EditLog时,NameNode会同时向所有JournalNode并行写文件,只要有N/2+1结点写成功则认为此次写操作成功,遵循Paxos协议。
HDFS HA
架构图
工作原理
- 在启动NameNode进程之前,需要启动QJM,其主要作用是用来管理主备NameNode之间的数据同步,active NameNode向jn(journalnode)集群写入元数据,当jn发现active NameNode有数据更新时,jn集群就会将这些数据同步到standby NameNode中。
- active NameNode出现了故障,例如挂机了,是谁去切换standby的NameNode变为active状态呢?这时,就需要引入ZooKeeper。首先HDFS集群中的两个NameNode都在ZooKeeper中注册,当active状态的NameNode出故障时,ZooKeeper能检测到这种情况,它就会自动把standby状态的NameNode切换为active状态(决定权在ZKFC手中,它们随时监控nn的健康状况,并向zk集群发送心跳,让自己能被选举上)。
-datanode也随时会向两个namenode发送心跳和块报告。
YARN HA
工作原理
- 同HDFS HA相比较起来,YARN HA看起来更加轻量级,不同于HDFS HA的是,它将ZKFC仅作为一个RM(resourcemanager)进程的一个线程,不再讲它像HDFS那样进程化。
- rm:启动时 向zk集群hadoop-ha目录写个lock文件。写成功标识为active,否则为standby。standby rm节点会一直监控这个lock文件是否存在,假如不存在,就尝试去创建,争取为active rm。同时rm会接收client的任务的请求,接收和监控nm的资源汇报,负责资源的分配调度,启动和监控applicationmaster.
- nm只会向active rm发送心跳,因为在做rm切换时,会重新创建job,这需要一定的时间,在这段时间内nm完全有时间向新的active节点发送心跳。
- RMStateStore仅存储在zk目录,不像HDFS HA有单独的jn集群来存储。