HDFS的高可用机制和联邦机制

1.HDFS的高可用机制(High Availability)

1.1 HDFS高可用介绍

​ 在Hadoop 中,NameNode 所处的位置是非常重要的,整个HDFS文件系统的元数据信息都由NameNode 来管理,NameNode的可用性直接决定了Hadoop 的可用性,一旦NameNode进程不能工作了,就会影响整个集群的正常使用。

​ 在典型的HA集群中,两台独立的机器被配置为NameNode。在工作集群中,NameNode机器中的一个处于Active状态,另一个处于Standby状态。Active NameNode负责群集中的所有客户端操作,而Standby充当从服务器。Standby机器保持足够的状态以提供快速故障切换(如果需要)。

在这里插入图片描述
ZKFailoverController

​  是基于Zookeeper的故障转移控制器,每一个NameNode运行着一个轻量级的故障转移控制器,它负责控制NameNode的主备切换,ZKFailoverController会监测(通过一个简单的心跳机制实现)NameNode的健康状态,当发现Active NameNode出现异常时会通过Zookeeper进行一次新的选举,完成Active和Standby状态的切换

  • 平稳的故障转移:例如管理员可以手动发起故障转移,如日常维护时,ZKFC可以组织两个NameNode有序的切换角色
  • 非平稳故障转移:无法确切的知道失败NameNode是否已经停止运行.例如在网速非常慢或者网络被分割的情况下,同样也可能激发故障转移,但是先前的活动NameNode依然运行着并且依然是活动NameNode.高可用实现了更进一步的优化,以确保之前活动的NameNode不会执行危害系统并导致系统崩溃的操作——该方法称为"规避"(fencing).系统引入了一系列的规避机制,包括杀死NameNode进程,收回访问共享存储目录的权限,通过远程管理命令屏蔽相应的网络端口.诉诸的最后手段是:STONITH(shot the other node in the head),改方法主要通过一个特定的供电单元对相应主机进行断电操作

HealthMonitor

​  周期性调用NameNode的HAServiceProtocol RPC接口(monitorHealth 和 getServiceStatus),监控NameNode的健康状态并向ZKFailoverController反馈

ActiveStandbyElector

​  接收ZKFC的选举请求,通过Zookeeper自动完成主备选举,选举完成后回调ZKFailoverController的主备切换方法对NameNode进行Active和Standby状态的切换.

DataNode

​  NameNode包含了HDFS的元数据信息和数据块信息(blockmap),其中数据块信息通过DataNode主动向Active NameNode和Standby NameNode上报

共享存储系统

​  共享存储系统负责存储HDFS的元数据(EditsLog),Active NameNode(写入)和 Standby NameNode(读取)通过共享存储系统实现元数据同步,在主备切换过程中,新的Active NameNode必须确保元数据同步完成才能对外提供服务

2.HDFS的联邦机制(Federation)

2.1 背景概述

​  单NameNode的架构使得HDFS在集群扩展性和性能上都有潜在的问题,当集群大到一定程度后,NameNode进程使用的内存可能会达到上百G,NameNode成为了性能的瓶颈。因而提出了namenode水平扩展方案-- Federation。

​  Federation中文意思为联邦,联盟,是NameNode的Federation,也就是会有多个NameNode。多个NameNode的情况意味着有多个namespace(命名空间),区别于HA模式下的多NameNode,它们是拥有着同一个namespace。既然说到了NameNode的命名空间的概念,这里就看一下现有的HDFS数据管理架构,如下图所示:

在这里插入图片描述
​  从上图中,我们可以很明显地看出现有的HDFS数据管理,数据存储2层分层的结构.也就是说,所有关于存储数据的信息和管理是放在NameNode这边,而真实数据的存储则是在各个DataNode下.而这些隶属于同一个NameNode所管理的数据都是在同一个命名空间下的.而一个namespace对应一个block pool。Block Pool是同一个namespace下的block的集合.当然这是我们最常见的单个namespace的情况,也就是一个NameNode管理集群中所有元数据信息的时候.如果我们遇到了之前提到的NameNode内存使用过高的问题,这时候怎么办?元数据空间依然还是在不断增大,一味调高NameNode的jvm大小绝对不是一个持久的办法.这时候就诞生了HDFS Federation的机制.

2.2 Federation架构设计

​  HDFS Federation是解决namenode内存瓶颈问题的水平横向扩展方案。

​  Federation意味着在集群中将会有多个namenode/namespace。这些namenode之间是联合的,也就是说,他们之间相互独立且不需要互相协调,各自分工,管理自己的区域。分布式的datanode被用作通用的数据块存储设备。每个datanode要向集群中所有的namenode注册且周期性地向所有namenode发送心跳和块报告,并执行来自所有namenode的命令。
在这里插入图片描述
  Federation一个典型的例子就是上面提到的NameNode内存过高问题,我们完全可以将上面部分大的文件目录移到另外一个NameNode上做管理.更重要的一点在于,这些NameNode是共享集群中所有的DataNode的,它们还是在同一个集群内的
  这时候在DataNode上就不仅仅存储一个Block Pool下的数据了,而是多个.

概括起来:

  • 多个NN共用一个集群里的存储资源,每个NN都可以单独对外提供服务。

  • 每个NN都会定义一个存储池,有单独的id,每个DN都为所有存储池提供存储。

  • DN会按照存储池id向其对应的NN汇报块信息,同时,DN会向所有NN汇报本地存储可用资源情况。

HDFS Federation不足

​  HDFS Federation并没有完全解决单点故障问题。虽然namenode/namespace存在多个,但是从单个namenode/namespace看,仍然存在单点故障:如果某个namenode挂掉了,其管理的相应的文件便不可以访问。Federation中每个namenode仍然像之前HDFS上实现一样,配有一个secondary namenode,以便主namenode挂掉一下,用于还原元数据信息。

​  所以一般集群规模真的很大的时候,会采用HA+Federation的部署方案。也就是每个联合的namenodes都是ha的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值