Introductionto RAID

RAID全名(Redundant Array of Independent Disks) 廉价磁盘冗余阵列

通过多块磁盘并行运行,按照不同方式组合起来形成一个硬盘组,从而提高计算机存储IO性能,组成磁盘阵列的不同方式成为RAID级别,现在已拥有七类基本的RAID级别,另外还有基本的RAID级别组合形式,比如RAID 1 0RAID 5 0,不同的RAID级别代表着不同的存储性能、数据安全性和储存成本。

RAID的优点:

首先:提高了存储容量,其次,多个磁盘驱动器可并行工作,可以充分发挥出多块硬盘的优势,远远超过了一块单独硬盘的速度和吞吐量,提高了数据传输率,比通常的磁盘存储更高的性能指标、数据完整性和数据可用性,最后,带有冗余能力的RAID可以通过多重备份来增加系统的可靠性,当系统发生故障时,冗余配置介入并承担故障部件工作,由此减少系统的故障时间。


常见的有四类,分别是:

RAID 0 :具有提高读写性能

最少2块硬盘,其原理是将多个磁盘合并成一个大的磁盘,不具有冗余,并行I/O,因此具有很高的数据传输率。RAID0 也被成为带区卷,在存放数据时,将数据按照磁盘的个数进行分段,然后同时写入这些盘中,所以,在所有级别中,RAID0的速度是最快的,但是因为没有数据冗余,因此并不能算真正的RAID结构,只是单纯的提高性能,并没有为数据的可靠性提供保证,如果一个物理磁盘损坏,所有的数据都会丢失。因此,RAID0 不能应用与数据安全性要求高的场合。

对Raid的认识_安全性

空间利用率:所有磁盘空间总和

性能:所有磁盘速度总和

冗余能力:无

适用领域:视频生成和编辑、图像编辑、其他需要大的传输宽带操作


RAID 1:具有提高读取性能、冗余性

使用最少2块硬盘,通过磁盘数据镜像实现数据冗余,在写数据时,将数据复制写入到多块硬盘,在读数据时,以提供冗余性。同时从多块硬盘读取数据,提高读性能。因此,RAID1的读取速度是相当快,RAID1的单位成本也是最高的,但提供了很高的数据安全性和可用性,当一块硬盘损坏时,系统可以自动切换到任意的镜像磁盘上读写,而不需要重组失效的数据。

对Raid的认识_计算机_02

空间利用率:磁盘中最小的一块

性能:读性能为所有硬盘速度总和,但写性能会有所减弱,因为写的时候会有一个复制操作。

冗余能力:只要一块硬盘正常,数据就正常。

RAID1成本较高,一般用在需要稳定性强的地方,写性能不要求太高,经常会读数据的时候,而且数据必须安全可靠。

使用领域:财务、金融等高可用、高安全的数据存储环境


RAID 5:具有提高读写性能、冗余性

至少使用3块硬盘,RAID5RAID0类似,读写数据的时候会将数据分布式的读写在所有的硬盘上,但是在写数据的时候会交叉的存取数据及奇偶校验信息,将校验信息同时保存在硬盘上,校验信息可以进行数据恢复使用。RAID5 更适合与小数据块和随机读写的数据。

对Raid的认识_安全性_03

空间利用率:所有硬盘的75%左右

性能:读性能接近RAID0,写性能比RAID0弱一点

冗余能力:可接受1块硬盘损坏

RAID5相对RAID0RAID1是一个折中的方法,对硬盘的浪费相对少一点,提供了性能,冗余能力,以及可以接受的空间利用率,所以在企业中用的较多。

使用环境:文件服务器、Email服务器、web服务器等环数据库应用


RAID 6 :具有提高读写性能、冗余性

至少需要4块硬盘,与RAID5类似,读写数据的时候会将数据分布式的读写在所有的硬盘上,并保存奇偶校验信息,会比RAID5多保存一份校验信息,所以冗余性更高。但是RAID6需要分配大量的磁盘空间给奇偶校验信息。相对RAID5 有更大的写损失。因此写的性能非常差,所以实际应用一般很少见。

对Raid的认识_可靠性_04

空间利用率:所有硬盘的50%左右

性能:读性能接近RAID5,写性能较差

冗余能力:可接受2块硬盘损坏


RAID实现

