再谈RAID重建:宽条带化分布式热备盘

2013/7/24 15:25:20【作者】佚名
写这篇文字的初衷,源于自己最近纠正了之前的一个认识——无论各种RAID改良技术,其Rebuild(重建)速度都不可能超过单块硬盘的最大写入速度?
 
  一、发现局限,仍存误区
 
  大约几个月前,我受益于高人的观点,了解到IBM XIV的一个局限。XIV将底层磁盘空间完全打散为1MB大小的数据块,然后按照伪随机算法,将同一块硬盘上的数据块与来自其它所有的硬盘的数据块进行镜像。这样做消除了数据热点,正常状况下的理论性能相当于RAID 10,当然空间利用率也没有RAID 5、6高。
 
  其实XIV在技术上更值得关心的是:当有一块硬盘故障时,IBM宣称向热备盘重建的速度远高于传统RAID,并且在此期间正常数据访问性能下降的比较少,因为此时的Rebuild负载也被均衡分散了。然而有个问题:正是由于每一个硬盘上数据块镜像的副本分布在整个存储池中其它所有的硬盘,相当于剩下的硬盘上都存在唯一数据。也就是说,如果在重建结束之前再损坏第二块硬盘的话,就有可能会丢失数据。
 
  笔者以此得出推论——IBM曾表示在实验室中测试过4个机架的XIV互连(60节点),但迄今为止仍然没有推出15节点(180个驱动器)以上的型号,很可能就是上面提到的原因。毕竟硬盘越多,这种短时间单点故障的风险就越大。
 
  就这一点,@jametone 老师还曾在微博上与我交流,他表示3PAR的宽条带化RAID技术也是类似的情况。而我当时的误区在于,无论这些改良型RAID重建时的数据可以同时来自多少块硬盘,但它们都要写入到一块硬盘上?因此在该硬盘存满数据的情况下,重建的时间无法超过以最大速度填充整个硬盘的时间?
 
  那么后来我又是如何推翻这个认识呢?在展开具体讨论之前,我想先简单叙述下宽条带化(wide striping)技术的特点,以及在传统RAID基础上解决了哪些问题。
 
  1.简化配置,均衡性能热点。如果说自动精简配置(Thin-provisioning)提高的是容量方面的利用率,那么宽条带化就是使RAID卷组规划变得简单,并提高性能利用率的技术。
 
  比如说像IBM Storwize V7000(EMC VNX/CLARiiON等可能也是类似的情况),用两至多个RAID 5 4+1的组成磁盘池,也就相当于再次条带化,在RAID 5之间又做了一次RAID 0。这样可能会有一个问题,当遇到故障盘重建的情况,Rebuild磁盘负载只产生在一个RAID 5上,而它会同时把其它RAID组“拖慢”。
 
  2.提高重建速度,减少性能影响。我们看到还有些更进一步的底层完全打散的技术。比如前面提到的XIV,带有RAID 1的特点;NetApp E系列的动态磁盘池(Dynamic Disk Pools,以下简称DDP),带有RAID 6的特点;惠普3PAR支持多种RAID级别,但客观讲我对于它的Dynamic Optimization研究还不够。
 
  关于“存储底层打散的存储虚拟化技术”(这里的虚拟化指的是阵列内部的磁盘管理方面,而非像IBM SVC、EMC VPLEX那样的“外部”存储虚拟化),可以参考 @_林肯大叔 前辈所著的《存储器那点事》。
 
 
  动态磁盘池对比(传统RAID)卷组的Rebuild时IOPS性能下降情况
 
  这里我引用了来自NetApp的一张图表,其中黑色柱形代表RAID6,蓝色表示DDP中等重建优先级,灰色为DDP高优先级,从左到右依次为12、24、60、96和192块硬盘。图表反映了在运行4KB随机读访问负载情况下,重建对性能产生的影响。
 
  首先我们看到在12块盘时,DDP的表现与RAID6基本相当。再往上,传统RAID不适合容纳过多的硬盘,首先RAID 5/6有写惩罚的问题;而RAID 10在重建时也会遇到磁盘对的瓶颈。随着硬盘数量的增加,DDP对性能的影响能够不断减小,这和笔者在开头提到的XIV是相同的道理。
 
