0.目录
1.RAID
1.1 什么是RAID
RAID,全称Redundant Array Inexpensive(Independent) Disks。这个名称的由来有一定历史原因,不赘述。现在就直接视为磁盘阵列。
磁盘阵列:将多块磁盘,按一定的方式组合起来,以提高耐用性和IO能力。
需要注意的是,RAID有冗余能力提高了耐用性,但取代不了数据备份。因RAID冗余只能保证磁盘坏时数据不受影响,如果数据遭到误删,那和磁盘就没关系了,所以重要数据还是要备份。
1.2 使用场景
1、数据存储在某磁盘上,若该磁盘损坏,则会导致业务终止。
2、磁盘访问密集时,其有限的I/O能力将成为业务瓶颈。
1.3 RAID如何提高磁盘耐用性和I/O能力
RAID耐用性的实现,主要通过磁盘冗余来实现;
RAID使I/O能力的提升,可通过其自带的“CPU”和“内存”(仅供RAID使用),也可理解为是RAID的控制器。
- 通过其“内存”的异步存取可有效提升I/O能力。如果发生断电等会导致异步存取中断。所以RAID一般配有电池,关机后仍可供电一段时间。
- 通过其“CPU”,可将需存取的数据切割为多个chunk(即多份相同大小的数据)。按一定策略(即各RAID级别)存储在各磁盘上,读取时再合并各chunk的数据。这样可降低各磁盘的I/O压力,从而提升整体的I/O能力。
1.4 RAID级别
RAID有不同级别,各级别表示的是其组织各磁盘的方式,并非有级别“高低”之分。
RAID级别的设置在BIOS中,而非操作系统。
2.RAID各级别组织方式
2.1 RAID-0
2.1.1 实现方式
RAID-0,也称条带卷。RAID-0实现方式:
数据存储方式:
各chunk平均、依次分配存储至各磁盘上,即把整个数据条带化存储了。
2.1.2 指标及分析
指标 | 产生结果(提升、下降均相对于单硬盘) |
---|---|
I/O能力 | 提升 |
耐用性 | 下降 |
使用的最少硬盘数 | 2 |
可用空间 | N*min(Disk1,Disk2……) |
分析:
- I/O能力
以上述图示为例,如果数据的总大小为9G,每个硬盘仅需吞吐(即I/O)3G的数据,相对于单硬盘,RAID-0的每个硬盘I/O压力明显降低。
使用更多的磁盘,就会更多地分摊I/O压力。不过并不是添加硬盘越多就越好。因为读取时,控制器需要时间合并各磁盘读来的数据;写入时又要费时间来分割数据。 - 耐用性
由RAID-0组织方式,可以看出其无冗余能力。任何一块硬盘损坏,就会造成整个数据的不完整,而多个硬盘出故障的概率又大于单硬盘。所以RAID-0耐用性相对于单硬盘是降低的。
所以RAID-0不适合存储关键数据。可用于存储非关键的“中间数据”,比如交换分区数据、临时文件系统等。 - 最少硬盘数
由RAID-0组织方式,可知其最少使用2块硬盘。 - 可用空间
RAID-0可用空间取决于其组成硬盘中最小的那个。因为根据RAID-0写入数据的方式,任何一块盘满,其他硬盘也无法再写入。
2.2 RAID-1
2.2.1 实现方式
RAID-1,也称镜像卷。RAID-1实现方式:
数据存储方式:
各chunk,每个硬盘都存一份,如同镜像。
2.2.2 指标及分析
指标 | 产生结果(提升、下降均相对于单硬盘) |
---|---|
I/O能力 | 写性能略微下降;读性能提升 |
耐用性 | 提升 |
存储空间利用率 | 50%以下 |
使用的最少硬盘数 | 最少为2,且一般也只用2块硬盘 |
可用空间 | 1*min(Disk1,Disk2…) |
分析:
- I/O能力
RAID-1各硬盘存储的数据相同,在写入时,数据在所有硬盘上都完整存储才算写入完成,所以虽然每个硬盘的写入压力相同,但RAID-1整体写性能取决于最慢的那个硬盘。相对于单硬盘写性能是略有下降的。
读性能提升。读取各chunk不一定要在一块硬盘上。比如chunk1在第一块读,chunk2在第二块读等等。从而降低各硬盘读取压力,RAID-1整体读性能提升。 - 耐用性
有冗余能力,也是其最大优点。每个硬盘都存储数据,只要不同时损坏,数据即可正常读写。耐用性提升。 - 存储空间利用率
有冗余的RAID级别,存储空间利用率都不会是100%。
RAID-1若使用2块盘,利用率为50%;使用更多则会在50%以下。因各硬盘数据都一样。 - 使用最少硬盘数
由其组织方式决定,最少硬盘数为2,且一般就使用2个。如果使用2个以上,除了存储空间利用率降低,写性能也会进一步降低,因为写入数据时要等所有硬盘都写入完毕。 - 可用空间
各硬盘存储的数据大小一致,所以只要其中1块硬盘满,其他硬盘均无法继续写入。且各硬盘存储的内容相同。所以可用空间为1*min(Disk1,Disk2…)。
2.3 RAID-4
2.3.1 实现方式
RAID-4实现方式:
数据存储方式:
前面硬盘按条带卷存储各chunk,最后一块硬盘作为校验盘,存储前面硬盘数据计算得出的校验码(比如按位计算出的异或值)。如果存储数据的某硬盘损坏,校验盘可和剩下的正常硬盘数据计算,得出损坏盘上的数据1。
2.3.2 降级模式
- 什么是降级模式
以RAID-4为例,一块硬盘坏了之后,读、写仍是可以执行的。读的话,需要边计算边读,速度会比较慢;写的话,也是边计算边写到没坏的硬盘和校验盘上。
这种存在坏硬盘的情况下继续工作的状态称为降级模式。 - 降级模式的风险及规避
显然,降级模式下的读、写操作会增大剩余好硬盘和校验盘的压力。对于RAID-4,处于降级模式时如果再坏一块硬盘(也可以是校验盘),那么就彻底坏了。
所以在出现硬盘故障时,应暂停使用RAID,换一块新硬盘(一般是热备一块空闲盘)并计算出原来硬盘的数据。这样就和原来状态一样了。
不过,在计算原来硬盘数据的过程中也有可能出现新的坏盘(概率很小),对于RAID-4,这种情况也就意味着彻底坏了,RAID-4最多允许一块坏盘。
2.3.3 缺陷
RAID-4的一大缺陷:单块盘作为校验盘,任何一个存数据的盘写入数据,校验盘的数据都要跟着变。这大大增加了校验盘的压力,使之成为RAID-4的性能瓶颈。
所以RAID-4不常用。
2.4 RAID-5
2.4.1 实现方式
数据存储方式:
RAID-5存储原理与RAID-4相同。不过为了避免RAID-4单个校验盘的压力,RAID-5采用了各硬盘轮流存储校验值的方式。
校验数据从第一块盘开始存储,之后各硬盘依次做校验盘,称为左对衬。如上图所示就是左对衬的方式(虚线标出)。相反地,校验数据若从最后一块盘开始,依次向前轮流做校验盘,称为右对称。一般采用左对衬。
2.4.2 指标及分析
指标 | 产生结果(提升、下降均相对于单硬盘) |
---|---|
I/O能力 | 提升 |
耐用性 | 提升 |
存储空间利用率 | (N-1)/N以下,其中N为硬盘总数 |
使用的最少硬盘数 | 最少3个 |
可用空间 | (N-1)*min(Disk1,Disk2…) |
分析:
- I/O能力
每个硬盘仅存储数据的一部分,所以I/O压力减小,RAID总体I/O能力提升。 - 耐用性
同RAID-4,最多允许一块硬盘挂掉,挂掉后即变为降级模式。2块以上挂掉则彻底挂。 - 可用空间
最小的一块硬盘满,则RAID-5无法继续存储数据。且校验数据大小相当于其中一块硬盘。所以可用空间为(N-1)*min(Disk1,Disk2…)。
2.5 RAID-10
2.5.1 实现方式
数据存储方式:
各硬盘先分组做RAID-1,各组再在更高级别上做RAID-0。
2.5.2 指标及分析
指标 | 产生结果(提升、下降均相对于单硬盘) |
---|---|