廉价冗余磁盘阵列(RAID,RedundantArrayofInexpensiveDisk)方法是解决单个磁盘驱动器在处理性能和可靠性上的局限性问题上的标准方法。一个RAID阵列会将多块磁盘纳入-组磁盘集当中将其视作一个单独的磁盘,这些磁盘通常具有相同的配置。其所产生的效果要么性能提高,要么可靠性提高,或者两者都有提高。在某些情况下,写入阵列的奇偶校验(parity)信息计算能够带来额外的可靠性。奇偶校验是数据校验的一种方式,它能够在信息丢失的情况下进行重组。从空间的角度来看,使用奇偶校验的RAID级别在驱动器故障存在的前提下写入数据方面是有效的,但是奇偶校验计算开销将会显著影响数据库应用程序。
较为常见的RAID阵列的基本形式包括如下的几种类型。
●RAID0:也称为条带化(Striping),即同时使用多块硬盘,并行地将数据分散到每个硬盘中进行读写。其性能几乎能够得到线性的提升(两块硬盘读取的速度是单块硬盘的两倍),但磁盘组中任意一块硬盘出现故障则会丢失所有数据。
●RAID1:也称为镜像(Mirroring)。相同的数据具有多个副本存储在多块硬盘当中。这样有时候可以提高性能--横跨两块硬盘的良好RAID1镜像,在处理两个读取操作时可能会通过向每个磁盘发送一个读取操作来完成。并行读取两块硬盘时,每秒的效率可以增加一倍,但通常情况下,使用RAID1的原因通常是为了进行冗余:即如果其中一块硬盘失效,那么系统会使用其他的磁盘来继续相应操作。
●RAID10或RAID1+0:首先使用成对的磁盘,然后使用RAID1进行镜像。随后使用RAID0对结果集进行分组。这样既能提供较高的性能,并且还可以允许其中的任意一块硬盘失效,不像RAID5/6那样需要用很多方法来保证在最糟糕以及平常情况下的速度。RAID10特别适合在那些写操作比较繁重的环境下,此时RAID5/6的奇偶校验计算会降低磁盘性能。因此,在高性能数据库系统中,这是会优先采用的RAID级别。
●RAID5:也称为带奇偶校验的条带化(StripedwithParity)。这是介于RAID0和RAID1之间的一种折衷方法。数据类似RAID0分片存储在磁盘中,可以提高读取性能。但冗余数据存储在校验盘中。如果阵列的其中一块磁盘失效,丢失的数据可以使用其他磁盘的校验信息计算得出。能够用较小的空间浪费来解决硬盘失效的问题,在RAID5当中的写入操作的性能还是可以承受的。
●RAID6:RAID6与RAID5类似,除了更多的校验信息外,允许两块硬盘失效。这是它的优点,同时也是缺点所在。RAID6是目前处理在RAID5阵列中,一块硬盘失效后可以提供更长的时间进行数据修复的普遍方法,具有较大容量。在此期间,阵列没有额外的容错机制,同时当花费几个小时的激烈磁盘活动进行重建时也无暇顾及在重建数据完成之前第二个驱动器的故障。同一批次制造的磁盘很可能会发生令人惊讶的整组失效。
为了公平公正地去比较磁盘的性能,需要考虑大多数系统都将会有个来自多个磁盘(如RAID 阵列)的裸性能(net perfommance)。由于SATA 磁盘相对便宜一些,因此同样预算情况下所采购到的SATA磁盘会比SAS多一些。如果确信应用程序在负载分散于更多磁盘之上会得到更快的响应速度,那么单位成本内购买的更多东西必将会导致系统整体速度的加快。需要注意的是,这里的上限通常是服务器的物理硬件所决定的。因此在环境当中只有这么多的存储机架或者控制器端口可用的情况下,扩大机箱可能会花费更多的成本。在那些更小数量、更为快速的驱动器的情况下很容易发现使用SAS是一种更好的方法。这也就是为什么如下的做法很重要:不断对硬件及数据库进行基准评测,以得到在磁盘数量增加情况下的改进状况。




