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

  写这篇文字的初衷,源于自己最近纠正了之前的一个认识——无论各种RAID改良技术,其Rebuild(重建)速度都不可能超过单块硬盘的最大写入速度?

  相关阅读:《maxCache进阶:SSD缓存高可用,RAID重建加速

  一、发现局限,仍存误区

  大约几个月前,我受益于高人的观点,了解到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是相同的道理。