RAID
磁盘阵列(Redundant Arrays of Independent Drives,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。
磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上
RAID0
RAID0
又称为Stripe或Striping,它代表了所有RAID
级别中最高的存储性能。RAID0
提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。
这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能
工作原理
系统向三个磁盘组成的逻辑硬盘(RAID0
磁盘组)发出的I/O
数据请求被转化为3项操作,其中的每一项操作都对应于一块物理硬盘。
通过建立RAID0
,原先顺序的数据请求被分散到所有的三块硬盘中同时执行。从理论上讲,三块硬盘的并行操作使同一时间内磁盘读写速度提升了3倍。 但由于总线带宽等多种因素的影响,实际的提升速率肯定会低于理论值,但是,大量数据并行传输与串行传输比较,提速效果显著显然毋庸置疑优缺点
读写性能是所有RAID级别中最高的
RAID0
的缺点是不提供数据冗余,因此一旦用户数据损坏,损坏的数据将无法得到恢复。RAID0
运行时只要其中任一块硬盘出现问题就会导致整个数据的故障。一般不建议企业用户单独使用
磁盘空间使用率:100%,故成本最低。
读性能:N*单块磁盘的读性能
写性能:N*单块磁盘的写性能
冗余:无,任何一块磁盘损坏都将导致数据不可用
RAID1
RAID1
通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1
可以提高读取性能。RAID1
是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据
- 工作原理
RAID1
是将一个两块硬盘所构成RAID
磁盘阵列,其容量仅等于一块硬盘的容量,因为另一块只是当作数据“镜像”。RAID1
磁盘阵列显然是最可靠的一种阵列,因为它总是保持一份完整的数据备份。
它的性能自然没有RAID0
磁盘阵列那样好,但其数据读取确实较单一硬盘来的快,因为数据会从两块硬盘中较快的一块中读出。RAID1
磁盘阵列的写入速度通常较慢,因为数据得分别写入两块硬盘中并做比较。RAID1
磁盘阵列一般支持“热交换”,就是说阵列中硬盘的移除或替换可以在系统运行时进行,无须中断退出系统。RAID1
磁盘阵列是十分安全的,不过也是较贵一种RAID
磁盘阵列解决方案,因为两块硬盘仅能提供一块硬盘的容量。RAID1
磁盘阵列主要用在数据安全性很高,而且要求能够快速恢复被破坏的数据的场合
在这里,需要注意的是,读只能在一块磁盘上进行,并不会进行并行读取,性能取决于硬盘中较快的一块。写的话通常比单块磁盘要慢,虽然是并行写,即对两块磁盘的写入是同时进行的,但因为要比较两块硬盘中的数据,所以性能比单块磁盘慢
- 优缺点
RAID1
通过硬盘数据镜像实现数据的冗余,保护数据安全,在两块盘上产生互为备份的数据,当原始数据繁忙时,可直接从镜像备份中读取数据,因此RAID1
可以提供读取性能。RAID1
是硬盘中单位成本最高的,但提供了很高的数据安全性和可用性,当一个硬盘失效时,系统可以自动切换到镜像硬盘上读/写,并且不需要重组失效的数据
磁盘空间使用率:50%,故成本最高。
读性能:只能在一个磁盘上读取,取决于磁盘中较快的那块盘
写性能:两块磁盘都要写入,虽然是并行写入,但因为要比对,故性能单块磁盘慢。
冗余:只要系统中任何一对镜像盘中有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行
RAID5
RAID5
是RAID0
和RAID1
的折中方案。RAID5
具有和RAID0
相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID5
的磁盘空间利用率要比RAID1
高,存储成本相对较低,是目前运用较多的一种解决方案
- 工作原理
RAID5
把数据和相对应的奇偶校验信息存储到组成RAID5
的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1
块磁盘上都存储完整的数据,也就是说有相当于一块磁盘容量的空间用于存储奇偶校验信息。
因此当RAID5
的一个磁盘发生损坏后,不会影响数据的完整性,从而保证了数据安全。当损坏的磁盘被替换后,RAID
还会自动利用剩下奇偶校验信息去重建此磁盘上的数据,来保持RAID5
的高可靠性
做RAID5
阵列所有磁盘容量必须一样大,当容量不同时,会以最小的容量为准。 最好硬盘转速一样,否则会影响性能,而且可用空间=磁盘数n-1
,RAID5
没有独立的奇偶校验盘,所有校验信息分散放在所有磁盘上, 只占用一个磁盘的容量
磁盘空间利用率:(N-1)/N
,即只浪费一块磁盘用于奇偶校验。
读性能:(n-1)*单块磁盘的读性能,接近RAID0
的读性能。
写性能:比单块磁盘的写性能要差(因为写入磁盘的同时还要写入奇偶校验)
冗余:只允许一块磁盘损坏
- 校验原理
生成P校验位的公式一般是这样的: P = D1 ⊕ D2 ⊕ D3
P为校验位,D1~D3分别代表三个数据位,⊕表示异或操作。
可以看到,当D1 D2 D3中其余的一个数据丢失的时候,可以利用其余的三个数据位和校验位P进行恢复,具体的恢复公式如下:
例如,当D1丢失的时候,D1 = D2 ⊕ D3 ⊕ P
RAID6
RAID6
是最常用的RAID级别之一。与RAID5
类似,但该级别将奇偶校验数据写入两个硬盘。RAID6
至少需要4个硬盘,可以同时承受2个硬盘故障。这种技术结合了块级条带和双分布式奇偶校验。RAID6
对所有硬盘的数据和奇偶校验信息进行条带化处理,冗余信息重复。这一级别提供了改进的性能,并可以承受两个驱动器的完全失败。RAID6
被认为比RAID5
更安全,但数据写入速度可能比RAID5
慢。这是因为RAID6
涉及计算额外的奇偶校验数据。对于使用大量大型硬盘进行数据存储的应用服务器来说,RAID6
是正确的选择。
RAID5
已经提供了一定程度的可靠性,然而也牺牲了一定的读取速度。特别是在RAID
重构作业中,大量的数据读写操作增加硬盘的负担,旧的硬盘更容易发生故障。RAID5
的局限性还表现在RAID5
仅能在一块硬盘发生故障的情况下修复数据,如果2块硬盘同时发生故障,RAID5
则无能为力。
以前,两块盘同时坏的情况是小概率事件,几乎不可能发生。但是近来随着光纤(FC)盘和SATA盘的容量和密度不断增加,使得RAID5
的重建时间也不断增加。两块硬盘同时损坏的概率也大幅增加,在企业级存储上,这种风险必须得到重视。所以RAID6
应需诞生了。
RAID6
同RAID5
最大的区别就是在RAID5
的基础上除了具有P校验位以外,还加入了第2个校验位Q位。以RAID6
(6D+1P+1Q)为例子,这个系统需要8块硬盘,其中6块用于存放数据,1块用于存放P校验位,1块用于存放Q校验位。
当然,得又一次强调,并非某个具体的独立的盘全部用来存放P校验信息,另外一个Q校验信息。而是对于某个位组(6个数据位+P位+Q位)来说,采用某种原则,6块盘上存放数据位,1块盘存放P位,1块盘用来存放Q位。
- 校验原理
P = D1 ⊕ D2 ⊕ D3
Q = GF(D1) ⊕ GF(D2) ⊕ GF(D3)
GF(D1):对D1位进行Galois Field变换。
当一块磁盘出现数据错误或者丢失的时候,恢复方法同RAID5
,无须使用Q校验位。当两块磁盘上的数据出现错误或者丢失的时候,恢复方法为:利用上面给出的P,Q的生成公式,联立方程组,无论受损的数据是否包括P或者Q,总是能够解出损失的两位的数据。
RAID10
RAID10
也被称为镜象阵列条带。像RAID0
一样,数据跨磁盘抽取;像RAID1
一样,每个磁盘都有一个镜象磁盘, 所以RAID10
的另一种会说法是RAID 0+1
。RAID10
提供100%的数据冗余,支持更大的卷尺寸,但价格也相对较高。对大多数只要求具有冗余度而不必考虑价格的应用来说,RAID10
提供最好的性能。
使用RAID10
,可以获得更好的可靠性,因为即使两个物理驱动器发生故障(每个阵列中一个),数据仍然可以得到保护。RAID10
需要4 + 2*N
个磁盘驱动器(N >=0), 而且只能使用其中一半(或更小, 如果磁盘大小不一)的磁盘用量, 例如 4 个 250G 的硬盘使用RAID10
阵列, 实际容量是500G
- 实现原理
RAID10
其实结构非常简单,首先创建2个独立的RAID1
,然后将这两个独立的RAID1
组成一个RAID0
,当往这个逻辑RAID
中写数据时,数据被有序的写入两个RAID1
中。磁盘1和磁盘2组成一个RAID1
,磁盘3和磁盘4又组成另外一个RAID1
;
这两个RAID1
组成了一个新的RAID0
。如写在硬盘1上的数据1、3、5、7,写在硬盘2中则为数据1、3、5、7,硬盘中的数据为0、2、4、6,硬盘4中的数据则为0、2、4、6,因此数据在这四个硬盘上组合成RAID10
,且具有RAID0
和RAID1
两者的特性
虽然RAID10
方案造成了50%的磁盘浪费,但是它提供了200%的速度和单磁盘损坏的数据安全性,并且当同时损坏的磁盘不在同一RAID1
中,就能保证数据安全性。假如磁盘中的某一块盘坏了,整个逻辑磁盘仍能正常工作的。
当我们需要恢复RAID10
中损坏的磁盘时,只需要更换新的硬盘,按照RAID10
的工作原理来进行数据恢复,恢复数据过程中系统仍能正常工作。原先的数据会同步恢复到更换的硬盘中
磁盘空间利用率:50%。
读性能:N/2*单块硬盘
的读性能
写性能:N/2*单块硬盘
的写性能
冗余:只要一对镜像盘中有一块磁盘可以使用就没问题
RAID01
RAID10
是先做镜象,然后再做条带。RAID01
则是先做条带,然后再做镜象。
以4块盘为例来介绍安全性方面的差别:
1、RAID10
的情况 这种情况中,我们假设当DISK0
损坏时,在剩下的3块盘中,只有当DISK1
一个盘发生故障时,才会导致整个RAID
失效,我们可简单计算故障率为1/3。
2、RAID01
的情况 这种情况下,我们仍然假设DISK0
损坏,这时左边的条带将无法读取。在剩下的3块盘中,只要DISK2
,DISK3
两个盘中任何一个损坏,都会导致整个RAID
失效,我们可简单计算故障率为2/3。
因此RAID10
比RAID01
在安全性方面要强。从数据存储的逻辑位置来看,在正常的情况下RAID01
和RAID10
是完全一样的,而且每一个读写操作所产生的IO数量也是一样的,所以在读写性能上两者没什么区别。
而当有磁盘出现故障时,比如前面假设的DISK0
损坏时,我们也可以发现,这两种情况下,在读的性能上面也将不同,RAID10
的读性能将优于RAID01
。