RAID是“Redundant Array of Independent Disks“的缩写,称为"独立磁盘冗余阵列",通常简称为”磁盘阵列(DiskArray)“。通常简单来说,RAID技术就是将多个硬盘按照一定方式有机的组合在一起,形成一个大的硬盘阵列,从而提高硬盘数据的存储性能和数据备份技术。对于用户而言,操作磁盘阵列就像操作一般的单个硬盘一样,而且这样比操作单个硬盘的数据存储速度更快,并具有数据自动备份的机制。
RAID 的初衷主要是为了大型服务器提供高端的存储功能和冗余的数据安全。在系统中,RAID 被看作是一个逻辑分区,但是它是由多个硬盘组成的(最少两块)。它通过在多个硬盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量,而且在很多RAID 模式中都有较为完备的相互校验/恢复的措施,甚至是直接相互的镜像备份,从而大大提高了RAID 系统的容错度,提高了系统的稳定冗余性。
根据组成硬盘的不同方式成为RAID级别(RAID Levels),目前主要的RAID级别有六种(RAID0,RAID1,RAID2,RAID3,RAID4,RAID5),而且还有其中的各种组合,如:RAID10(RAID0和RIAD1的组合),RAID50(RIAD0和RAID5的组合)等等。
为何有RAID技术的存在呢?在数据化快速发展的时代,数据的存储速度,数据的安全性是至关重要的,因此,RAID技术显著的特点是:速度、安全。采用RAID技术,最吸引人的地方还是其数据的备份能力,数据备份能力是指数据一旦发生丢失或者损坏后,利用备份数据能够快速地进行数据的恢复,从而保障数据的安全性。
目前RAID技术大致分为两种:基于硬件的RAID技术和基于软件的RAID技术。在Linux环境下,就可以通过系统自带的软件实现RAID功能,这样就可以替代了购买昂贵的RAID硬件控制器。(PS:通常可以采用虚拟机在Linux环境下来体验RAID技术)。由于是用软件去实现的RAID功能,所以它配置灵活、管理方便。同时使用软件RAID,还可以实现将几个物理磁盘合并成一个更大的虚拟设备,从而达到性能改进和数据冗余的目的。当然基于硬件的RAID解决方案比基于软件RAID技术在使用性能和服务性能上稍胜一筹,具体表现在检测和修复多位错误的能力、错误磁盘自动检测和阵列重建等方面。
按照硬盘的不同方式组合及数据存放顺序,RAID级别也就不同,因此其优缺点也不尽相同。
RAID级别 | 优点 | 缺点 |
RAID 0 | 存取速度快 | 没有容错能力 |
RAID 1 | 完全容错 | 成本高 |
RAID 2 | 海明码校验 | 数据冗余多、速度慢 |
RAID 3 | 写入性能最好 | 没有多任务能力 |
RAID 4 | 具备多任务及容错能力 | |
RAID 5 | 具备多任务及容错能力 | |
RAID 0+1/RAID 10 | 速度快、完全容错 | 成本高 |
RAID 0也成为条带(stripe)存储,即把数据连续依次的分布存储到每个硬盘上,形成条带状,如下图所示。当系统有数据请求时,就可以被多个硬盘并行的处理,每个硬盘只需处理自己盘上的那部分数据,这种数据的并行操作,充分的提高了系统总线的负荷,从而提高了阵列整体的性能。是目前存储速度最快的一种,一旦某个硬盘发生了故障损坏,所有数据将无法恢复。
实现RAID0必须要有2个以上的硬盘,数据将分成数据块依次保存到各个硬盘上。因为数据是分布到各个硬盘上的,所有数据的读写负荷也就分布在不同的硬盘上了,其负荷就比较平衡。由于没有进行数据容错处理,一旦其中一个盘的数据发送了损坏,即使其他盘完好无损,其所有数据也是无法恢复的。RAID0不适合用于对数据稳定性要求高的数据存储,一般可以用来存储一些视频监控等数据,从而提高了数据的存储速度。
RAID又称为镜像存储,一种具有完全冗余的方式。可以使用2个或者2N个硬盘,一个盘用来作为数据盘,另一个或者多个盘作为镜像盘,在数据读写的过程中,同时百分之一百的将数据盘的数据也写入一份到镜像盘中,如下图所示。这种方式的数据可靠性很高,但数据的有效容量只有总容量的一半。在配备上应选择容量大小相同的硬盘,否则有效容量只有最小硬盘容量的大小。
RAID 1技术支持”热替换“机制,即在不需要断电的情况下,可以对故障盘进行替换,更换完毕只要从镜像盘上恢复数据即可。当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作。镜像硬盘相当于一个备份盘,可想而知,这种硬盘模式的安全性是非常高的,RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。
RAID 2又称为带海明码校验的RAID技术,和RAID 3比较相似,都是将数据条带化,分不到不同的硬盘上,然而RAID 2却应用了海明码校验来提供数据错误检查及恢复机制,如下图所示。这种校验技术需要多个磁盘存放检查及恢复信息,使得RAID 2技术实施更为复杂。由于汉明码校验技术的复杂,导致RAID 2成为了RAID技术中最为复杂的级别之一。
在RAID 2中,一个硬盘在一个时间戳内只存取一位数据信息。如下图所示,Disk 0、Disk 1、Disk 2、Disk 3为存储数据的硬盘(简称为数据阵列),每次每个硬盘只存取一位数据A1、A2、A3、A4……。同理,Disk 4、Disk 5、Disk 6为存储校验码的硬盘(简称为校验阵列),每一个硬盘用来存放相应的一位海明码。如果是4 位的数据宽度,那么就需要4 个数据硬盘和3 个汉明码校验硬盘,如果是64 位的位宽呢?数据阵列需要64 块硬盘,校验阵列需要7 块硬盘。
现以典型4位数据宽度为例,海明码将为3个校验码,从而实际的数据位有7位。4位数据码为A1A2A3A4,则:
数据位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
编码 | Ap1 | Ap2 | A1 | Ap3 | A2 | A3 | A4 |
说明 | 第一个海明码 | 第二个海明码 | 第一个数据码 | 第三个海明码 | 第二个数据码 | 第三个数据码 | 第四个数据码 |
海明码Ap1、Ap2、Ap3的计算:
海明码 | 数据码 |
Ap1 | A1、A2、A4 |
Ap2 | A1、A3、A4 |
Ap3 | A2、A3、A4 |
Ap1: A1 + A2 + A4
Ap2: A1 + A3 + A4
Ap3: A2 + A3 +A4
(海明码对奇数结果编码为1,对偶数结果编码为0)
通过4个数据位中3个位的3次组合就可以达到具体码位的校验和修正的目的,不过只允许出现一个位出错,倘若出现2个以上位出错就无法检测出来了。
在数据写入时,RAID 2 在写入数据位同时还要计算出它们的汉明码并写入校验阵列,读取时也要对数据即时地进行校验,最后再发向系统。通过上文的介绍,知道汉明码只能纠正一个位的错误,所以RAID 2 也只能允许一个硬盘出问题,如果两个或以上的硬盘出问题,RAID 2 的数据就将受到破坏。但由于数据是以位为单位并行传输,所以传输率也相当快。
RAID 3,这种校验码与RAID2不同,只能查错不能纠错。它访问数据时一次处理一个带区,这样可以提高读取和写入速度,它像RAID 0一样以并行的方式来存放数据,但速度没有RAID 0快。校验码在写入数据时产生并保存在另一个磁盘上。需要实现时用户必须要有三个以上的驱动器,写入速率与读出速率都很高,因为校验位比较少,因此计算时间相对而言比较少。用软件实现RAID控制将是十分困难的,控制器的实现也不是很容易。它主要用于图形(包括动画)等要求吞吐率比较高的场合。不同于RAID 2,RAID 3使用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据。 如果奇偶盘失效,则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据,奇偶盘会成为写操作的瓶颈。 利用单独的校验盘来保护数据虽然没有镜像的安全性高,但是硬盘利用率得到了很大的提高,为n-1。
是将数据先做XOR 运算,产生Parity Data后,在将数据和Parity Data 以并行存取模式写入成员磁盘驱动器中,因此具备并行存取模式的优点和缺点。进一步来说,RAID 3每一笔数据传输,都更新整个Stripe﹝即每一个成员磁盘驱动器相对位置的数据都一起更新﹞,因此不会发生需要把部分磁盘驱动器现有的数据读出来,与新数据作XOR运算,再写入的情况发生﹝这个情况在 RAID 4和RAID 5会发生,一般称之为Read、Modify、Write Process,我们姑且译为为读、改、写过程﹞。因此,在所有 RAID级别中,RAID 3的写入性能是最好的。
RAID 3 的 Parity Data 一般都是存放在一个专属的Parity Disk,但是由于每笔数据都更新整个Stripe,因此,RAID 3的 Parity Disk 并不会如RAID 4的 Parity Disk,会造成存取的瓶颈。
RAID 3 的并行存取模式,需要RAID 控制器特别功能的支持,才能达到磁盘驱动器同步控制,而且上述写入性能的优点,以目前的Caching 技术,都可以将之取代,因此一般认为RAID 3的应用,将逐渐淡出市场。
RAID 3 以其优越的写入性能,特别适合用在大型、连续性档案写入为主的应用,例如绘图、影像、视讯编辑、多媒体、数据仓储、高速数据撷取等等。
如果一个驱动器出现故障,那么可以使用校验信息来重建所有数据。如果两个驱动器出现故障,那么所有数据都将丢失。不经常使用这个级别的原因是校验信息存储在一个驱动器上。每次写入其它磁盘时,都必须更新这些信息。因此,在大量写入数据时很容易造成校验磁盘的瓶颈,所以目前这个级别的RAID很少使用了。
RAID 4 是采取独立存取模式,同时以单一专属的Parity Disk 来存放Parity Data。RAID 4的每一笔传输﹝Strip﹞资料较长,而且可以执行Overlapped I/O,因此其读取的性能很好。
但是由于使用单一专属的Parity Disk 来存放Parity Data,因此在写入时,就会造成很大的瓶颈。因此,RAID 4并没有被广泛地应用。
RAID4和RAID3很象,不同的是,它对数据的访问是按数据块进行的,也就是按磁盘进行的,每次是一个盘。在图上可以这么看,RAID3是一次一横条,而RAID4一次一竖条。它的特点的RAID3也挺象,不过在失败恢复时,它的难度可要比RAID3大得多了,控制器的设计难度也要大许多,而且访问数据的效率不怎么好。在希望结合大量物理磁盘并且仍然保留一些冗余时,RAID 5 可能是最有用的 RAID 模式。RAID 5可以用在三块或更多的磁盘上,并使用0块或更多的备用磁盘。就像 RAID 4一样,得到的 RAID5 设备的大小是(N-1)*S。
RAID5 与 RAID4 之间最大的区别就是校验信息均匀分布在各个驱动器上,如图4所示,这样就避免了RAID 4中出现的瓶颈问题。如果其中一块磁盘出现故障,那么由于有校验信息,所以所有数据仍然可以保持不变。如果可以使用备用磁盘,那么在设备出现故障之后,将立即开始同步数据。如果两块磁盘同时出现故障,那么所有数据都会丢失。RAID5 可以经受一块磁盘故障,但不能经受两块或多块磁盘故障。
RAID 5也是采取独立存取模式,但是其Parity Data 则是分散写入到各个成员磁盘驱动器,因此,除了具备Overlapped I/O 多任务性能之外,同时也脱离如RAID 4单一专属Parity Disk的写入瓶颈。但是,RAI?D 5在座资料写入时,仍然稍微受到"读、改、写过程"的拖累。
由于RAID 5 可以执行Overlapped I/O 多任务,因此当RAID 5的成员磁盘驱动器数目越多,其性能也就越高,因为一个磁盘驱动器再一个时间只能执行一个 Thread,所以磁盘驱动器越多,可以Overlapped 的Thread 就越多,当然性能就越高。但是反过来说,磁盘驱动器越多,数组中可能有磁盘驱动器故障的机率就越高,整个数组的可靠度,或MTDL (Mean Time to Data Loss) 就会降低。
由于RAID 5将Parity Data 分散存在各个磁盘驱动器,因此很符合XOR技术的特性。例如,当同时有好几个写入要求发生时,这些要写入的数据以及Parity Data 可能都分散在不同的成员磁盘驱动器,因此RAID 控制器可以充分利用Overlapped I/O,同时让好几个磁盘驱动器分别作存取工作,如此,数组的整体性能就会提高很多。