磁盘阵列RAID讲解

  1. 云栖社区>
  2. 博客>
  3. 正文

磁盘阵列RAID讲解

麦老师 2017-06-26 18:00:44 浏览968

RAID:磁盘阵列(Redundant Arrays of Independent Disks)

一台PC机器都会包含CPU、内存、主板、硬盘、网卡等硬件,影响计算机性能的组建包括:CPU、主板总线IO、内存IO、硬盘IO、网卡IO等。可能我们在一提到影响计算机的性能时,首先想到的是CPU,但是随着计算机的发展,特别是对于现代的处理器来说,其运算速度已经是非常快的了,同时我们的内存IO速度也已经达到了非常快的地步了,而我们也知道数据是保存在硬盘上的,所以计算机其实是先将硬盘的数据传递给内存,然后CPU再从内存中加载数据来进行运算的,所以由此看来影响整个计算机性能的因素就是我们的硬盘IO速度了。

RAID是廉价磁盘冗余阵列技术的英文缩写,它的原理就是通过多个磁盘并行运行来提高整个计算机的IO存储性能。

RAID的评判标准有三个:

 <li>速度:读写速度的提升</li>
 <li>磁盘使用率:多磁盘的空间使用率</li>
 <li>冗余性:能够支持几块磁盘损坏而不丢失数据</li>


所以,基于以上三哥评判标准,RAID分为很多种类,称之为RAID级别。

RAID0:

RAID0的工作原理就是通过多块硬盘并行运行来提高整个计算机的IO存储性能,至少需要两块硬盘,RAID0是通过将数据分开读写到多块硬盘的方式来提高读写性能的。

使用RAID0时,我们读写数据的时候是将数据分开读写到多块硬盘上,每个硬盘上保存了数据的一部分,所以读写速度快,但是当其中一块硬盘发生损坏时,整个RAID的数据也就损坏了。

读、写性能提升
无容错能力
最少磁盘数量2块


RAID1:

RAID1至少需要两块硬盘,RAID1在读写数据时会将数据复制到其他硬盘上,即每块硬盘都会保存该数据的一个备份,在读数据时,以提高冗余性,读的时候同时从多块硬盘上读取数据,以提高读的性能。

读性能提升、写性能略有下降
有冗余能力
最少磁盘数量2块


RAID4:

RAID4至少需要三块硬盘,前两块硬盘原理跟RAID0相似,第三块硬盘作为校验盘,对前两块硬盘进行异或校验,因为检验盘一直在进行运算,所以损坏几率较大。

RAID5:

RAID5至少需要三块硬盘,读写数据的时候会将数据分布的读写到所有硬盘上。例如有三块硬盘ABC,当有数据进行读写时候,数据会在A盘IO一些,B盘IO一些,C盘校验,然后A盘IO,B盘校验,C盘IO,然后A盘校验,BC盘IO,将校验分散开来。三块硬盘损坏几率相同,减少单一硬盘损坏几率。

读、写性能提升
有容错能力,允许最多一块磁盘损坏
最少磁盘数量3块


RAID6:

在RAID5的基础上增加了一个校验位,由四块硬盘组成。

读、写性能提升
有容错能力,允许最多2块磁盘损坏
最少磁盘数量4块


RAID10:RAID1+RAID0:

raid


软件RAID的实现:

对于目前所有的操作系统,都有软件RAID的实现,我们的Linux操作系统的软件RAID通过mdadm命令实现。
mdadm支持的RAID级别有:RAID0、RAID1、RAID4、RAID5、RAID6、RAID10。
mdadm可以基于多块硬盘、分区以及逻辑卷来创建RAID。
RAID设备可命名为/dev/mdn,n表示的是第几个RAID,如第一个创建的RAID对应/dev/md0,第二个创建的RAID就对应/dev/md1,当然这个名字是可以自己随便取的。
RAID的信息保存在/proc/mdstat文件中,或者通过mdadm命令查看。

mdadm命令:

-C:创建
-A:装配
-F:监控
-f,-r,-a:管理


-C创建模式:


-n #:使用#个块设备来创建此RAID(-n 2 表示用2块硬盘来创建这个RAID)
-l #:指明要创建的RAID的级别(-l 0 表示创建RAID0)
-a {yes|no}:自动创建对应的设备,yes表示会自动在/dev下创建RAID设备
-c CHUNK_SIZE:指明块大小
-x #:指明空闲盘的个数


创建RAID0:#mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb /dev/sdc
创建RAID1:#mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb /dev/sdc
创建RAID5:#mdadm -C /dev/md2 -a yes -l 5 -n 3 /dev/sdb /dev/sdc /dev/sdd
创建RAID6:#mdadm -C /dev/md3 -a yes -l 6 -n 4 /dev/sdb /dev/dec /dev/sdd /dev/sde