一、RAID的由来

1.1什么是RAID

        磁盘阵列(Redundant Arrays of Independent Drives)又称RAID,有“独立磁盘构成的具有冗余能力的阵列”之意。

1.2 为什么做RAID

        提到RAID 就不可避免要说说硬盘,硬盘的类型从IDE硬盘到SATA硬盘、SAS硬盘继而到现在的SSD硬盘,各种性能都在提升,速度也在不断提高。但是在类似机场这种大型的生产环境下,单块甚至几块硬盘已经无法发挥作用,就需要另辟蹊径找到更佳的提升磁盘性能的方法,于是IT人创造了磁盘阵列这一概念。磁盘阵列就是将很多单块的磁盘组合在一起,构成一个磁盘组。磁盘阵列的诞生,不仅再一次解决了数据访问速度的难题,同时还降低了部分硬盘损坏影响整个系统的风险。

二、RAID级别详解

2.1 RAID 0(条带化技术)

        为了提高传输速率,RAID 0实现了通过在多个磁盘上并行操作来大幅提高访问速度这一功能,其原理是让很多磁盘驱动器同时读写数据。举个例子:假如有2块磁盘,没有RAID技术之前是先写满一块磁盘然后再继续写下一块磁盘,而RAID 0技术的实现使得多块磁盘同时读写成为现实,那么2块硬盘的并行操作在同一时间内磁盘读写的速度就提升了2倍。所以用RAID 0可以达到单个磁盘驱动器几倍的速率。如下图所示:

服务器的RAID_数据

        虽然RAID 0可以提供更多的空间和更好的性能,但是RAID 0没有冗余和错误修复能力,因此整个系统是非常不可靠的,如果出现故障,无法进行任何补救。所以,不提倡用RAID 0,只是在那些对数据安全性要求不高的情况下才被人们使用。

 2.2 RAID 1(镜像)

        RAID 1称为磁盘镜像,原理是把一个磁盘的数据同时也要放到另一个磁盘上。镜像技术的实现,大大提高了系统的冗余能力,这种情况下,某块磁盘出现问题,因为数据的双份存储,系统仍旧可以正常运行。如下图所示:

服务器的RAID_数据_02

        虽然这样对数据来讲绝对安全,但是成本也会明显增加.假设一个系统实际需要存储400G,每块硬盘容量100G,四块足矣,但是现实却是需要8块硬盘,这可以说是镜像技术的一大硬伤。

        有一点要特别注意,就是在实际生产中,一旦出现硬盘故障,虽然由于镜像的存在系统仍旧可用,但是已经不再安全,不要抱有任何侥幸思想,应当及时的更换损坏的硬盘,否则剩余的镜像盘也可能出现问题,那么整个系统就会崩溃。更换新盘后原有数据会需要很长时间同步镜像,外界对数据的访问不会受到影响,只是这时整个系统的性能有所下降,这就是降效。

2.3 RAID 10

        RAID 1+0 也被称为RAID 10标准,实际是将RAID 1和RAID 0进行结合,即先进行镜像然后进行条带化。以下图为例进行讲解,首先创建2个独立的Raid1,磁盘1 和磁盘2做RAID 1,磁盘3和磁盘4也做成RAID 1。然后将这两个独立的Raid1组成一个Raid0,当往这个逻辑Raid中写数据时,数据会按顺序写入两个Raid1中。这里一定是按顺序的,因为要保证先分别在两个RAID 1中做镜像,最后整体做RAID 0,比如写在硬盘1上的数据1、3、5、7,写在硬盘2中则为数据1、3、5、7,硬盘3中的数据为0、2、4、6,硬盘4中的数据则为0、2、4、6,因此数据在这四个硬盘上组合成Raid10,且具有raid0和raid1两者的特性。如下图所示:服务器的RAID_运维_03

Raid 10 和 Raid01的区别:

        RAID 01是先做两个RAID 0,然后整体在做一个RAID 1,所以RAID01虽然可以坏多快 盘,但是只能坏在同一个RAID 0 里,不允许两个RAID 0内都有坏盘,否则就会造成 数据缺失。

        RAID 10恰恰相反,是先做两个RAID 1,再整体做一个RAID 0,所以RAID 10也允许 坏多块盘,前提是坏的这两块盘不是一对镜像盘。

接下来用数据证明RAID 10 优于RAID 01.

服务器的RAID_linux_04服务器的RAID_RAID_05

         假设,此时Disk0故障,那么在RAID 01 中,左边的条带就无法读取了,剩下的两块磁盘坏了任何一块,系统都会over,所以故障率为2/3;同样是Disk0 损坏,发生在RAID10中时,只有当Disk1损坏时,整个系统才会over,此时故障率为1/3.综上所述,RAID 10 优于RAID 01 。

2.4 RAID 3

         RAID 3是把数据分成多个“块”,然后按照奇偶校验方式,将校验信息存放在第N个硬盘上,这块盘被称为校验盘,而实际数据是被存储在另外N-1块磁盘上,当这N个硬盘中的其中一个硬盘出现故障时,通过校验其它N-1个硬盘中的数据也可以恢复原始数据, 如下图所示:服务器的RAID_运维_06

        上面提到的校验实际上就是奇偶校验,而奇偶校验值的计算是以各个硬盘的相对应位进行异或的逻辑运算,然后将结果写入奇偶校验硬盘。

拓展:XOR的校验原理如下表:服务器的RAID_常用命令_07

        这里的A与B值就代表了两个位,从中可以发现,A与B一样时,XOR结果为0,A与B不一样时,XOR结果就是1,而且知道XOR结果和A与B中的任何一个数值,就可以反推出另一个数值。比如A为1,XOR结果为1,那么B肯定为0,如果XOR结果为0,那么B肯定为1。这就是XOR编码与校验的基本原理。

        RAID3的系统中,当一块硬盘失效时,该硬盘上的所有数据块必须使用校验信息重新建立。如果是从好盘中读取数据块,不会有任何变化;但是如果要读取的数据块正好位于已经损坏的硬盘上,则必须同时读取同一带区中的所有其它数据块(磁头同步扫磁盘)。某些情况下,要找的数据在一块磁盘上,那么此时如果依旧是所有磁盘都参与同步去扫,就是一种资源浪费,为了避免这种磁头同步扫描磁盘的现象,又有了RAID 5的产生。

2.5 RAID 5

服务器的RAID_常用命令_08

        RAID5(分布式奇偶校验的独立磁盘结构)。它的奇偶校验码存在于所有磁盘上(磁头异步扫描磁盘),与RAID 3有所区别,RAID 3的校验盘是最后一块盘。其中的pn代表第n带区的奇偶校验值,其它的意思也相同。RAID5的读出效率很高,写入效率一般,因为独读出数据时是单个磁盘异步操作,而读入时之所以慢是因为每块盘上都有校验,需要计算。RAID 3 与RAID 5相比,重要的区别在于RAID 3每进行一次数据传输,需涉及到所有的阵列盘。而对于RAID 5来说,大部分数据传输只对一块磁盘操作,可进行并行操作。

总结

        各种RAID级别都有自己的优势,没有哪一种是最好的,也没有哪一种是最差的,只有根据生产情况去选择最合适的