浅谈Apache Hadoop 2.0.0-alpha中HDFS 如何实现High Availabilit
什么是高可用性?
高可用集群是指以减少服务中断时间为目的的服务器集群技术。
高可用性HA(HighAvailability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。
高可用性(HA)的功能:
1、软件故障监测与排除
2、备份和数据保护
3、管理站能够监视各站点的运行情况,能随时或定时报告系统运行状况,故障能及时报告和告警,并有必要的控制手段
4、实现错误隔离以及主、备份服务器间的服务切换
背景分析:
HDFS的高可用性(HA)是Hadoop的一个缺点,不管是HDFS还是Map-Reduce,都是采用单master的方式,集群中的其他机器都是与一台中心机器进行通信,如果这个中心机器挂了,集群就只有不工作了(不一定数据会丢失,但是至少需要重启等等工作),让可用性变得更低。这个一般叫做单点失败 (single point of failure,SPOF)。本文通过比较Hadoop各版的改变还查看对这个问题的解决方案。
问题描述:
解决Namenode结点宕机时导致的集群不可用, 增强HDFS的高可用性
方案描述:
在Hadoop0.23.1版本以前,当Namenode所在服务器宕机时,可利用Namenode备份的元数据重构新的Namenode来投入使用。
方案一:
Hadoop本身提供了可利用secondaryNamenode的备份数据来恢复Namenode的元数据的方案,但因为checkpoint(在每次checkpoint的时候secondaryNamenode才会合并并同步Namenode的数据)的问题,secondaryNamenode的备份数据并不能时刻保持与Namenode同步,即在Namenode宕机的时候secondaryNamenode会丢失一段时间的数据,这段时间取决于checkpoint的周期。可以减小checkpoint的周期来减少数据的丢失量,但由于每次checkpoint很耗性能,而且这种方案也不能从根本上解决数据丢失的问题。
缺点:secondaryNamenode的备份数据并不能时刻保持与Namenode同步,不能从根本上解决数据丢失的问题。
方案二:
Hadoop提供的另一种方案就是NFS(网络文件系统),一种即时备份Namenode元数据的方案,设置多个data目录(包括NFS目录),让Namenode在持久化元数据的时候同时写入多个目录,这种方案较第一种方案的优势是能避免数据的丢失(这里我们暂时不讨论NFS本身会丢失数据的可能性,毕竟这种几率很小很小)。
缺点:
1.namenode的IP映射及访问问题,重新构造namenode可能导致客户端访问IP不一致,但可以在备用namenode投入使用的时候,配置其IP和原namenode一致
2.NFS服务器宕机导致集群瘫痪,可配置NFS集群来确保NFS的可用性。
3.重新构造namenode的时延问题,不能确保故障发生时能立即投入使用,对于需要即时使用的项目建议采用namenode热备方案。这是最关键的,会有中断。这对于高可用性集群是不可接受的