RAID的实现方式有两种:

软件RAID和硬件RAID

对Raid的认识_安全性_05

软件RAID的方法:

linux中,软件RAID通过mdadm来实现的,其支持的RAID的级别有:RAID0RAIDRAID4RAID5RAID6,可以基于多块磁盘、分区或逻辑卷创建软件RAID, RAID信息保存在/proc/mdstat并且可以通过mdadm来查看。

创建raid 0mdadm –C /dev/md0 –a yes –l 0 –n 2 /dev/sdb /dev/sdc

-C表示一个新的RAID

-a 自动创建对应设备

-l 创建RAID的级别

-n 硬盘的数量

创建之后,我们需要创建一个配置文件:mdadm –D –scan > /etc/mdadm.conf 避免重启后丢失,保存信息。

最后格式化、挂载

mkfs.ext4 /dev/md0

mount /dev/md0 /mnt

查看RAID信息 mdadm –D /dev/md0

查看/proc中的信息cat /proc/mdstat

控制RAID

关闭RAID,关闭前先卸载: mdadm –S /dev/md0

启用RAID :mdadm –R /dev/md0

彻底删除RAID信息: mdadm –zero-superblock /dev/sdb 删除创建RAID的磁盘信息

模拟故障设备:

通过命令模拟一个磁盘故障:

mdadm /dev/md0 –f /dev/sdb

移除故障磁盘:

Mdadm /dev/md0 –r /dev/sdb

换上新的硬盘后,我们可以将新硬盘添加到RAID中:

mdadm /dev/md0 –a /dev/sdb


简单分析RAID的性能和可靠性:

RAID5为例:RAID5 能够容忍一块磁盘出错,保证在出错的时候磁盘能够顺利读写,在大多数人看来,两块磁盘同时快掉的概率并不是很高,所以一般认为RAID5足够用了,并且现在的磁盘阵列都提供热备盘,只要有盘出错,就会自动把空闲盘加入到RAID5中,利用剩下好的磁盘重建数据,写入新盘,但数据重建完成后,该设备就完好如初了,又能容忍一块磁盘再次出错,看上去似乎很不错。

可靠性来看:

硬盘的坏盘率其实是很高的,尤其是在服务器上,硬盘始终在工作,很少有休息的时候,也去在一小段时间里,两块磁盘或者更多的磁盘坏掉的可能也是有的,在许多高可靠性系统中,也有不少是采用RAID6的,RAID6可以允许任意两块硬盘出错,但由于要生成两组效验码,所以耗费的资源也比RAID5大很多。

另外,RAID的长时间重建,当有硬盘坏掉的时候,会加入热备盘来重建数据,现在的磁盘容量都相当大,如果在重建过程中出现断电或者再有一块磁盘出问题,那后果就比较严重了,RAID5是没有数据保护功能的,因此,在重建过程中出错也是比较容易见到的,磁盘的速度提升远远没有容量的提升快。

最后:RAID只能对付磁盘本身的出错,不能对付非磁盘因素造成的问题,比如:内存坏掉了,主板烧掉了,电源挂掉了等等,RAID完全无能为力,冗余度在高的RAID,也不能让用户恢复对系统的访问,可靠性是对用户的全面保证,不能只盯着磁盘出错来看。

性能方面:

任何时候,性能都是用户追求的主要目标之一,RAID用过把多块磁盘组合在一起进行并发的读写,显著的提高了性能。

但是,当硬盘出现故障,RAID5的长时间重建,由于磁盘本身不断的在读取数据计算校验码,因此,肯定会对正常的IO产生较大的影响,同时也会影响性能。

RAID6 的原理和RAID5类型,而且会多出一块校验盘,性能开销会更大,为了得到比较搞的性能,部分系统也许会选择磁盘利用率并不高的RAID10,不过,RAID10虽然在某些时候可以提供一般坏盘的最大容错度,但是如果是同一个RAID1里边的两个磁盘出错,系统依然无法使用。

RAID本身也在逐步改进,RAID50在提高RAID5容量的同时也维持了对应的稳定性,而且具有较高的容错能力,允许某个组内有一个磁盘出现故障,而且不会造成数据丢失,因为奇偶位分布于RAID5子磁盘组上,所以重建的速度有很大的提高,具备更快数据读取速率的能力。