自从1988年伯克利大学发明RAID(磁盘阵列)技术以来,RAID一直是存储领域的核心,肩负着保护数据的重任。但是随着磁盘容量的不断增大,RAID技术遇到了前所未有的新问题。最大的问题在于在数据重构时间过长,延长了系统degraded时间,增加了多个磁盘故障的概率,降低了数据可靠性。并且在RAID数据重构过程中,RAID自身的Rebuild IO对应用IO造成了影响,直接导致应用IO的performance大为降低。更为严重的是,应用IO和Rebuild IO构成了互为影响的关系,大量的应用IO也会导致Rebuild时间进一步延长。
目前,在存储系统中,4TB盘即将大面积应用。4TB盘的应用必须要考虑RAID自身存在的问题。在此,我做了一个小小的实验,对一个存储厂商的RAID Rebuild时间进行了评估,在没有应用IO的前提下,对于500GB的盘,需要将近2个小时的Rebuild时间,而对于4TB的盘,Rebuild时间增加到了14小时以上。
磁盘容量和重构时间之间的关系
目前我们常用的RAID算法是RAID-6,即可以最多容忍2块磁盘失效,如果超过两块磁盘失效,那么将会导致整个RAID系统Crash。所以,在14小时之内,如果又存在两块磁盘发生读写错误,那么整个RAID系统将会失效,这是未来RAID需要解决的最大问题。
面对上述问题,业内提出了一些解决方案,基本思路有如下几种:
1,延续RAID5到RAID6的技术思路。Rebuild时间可以尽最大努力进行优化,例如采用Copy的方式替代传统Rebuild方法(中科院计算所专利)。另外,如果可以让RAID容忍更多磁盘失效,例如,容忍3快磁盘失效,那么再长的重构时间也不是什么太大的问题。因此,业内很多人开始研究开发可以容忍三块磁盘失效的算法,典型算法是Reed-solumen算法。我们把这种思路的RAID称之为RAID-7。RAID-7最大的问题在于需要更强的计算资源,RAID-7计算复杂度比RAID-6高了很多,因此,RAID-7的研发需要硬件厂商一起参与研究、开发。
2,De-clustered RAID思想。Declustered RAID的一个思想前提在于:在绝大多数情况下,故障磁盘模型是Partial Failure(局部损坏)而不是整体损坏。为此,Declustered RAID将一个磁盘划分成多个区域,并且基于这些区域构建RAID。如果读写错误发生在一个区域中,那么RAID只需要重构该区域,而不需要重构整个磁盘。这种思想可以降低Rebuild时间,并且可以将Spare空间分散到多个区域的不同磁盘上,可以避免Rebuild过程中Spare盘成为IO瓶颈点。Declustered RAID对大容量磁盘故障模型进行了研究,对现有RAID进行了优化,但是,个人认为灵活度不够,不能有效地分离应用IO和Rebuild IO。
3,在底层虚拟化(Low Level Virtualization)的基础上构建RAID。由于磁盘容量不断增大,那么我们有必要在RAID的下层增加一个管理物理磁盘的虚拟化层,通过该虚拟化层来管理物理磁盘,并且为RAID提供虚拟磁盘。当遇到读写错误的时候,虚拟化层可以Remap RAID的请求,从而使得很多错误信息对RAID透明,减少RAID数据重构次数。由于有了这个虚拟化层,可以很容易的实现Data Awareness的数据重构方式,进一步降低RAID重构时间。由于虚拟化层可以对底层物理资源进行管理,因此,可以对磁盘健康状态进行监测,从而对存储资源进行合理分配,达到数据可靠存储的目的。最为重要的是,虚拟化层可以对应用IO和Rebuild IO进行分离,在很多情况下,Rebuild IO不会对应用IO造成性能影响。当然,底层虚拟化也会存在一些问题,最为关键的是存储资源如何分配?尽最大可能不浪费存储空间。目前,我正在对该领域进行研究探索。
4,在很多集群文件系统中,基本已经放弃了传统RAID技术,并且将数据冗余保护的功能放在了文件系统层面。例如Hadoop文件系统直接在文件系统层面将数据冗余存储三份。
RAID技术一直是数据存储的关键,面对磁盘容量不断增加的今天,我们有必要思考RAID技术的未来,今天4TB磁盘即将大面积应用,明天10TB硬盘还会远吗?
本文出自 “存储之道” 博客,请务必保留此出处http://alanwu.blog.51cto.com/3652632/1223174
阅读(1006) | 评论(0) | 转发(0) |