HA的英文全称是High Availability,中文翻译为高可用性。什么是HA?HA与我们平时常说的高可靠性又有什么关系,下面我们一起来看下HA的定义。

        HA的定义为系统对外正常提供服务时间的百分比。具体来说,HDFS的可靠性可用平均无故障时间(MTTF[ ])来度量,即HDFS正常服务的平均运行时间,HDFS的可维护性用平均维修时间(MTTR[2])来度量,即HDFS从不能正常服务到重新正常服务所需要的平均维修时间。因此HDFS的HA可精确定义为:MTTF/(MTTF+MTTR) * 100%

    由上面的定义我们可以很清楚地将HA与高可靠性区分开来,高可靠性更多的是对于系统自身而言,它是系统可靠程度的一个指标。而HA则更多地是从系统对外的角度来说的,除了包含系统正常工作的能力,它还强调系统中止服务后迅速恢复的能力:一个可靠性很高的系统,如果其中止服务后,修复时间很长,那么它的可用性也不会很高,而一个可靠性不是特别高的系统,如果发生中止服务后,可迅速恢复,那么其可用性也可能会很高。因此只有HA才能准确度量系统对外正常服务的能力。HDFS HA的应用场景有很多,我们可以从正常和异常两种情况来分析HDFS对外无法正常服务的情景:

    首先是正常使用情况,最常见的应用场景就是NameNode节点软、硬件的升级与维护,由于NameNode只有一个,当NameNode节点软、硬件的升级与维护操作需要NameNode进行重启时,HDFS将无法服务。其次是异常情况,常见的场景有:用户的误操作导致NameNode系统崩溃或HDFS发生故障、或者是硬件故障等。在实际使用过程中,软硬件维护、软件故障、错误操作等因素是造成HDFS无法提供正常服务的主要原因,而大家普遍关注的硬件故障并不是主要原因。

    此外,由于HDFS处于Hadoop的底层,上层的其他分布式处理框架如Mapreduce、HBase、Hive、Pig等都依赖于HDFS提供的基础服务,因此HDFS的HA将对这些分布式处理框架的HA构成直接影响,并最终影响到最上层分布式应用的HA。因此对于一个实用的系统来说,在大多数情况下都需要考虑HDFS的HA问题。