二、从“分布式热备盘”获得启发
 
  前不久我在一份戴尔的资料中看到了这样一段话:
 
 
  注:Dell PowerVault MD3000家族OEM自NetApp E系列(原LSI Engenio)
 
  这里有一个“distributed spare capacity(分布式备用容量)”的概念,给人的感觉就是传统RAID的一块热备盘,它的容量被打散到整个动态磁盘池中。这样在重建的时候,就可以并发写入到不同硬盘的备用空间,而不再受单个热备盘写入热点的限制。
 
 
  我感觉,上面这张图只描绘了故障盘以及重建(计算)所需要的数据块和校验位来源,并没有表现出所谓的“分布式热备盘”在动态磁盘池中存在的情况。
 
  这时我想到去年NetApp回复给我的一段描述:
 
  “动态磁盘池概念完全不同与以往的RAID概念。它将一组磁盘放入动态磁盘池中,每个磁盘划分出很多Cpiece。这些Cpiece在做RAID Strips,组成CStripe再组成CVD(CRUSH Virtual Drive)。磁盘在动态池中被完全打散。当一块物理磁盘故障时,重构就开始了。它会将相应Cpiece重构,并放入其他几块磁盘上,因此重构速度成倍提高。DDP支持同一时间故障磁盘超过2块。它的故障磁盘容忍度与容量是相关的。如果你只使用了50%的容量,那么你的磁盘可以坏到50%,就是DDP中一半的磁盘故障了,数据依然是安全的!这个完全不是以前RAID5或RAID6的概念了。它的概念是只要我有空间去重构Cpiece,那就可以继续保持数据安全。”
 
  根据我对这段话后面一半的理解,这个“分布式热备盘”就位于动态磁盘池中未用的空间中,当发生并完成了重建操作之后可以继续保持该分布式热备盘的存在,不过前提是整个磁盘池的可用容量会下降。

 
 
三、分布式热备盘所占的不同比例
 
 
  上图中的“Preservation Capacity(保持容量)”,就相当于1块或者2块热备盘。出于RAID组安全的考虑,热备盘通常建议与驱动器的数量成正比。这里11块盘创建的DDP就包含1个“分布式热备盘”,而12块盘的DDP则包含了2个,因此这两个磁盘池的可用容量相当接近。
 
 
  这个表格和一段文字列出了在不同硬盘数组成的动态磁盘池中,默认的“保持容量”所相当的驱动器数量也有所不同。比如11块盘是1个分布式热备盘,12-31块盘时有2个... 256-384块盘对应8个。
 
 
  再来看看IBM XIV的情况。如上表:XIV Gen3在使用180个3TB SAS驱动器时可用容量为243TB(相当于81块盘),算上镜像的消耗就是162块盘,那么“分布式热备盘”在这里相当于占用了18个。
 
  表面上感觉NetApp DDP的容量利用率远高于XIV。动态磁盘池可以支持不同转速的驱动器;IBM只有7200转近线SATA/SAS,只支持Scale-out(横向扩展)最多到180块盘,为了保证所谓“高端存储”的性能采用镜像而不是其它RAID等级。而NetApp DDP相当于RAID 6的2个校验盘,不存在2块盘同时故障的风险,因此也就能支持到E系列的最大驱动器数——E5400和E5500的384个。
 
  很难说这两家谁的技术一定更好,只能说在设计时各有取舍,它们适用的场景应该也有所不同。
 
四、Rebuild速度能超过单盘极限?
 
  最后我想简单分析一下厂商公布的故障盘重建时间。
 
 
  首先是在保持4KB随机读情况下,1TB硬盘的重建时间,横轴为驱动器数,纵轴是小时。可以看出192块的DDP重建时间不到2个小时。我们暂且用2小时进行估算,相当于写入速度达到138.9MB/s。这个数字对于7200转驱动器来说,保持随机访问负载的情况下单盘是不可能达到的。
 
  当然,宽条带化RAID应该可以只重建故障盘被写入数据的部分。不过上面的图表既然写明1TB Drive,应该就是在硬盘写满(或者接近写满)的情况下测试的。
 
  此外还有一组来自戴尔的数字做为参考:
 
 
  这里是用3TB近线SAS盘比较的传统RAID 6和DDP。单/双盘故障下51/100小时的RAID 6恢复时间,侧面反映了这也是在保持数据访问情况下进行的测试。动态磁盘池在单/双盘故障下的恢复时间分别为8小时和12小时,也就是2块盘数据恢复的速度更快,这应该进一步反映了该技术在Rebuild时的多线程并发读写能力。以后者(12小时)来计算,折合写入速度也是138.9MB/s。
 
总结:有没有不足?
 
  我设想了一种情况:如果在动态磁盘池重建完成之后,想把它恢复到初始状态——也就是可用容量、“分布式热备盘”容量都不改变(减少)。这时我们要将故障盘替换为一块新盘(或者良品),然后把数据条带等再重新分布到这块盘上——这个时间就要受单一硬盘写入速度的限制了。我看过的文档中,好像没有关于这一操作的详细描述,也可能它被NetApp视为与DDP的动态扩展等同了?
 
  另外说明一点,NetApp E系列的自动精简配置是建立在动态磁盘池的基础上,而这并不意味着后者是前者的必要条件,比如ZFS就可以在各种RAID等级上建立“瘦卷”(通常是默认选择)或者“胖卷”。
 
  笔者在本文中分享了自己一些粗浅的认识,希望能给读者带来帮助,也许这点对于那些高人可能早已熟悉。
 
  我在以上的讨论中大部分以NetApp动态磁盘池作为代表,只是因为看到的公开资料相对较多,宽条带化RAID技术可谓博大精深,这里只是谈到了重建速度这一个方面。
【打印】
查看完整文章 | 频道首页 | 网站首页