磁盘RAID阵列
一、概述
1988年美国加州大学伯克利分校的提出了RAID概念(RedundantArrayofInexpensiveDisks廉价冗余磁盘阵列),随着磁盘成本的不断降低,RAID变成了(RedundantArrayofIndependentDisks独立磁盘冗余阵列),但实质内容没有改变。SNIA、Berkeley等组织机构把RAID0~RAID6七个等级定为标准的RAID等级,标准RAID可以组合成其他RAID等级,而实际中使用最多的等级是RAID0、RAID1、RAID3、RAID5、RAID6和RAID10。RAID每一个等级代表一种实现方法和技术,等级之间并无高低之分。在实际应用中,应当根据用户的数据应用特点,综合考虑可用性、性能和成本来选择合适的RAID等级,以及具体的实现方式。
从实现角度看,RAID主要分为软RAID、硬RAID以及软硬混合RAID三种。
- 软RAID:所有功能均由操作系统和CPU来完成,效率自然最低
- 硬RAID:配备了专门的RAID控制/处理芯片和I/O处理芯片以及阵列缓冲,不占用CPU资源,但成本很高
- 软硬混合RAID:具备RAID控制/处理芯片,但缺乏I/O处理芯片,需要CPU和驱动程序来完成,性能和成本在软RAID和硬RAID之间
二、RAID基本原理
RAID是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。
RAID是一类多磁盘管理技术,其向主机环境提供了成本适中、数据可靠性高的高性能存储。RAID的两个关键目标是提高数据可靠性和I/O性能。
磁盘阵列中,数据分散在多个磁盘中,然而对于计算机系统来说,就像一个单独的磁盘。通过把相同数据同时写入到多块磁盘(典型的如镜像),或者将计算的校验数据写入阵列中来获得冗余能力,当单块磁盘出现故障时可以保证不会导致数据丢失。
RAID中主要有三个关键概念和技术:镜像(Mirroring)、数据条带(DataStripping) 和 数据校验(Dataparity):
- 镜像:将数据复制到多个磁盘,一方面可以提高可靠性,另一方面可并发从两个或多个副本读取数据来提高读性能。显而易见,镜像的写性能要稍低,确保数据正确地写到多个磁盘需要更多的时间消耗。
- 数据条带:将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本,这与镜像的多个副本是不同的,它通常用于性能考虑。数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上数据进行读写操作,从而获得非常可观的I/O性能提升。
- 数据校验:利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。利用校验功能,可以很大程度上提高磁盘阵列的可靠性、鲁棒性和容错能力。不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。
不同等级的RAID采用一个或多个以上的三种技术,来获得不同的数据可靠性、可用性和I/O性能。至于设计何种RAID(甚至新的等级或类型)或采用何种模式的RAID,需要在深入理解系统需求的前提下进行合理选择,综合评估可靠性、性能和成本来进行折中的选择。
总体说来,RAID主要优势有:大容量、高性能、可靠性、可管理性。
三、常见RAID等级
1、RAID0
RAID0称为条带,是一种简单的、无数据校验的数据条带化技术。性能在所有RAID等级中是最高的。不提供任何形式的冗余策略。100%利用存储空间。
写数据的时候,会将数据分为N份,以独立的方式实现N块磁盘的读写,那么这N份数据会同时并发的写到磁盘中,因此执行性能非常的高。
- 高性能
- 容量零损失
- 零容错,一旦一块磁盘故障则数据丢失
- 写和读有很高的性能
2、RAID1
RAID1称为镜像,它将数据完全一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为50%。数据写入时性能有所影响,但是读数据没有影响。提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。
- 良好的性能
- 总容量丢失一半可用空间
- 完全容错
- 重建会更快
- 写性能变慢
- 读性能变好
- 能用于操作系统和小规模的数据库
3、RAID3
RAID3称为专用奇偶校验条带,它采用一个专用的磁盘作为校验盘,其余磁盘作为数据盘,数据按 位 或 字节 为单位的方式交叉存储到各个数据盘中。RAID3至少需要三块磁盘。写数据时性能过低。
- 当一块硬盘失效时,该硬盘上的所有数据块必须使用校验信息重新建立。如果是从好盘中读取数据块,不会有任何变化。但是如果要读取的数据块正好位于已经损坏的硬盘上,则必须同时读取同一条带中的所有其他数据块,并根据校验值重建丢失的数据。
- 出现大量的写操作,RAID-3会把数据的写入操作分散到多个磁盘上进行,但是不管是向哪一个数据盘写入数据,都需要同时重写校验盘中的相关信息
如下图所示,物理盘2中的每一个校验块所包含的都是其他两块物理盘中对应数据块的校验信息,P0为数据0、1的异或值,P1为数据2、3的异或值,P2为数据4、5的异或值
5、RAID4
RAID4与RAID3的原理大致相同,RAID-4是以 条带 为单位。提供了非常好的读性能,但写性能比较差。而且随着成员磁盘数量的增加,校验盘的系统瓶颈将更加突出。在实际应用中很少见,主流存储产品也很少使用RAID4保护。
6、RAID5
RAID5称为分布奇偶校验条带,应该是目前最常见的RAID等级,原理与RAID4相似,但不存在RAID4中的并发写操作时的校验盘性能瓶颈问题。
RAID-5数据以 条带 为单位分布到各个硬盘上,不是把所有的校验块集中保存在一个专门的校验盘中,而是将校验块分散到所有的数据盘中。
- 性能卓
- 读速度将非常好
- 写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢
- 从所有驱动器的奇偶校验信息中重建
- 完全容错
- 1个磁盘空间将用于奇偶校验
- 可以被用在文件服务器,Web服务器,非常重要的备份中
RAID-5的校验值采用的是异或算法。异或运算是二进制数值间的一种算法,其运算符号为XOR,或者用“⊕”表示。RAID-5之所以能够容错,就是利用了异或运算的以下特点
# 1.运算结果与运算顺序无关
(a ⊕ b) ⊕ c=a ⊕ (b ⊕ c)
# 2.各个参与运算的数字与结果循环对称
# 如果a ⊕ b ⊕ c=d, 那么:
a=b ⊕ c ⊕ d
b=a ⊕ c ⊕ d
c=a ⊕ b ⊕ d
上面例子中的a、b、c、d看作RAID-5四块成员盘上的条带,其中三个是数据条带,剩下一个是校验条带,如果有一块成员盘离线,不管哪个条带丢失了,都可以用剩下的三个条带经过异或计算出来。
如下图所示,RAID-5的校验码存在于所有硬盘上,其中P0为数据条带0、1的校验值,P1为数据2、3的校验值,P2为数据4、5的校验值。
7、RAID6
RAID6称为双重奇偶校验条带,引入双重校验的概念解决其他RAID等级无法解决的两个磁盘同时发生故障数据完整性问题。但是,它的成本要高于RAID5许多,写性能也较差,且设计和实施非常复杂。因此RAID6很少得到实际应用,一般是替代RAID10方案的经济性选择。
标准RAID等级各有优势和不足。把多个RAID等级组合起来,实现优势互补,弥补相互的不足,从而达到在性能、数据安全性等指标上更高的RAID系统。当然,组合等级的实现成本一般都非常昂贵,只是在少数特定场合应用。实际得到较为广泛应用的只有RAID01和RAID10两个等级。
- 性能不佳
- 读的性能很好
- 如果我们不使用硬件 RAID 控制器写的性能会很差
- 从两个奇偶校验驱动器上重建
- 完全容错
- 2个磁盘空间将用于奇偶校验, 成本高
- 可用于大型阵列
- 用于备份和视频流中,用于大规模
8、RAID10
RAID 10 可以被称为1 + 0或0 +1。同时拥有RAID0的超凡速度和RAID1的高数据可靠性,但是磁盘的利用率比较低
-
RAID01是先做条带化再作镜像,本质是对物理磁盘实现镜像;
-
RAID10是先做镜像再作条带化,是对虚拟磁盘实现镜像。
相同的配置下,通常RAID01比RAID10具有更好的容错能力。RAID01兼备了RAID0和RAID1的优点,整体磁盘利用率均仅为50%。
- 良好的读写性能
- 总容量丢失一半的可用空间
- 容错
- 从副本数据中快速重建
- 由于其高性能和高可用性,常被用于数据库的存储中
四、主流RAID等级对比
RAID 等级 | RAID0 | RAID1 | RAID3 | RAID5 | RAID6 | RAID10 |
---|---|---|---|---|---|---|
别名 | 条带 | 镜像 | 专用奇偶校验条带 | 分布奇偶校验条带 | 双重奇偶校验条带 | 镜像加条带 |
容错性 | 无 | 有 | 有 | 有 | 有 | 有 |
冗余类型 | 无 | 有 | 有 | 有 | 有 | 有 |
热备份选择 | 无 | 有 | 有 | 有 | 有 | 有 |
读性能 | 高 | 低 | 高 | 高 | 高 | 高 |
随机写性能 | 高 | 低 | 低 | 一般 | 低 | 一般 |
连续写性能 | 高 | 低 | 低 | 低 | 低 | 一般 |
需要磁盘数 | n≥1 | 2n (n≥1) | n≥3 | n≥3 | n≥4 | 2n(n≥2)≥4 |
可用容量 | 全部 | 50% | (n-1)/n | (n-1)/n | (n-2)/n | 50% |
五、RAID选择
在实际应用中,应当根据用户的数据应用特点和具体情况,综合考虑可用性、性能和成本来选择合适的RAID等级。RAID等级的选择主要有三个因素:数据可用性、I/O性能、成本。
- 如果不要求可用性,选择RAID0以获得高性能。
- 如果可用性和性能是重要的,而成本不是一个主要因素,则根据磁盘数量选择RAID1。
- 如果可用性,成本和性能都同样重要,则根据一般的数据传输和磁盘数量选择RAID3或RAID5。