硬盘分段和数据冗余(RAID2~5)
硬盘分段改善了硬盘子系统的性能,因为向硬盘读写数据的速度与硬盘子系统中硬盘数目成正比地增加,但它的缺点是硬盘子系统中任一硬盘的故障都会导致整个计算器系统失败。整个分段的硬盘子系统部能作镜像,如果已经用了4个硬盘进行分段,我们可以再增加4个分段的硬盘作为原来4个硬盘的镜像。很明显这是昂贵的(虽然可能比镜像一个昂贵的大硬盘来得便宜)。可以不用镜像而用其它数据冗余的方法来提供高容错性能。可以选择一神奇偶码模式来实现上述方法,可以外加一个专作奇偶校验用的硬盘(如在RAID3中),或者可把奇偶校验数据分散分布在磁盘阵列的全部硬盘中。不管用何种级别的RAID,磁盘阵列总是用异或(XOR)操作来产生奇偶数据,当子系统中有一个硬盘发生故障时,也是用异或操作重建数据。下列简单分析了XOR是怎样工作的。
硬盘ABC奇偶盘(A,B,C异或的结果)
数据1010
首先记住在XOR操作中,2个数异或的结果是真(即“1”)时,这二个数中有且一个数为1(另一个为0)。我们假设A,B,C中B盘故障,此时可将A,C和奇偶数据XOR起来,得到B盘失去的数据0;同样如C盘故障,我们可将A,B盘和奇偶盘的数据XOR,得到C盘原先的数据1。如果推广到7个盘的硬盘子系统:
硬盘ABCDEF奇偶位
数据0001010
如果丢失B盘数据,我们可以XORA,C,D,E,F和奇偶位来得到失去的B盘数据0。而XORA,B,C,D,E,F和奇偶位可恢复D盘的数据1。采用专用的奇偶校验盘(如上所述,即RAID3),当同时产生多个写操作时,每次操作都要对奇偶盘进行写入。这将产生I/O瓶颈效应。RAID5把奇偶位信息分散分布在硬盘子系统的所有硬盘上(而不是使用专用的校验盘0,这就改善了上述RAID3中的奇偶盘瓶颈效应。RAID5的一种配置:奇偶信息散布在子系统的每个硬盘上。利用每个硬盘的一部分来组成校验盘,写入硬盘的奇偶位信息将较均匀地分布在所有硬盘上。所以某个用户可能把它的一个数据段写在硬盘A,而将奇偶信息写在硬盘B,第二个用户可能把数据写在硬盘C,而奇偶信息写在硬盘D。从这里也可看出RAID5的性能会得到提高。这种方法将提高硬盘子系统的事务处理速度。所谓事务处理,是指处理从许多不同用户来的多个硬盘I/O操作,由于可能同时有很多用户与硬盘打交道,迅速向硬盘写入数据,有时几乎是同时进行的,这种情况下,用分布式奇偶盘的方式比起用专用奇偶盘,瓶颈效应发生的可能性要小。对硬盘操作来说,RAID5的写性能比不上直接硬盘分段(指没有校验信息的RAID0)。因为产生或存储奇偶码需要一些额外操作。例如,在修改一个硬盘上的数据时,其它盘上对应段的数据(即使是无关的数据)也要读入主机,以便产生必要的奇偶信息。奇偶段产生后(这要花一些时间),我们要将更新的数据段和奇偶段写入硬盘,这通常称为读-修改-写策略。因此,虽然RAID5比RAID0优越,但就写性能来说,RAID5不如RAID0。镜像技术(RAID1)和数据奇偶位分段(RAID5)用于上述的硬盘子系统中时,都产生冗余信息。但在RAID1中,所有数据都被复制到第二个相同的硬盘上。在RAID5,数据的XOR码而不是数据本身被复制,因此可以用数据的非常紧凑的表现方式,来恢复由于某一硬盘故障而丢失的数据。采用RAID5时,对于5个硬盘的数组,有大约20%的硬盘空间用于存放奇偶码,而十个硬盘的数组只有约10%的空间存放奇偶码。在可用空间总的格式化空间的意义上来说,硬盘系统中的硬盘越多该系统就越省钱。总之,RAID5把硬盘分段和奇偶冗余技术的优点结合在一起,这样的硬盘子系统特别适合于事务处理环境,例如民航售票处,汽车出租站,销售系统的终端,等等。在某些场合,可优先考虑RAID1(在那些写数据比读数据更频繁的情况)。但许多情况,RAID5提供了将高性能,低价格和数据安全性综合在一起的解决办法。
硬盘故障恢复
镜像和RAID提供了从硬盘故障中恢复数据的新方法。因为数据的所有部分都是有冗余的,数据有效性很高(即使在硬盘发生故障时)。另一重要优点是,恢复数据的工作不用立即进行,因为系统可以在一个硬盘有故障的情况下正常工作,当然在这种情况下,剩下的系统就不再有容错性能。要避免丢失数据就必须在第二个硬盘故障前恢复数据。更换故障硬盘后,要进行数据恢复。在镜像系统中“镜像”盘上有一个数据备份,因此故障硬盘(主硬盘或镜像硬盘)通过简单的硬盘到硬盘的拷贝操作就能重建数据,这个拷贝操作比从磁带上恢复数据要快得多。RAID5硬盘子系统中,故障硬盘通过无故障硬盘上存放的纠错(奇偶)码信息来重建数据。正常盘上的数据(包括奇偶信息部分)被读出,并计算出故障盘丢失的那些数据,然后写入新替换的盘。这个过程比从磁带上恢复数据要快不少。设计灵活的磁盘阵列可以重新配置,替换盘的地址不一定和故障盘的地址相同。这种灵活性使安装过程变得更为简单。备用盘甚至可以在硬盘故障前预先连在系统上。在那种情况下,它就成了随时可用的备份盘。这种盘通常称为“热备份”。
可靠性和可用性
这二个名词虽然相互关连,事实上却代表了硬盘故障的二个不同的方面,可靠性指的是硬盘在给定条件下发生故障的概率。可用性指的是硬盘在某种用途中可能用的时间。利用这二个名词,我们可以看到磁盘阵列是怎样把我们的硬盘系统可靠性提高到接近百分之百的程度的。磁盘阵列可以改善硬盘系统的可靠性。因为某一硬盘中的数据可以从其它硬盘的数据中重新产生出来(例如RAID5),所以很少会有机会使整个硬盘系统失效。硬盘子系统的可靠性因而大大改善了。下表是RAID硬盘子系统与单个硬盘子系统的可靠性比较:
硬盘子系统,硬盘数时间,平均故障时间*,平均丢失数据时间
单个硬盘,1,30,000小时,30,0000小时
RAID0(分段),5,30,000小时,6,0000小时
RAID1(镜像),2,30,000小时,49,9百万小时
RAID5(分段加奇偶码),5,30,000小时,46,2百万小时
硬盘子系统可靠性比较
我们还必须考虑系统的可用性。单一硬盘系统的可用性比没有数据冗余的磁盘阵列要好,而冗余磁盘阵列的可用性比单个硬盘的好得多。这是因为冗余磁盘阵列允许单个硬盘出错,而继续正常工作。此外,一个硬盘故障后的系统恢复时间也大大缩短(与从磁带恢复数据相比)。最后,因为发生故障时,硬盘上的数据是故障当时的数据,替后的硬盘也将包含故障时的数据(举例说,前天晚上的备份数据)。要得到完全的容错性能,计算器硬盘子系统的其它部件也必须有冗余例如提供二个电源,或者配备双份硬盘控制器。没有其它部件的冗余,即使有非常可靠的硬盘子系统,还是不能完全防止计算机系统的失效。
最佳化的容错系统
如先前所述,直接分段的子系统(RAID0)可以大大提高读写速度(相对单个硬盘),因为数据分散在多个硬盘,硬盘操作可以同时进行。把二个直接分段的硬盘子系统组成镜像,可以有效地构成全冗余的快速硬盘子系统。这样的子系统,其硬盘操作甚至比直接分段的硬盘子系统还快,因为该系统能同时执行二个读操作(每个硬盘一个读操作),而写操作的速度则与非镜像直接分段子系统几乎一样,因为把数据同时写入二个硬盘只需花费很少的额外开销。通过我们前面所述的概念,例如双工:(双控制器,双电源等),可以进一步改善有关冗余方面的问题。双控制器还使我们得到更高的数据传输速度,因为控制器成为子系统性能瓶颈的可能性更小了。