简谈 HDFS 的高可用 HA
2018-11-23 本文已影响1人
code_solve
作为一个服务提供者,高可用是一个不得不说的话题,那么今天我们就来聊一聊 HDFS 的高可用,我们主要从以下几点来简单说一说:
- 什么是高可用?
- HDFS的高可用的决定性因素是什么?
- HDFS 高可用方案?
高可用是什么?
要聊高可用,我们先来了解下以下两个概念:
- 什么是高可靠?
正常运行时间能够满足预计时间我们称为高可靠,可以用,平均无故障可用时间来衡量。 - 什么是可维护性?
一个系统从故障状态恢复到可用状态的难以程度我们称为可维护性,可以用,平均维修时间来衡量 - 什么是高可用呢?
高可用简单来说就是具有:高可靠性,并且易于维护两大特点。
如果一个机器可靠性很高,但是一旦故障很难恢复,它也不具备高可用性
HDFS的高可用的决定性因素是什么?
我们知道 HDFS 的架构主要是由 NameNode 和 DataNode 组成,其中DataNode宕机是不会对集群正常运行造成什么影响的,当然,不能是灾难性的宕机,一下宕机一大片那种。所以决定 HDFS 高可用的就是 NameNode的高可用了,在 Hadoop 1.0 之前,NameNode也是一直存在 SPOF(单点故障)的,为此也是衍生了一系列的高可用方案。
HDFS 高可用方案?
这个问题放在现在来说,其实没太多好说的了,HDFS 从2.x开始就已经支持自己的 HA 方案了,这不是我们的重点,我们今天主要谈谈曾经为了 HDFS 的高可用 出现的一些方案吧。。。这里需要说明的一点是,HDFS的高可用主要还是针对其 元数据 的高可用。
- Secondary NameNode
该方案启动一个Secondary NameNode 节点,该节点定期从NameNode 节点上下载元数据信息(元数据镜像fsimage 和元数据库操作日志edits ),然后将fsimage 和 edits 进行合并,生成新的fsimage(该 fsimage 就是Secondary NameNode 下载时刻的元数据的Checkpoint ),在本地保存,并将其推送到NameNode,覆盖其就得fsimage。(在 Secondary NameNode 下载好 元数据信息后,NameNode会生成新得 edits文件)
缺点:
- 没有做到热备,当NameNode 无法提供服务时,需要重启NameNode,服
务恢复时间与文件系统规模大小成正比。 - Secondary NameNode 保存的只是Checkpoint 时刻的元数据,因此,一旦
NameNode 上的元数据损坏,通过Checkpoint 恢复的元数据并不是HDFS 此刻的最新数据,存在一致性问题。
- Hadoop 的元数据备份方案
该方案利用Hadoop 自身的Failover 措施(通过配置dfs.name.dir),NameNode 可以将元数据信息保存到多个目录。通常的做法,选择一个本地目录、一个远程目录(通过NFS 进行共享),当NameNode 发生故障时,可以启动备用机器的 NameNode,加载远程目录中的元数据信息,提供服务。
缺点
- 该方案主要是解决元数据保存的可靠性问题,但没有做到热备,HDFS 恢
复服务时,需要重新启动NameNode ,恢复时间与文件系统规模成正比。 - NFS 共享的可靠性问题,如果配置的多个目录中有任何一个目录的保存因
为异常而阻塞,将会导致整个HDFS 的操作阻塞,无法对外提供正常服务。
- AvatarNode 方案
Active Node 作为Primary NameNode 对外提供服务。Standby Node 处于Safemode 模式,在内存中保存Primary NameNode 最新的元数据信息。Active Node 和 Standby Node 通过NFS 共享存储进行交互。DataNode 同时向Active Node 和 Node 发送Block location 信息。当管理员确定Primary NameNode 发生故障后,将Standby Node 切换为 Primary NameNode。由于Standby Node 内存中保存了所有元数据的最新信息,因此可直接对外提供服务,大大缩短了切换时间。这也是2.x版本之后自带得 HA 的方案原理。