Hadoop-HDFS高可用

一、说明

在我的博客中已经包含了HDFS高可用的搭建,这里描述下它的原理。原理参考官网介绍:Apache Hadoop 3.3.6 – HDFS High Availability Using the Quorum Journal Manager

二、背景

在Hadoop2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF)。每个集群只有一个NameNode,如果NameNode节点发生故障会导致整个集群不可用。

Hadoop2.0.0后允许同一集群中运行两个(3.0.0后可以超过两个)冗余NameNode来实现高可用。

三、高可用架构

集群中允许两个或多个独立的机器运行NameNode,只是在任何时候只有一个NameNode处于活动状态,而其他NameNode则处于备用状态。活动NameNode负责集群中的所有客户端操作,备用NameNode保持运行状态,以便在必要时提供快速故障切换。

为了使活动NameNode和备用NameNode中的命名空间数据保持同步,每个NameNode都与一组JournalNodes(JN)的独立守护进程进行通信。当活动NameNode执行任何对命名空间的修改时,都会将修改记录持久化到JN中的大多数节点(只要一半以上JN节点写入成功就算成功)。备用NameNode可以从JN中读取这些EditLog,并对对其进行监控,如果发生变化就会同步到自己的命名空间中。当活动NameNode发生故障,从节点会同步完JN中的EditLog。

每个DataNode节点都会配置所有活动备用NameNode信息,在进行块信息上报时会报告给所有活动和备用NameNode。

为了防止“脑裂”情况,JournalNodes一次只允许一个NameNode(活动的NameNode)作为写入程序。

Hadoop-HDFS高可用_第1张图片

四、硬件资源

为了部署HA集群,应该具备以下2点:

        1、活动和备用NameNode的机器应该具有彼此等效的硬件

        2、JournalNode守护进程相对较轻,因此可以合理地与其他Hadoop守护进程(例如NameNodes、JobTracker或YARN ResourceManager)并置在机器上。注意:必须至少有3个JournalNode守护进程,因为EditLog修改必须写入大多数JN。所以应该运行奇数个JN(即3、5、7等)当使用N个JournalNodes运行时,系统最多可以容忍(N-1)/2个故障,并继续正常运行。

在HA集群中无需再运行Secondary NameNode、CheckpointNode或BackupNode。

五、自动故障切换

为实现自动故障切换,HDFS添加了ZooKeeper仲裁和ZKFailoverController进程(缩写为ZKFC)

ZooKeeper负责以下两点:

        1、故障检测:集群中的每个NameNode机器都在ZooKeeper中维护一个持久会话。如果机器崩溃,ZooKeeper会话将过期,通知其他NameNode应该触发故障转移。

        2、活动NameNode选举:ZooKeeper提供了一种简单的机制,可以将节点独占地选为活动节点。如果当前活动的NameNode崩溃,另一个节点可能会在ZooKeeper中获得一个特殊的独占锁,指示它应该成为下一个活动节点。

ZKFC是ZooKeeper客户端,每个NameNode节点运行一个,主要负责以下三点:

        1、运行状态监控:ZKFC定期使用运行状况检查命令对其本地NameNode进行ping。ZKFC根据各个NameNode节点响应状态来判定NameNode的健康状态。

        2、ZooKeeper会话管理:当本地NameNode正常时,ZKFC会在ZooKeepers中打开一个会话。如果本地NameNode处于活动状态,它还会持有一个特殊的“锁”znode。该锁使用ZooKeeper对“短暂”节点的支持;如果会话过期,锁定节点将自动删除。

        3、基于ZooKeeper选举:在所有健康的NameNode中选出活动NameNode。

你可能感兴趣的:(hadoop,hdfs,大数据)