一、RAID 是什么?
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。
二、RAID 有哪些?
RAID方案常见的可以分为:
- RAID0
- RAID1
- RAID5
- RAID6
- RAID10
下面来分别介绍一下。
Raid 0:至少需要两块硬盘,磁盘越多,读写速度越快,没有冗余。
Raid 1:只能用两块硬盘,两块硬盘的数据互为镜像(写慢,读快),一块磁盘冗余。
Raid 5:至少需要3块硬盘,一块磁盘冗余。它是最通行的配置方式。具有奇偶校验的数据恢复功能的数据存贮方式。奇偶校验数据块分布于阵列里的各个硬盘中。
Raid 6:至少需要4块硬盘,2块磁盘冗余,硬盘的总数大于等于4即可。
Raid 10:至少需要4块硬盘,冗余一半的硬盘数量,但是硬盘的总数必须是大于或等于4的偶数(相当于每两块硬盘做一个Raid0,然后把各个Raid0做成一个Raid1)。
Raid 50:至少需要6块硬盘,磁盘的冗余相当于每三个硬盘做了一个Raid5,然后,每个Raid5又组合成了Raid0(Raid5中有一个硬盘冗余,即使坏了也不会破坏Raid0),所以,Raid50的磁盘的 冗余硬盘数量=磁盘总数÷3 。
Raid 60:至少需要8块硬盘
具体如下
- RAID0
RAID0 是一种非常简单的的方式,它将多块磁盘组合在一起形成一个大容量的存储。当我们要写数据的时候,会将数据分为N份,以独立的方式实现N块磁盘的读写,那么这N份数据会同时并发的写到磁盘中,因此执行性能非常的高。
RAID0 的读写性能理论上是单块磁盘的N倍(仅限理论,因为实际中磁盘的寻址时间也是性能占用的大头)
但RAID0的问题是,它并不提供数据校验或冗余备份,因此一旦某块磁盘损坏了,数据就直接丢失,无法恢复了。因此RAID0就不可能用于高要求的业务中,但可以用在对可靠性要求不高,对读写性能要求高的场景中。
那有没有可以让存储可靠性变高的方案呢? 有的,下面的RAID1就是。
- RAID1
如图,
RAID1 是磁盘阵列中单位成本最高的一种方式。因为它的原理是在往磁盘写数据的时候,将同一份数据无差别的写两份到磁盘,分别写到工作磁盘和镜像磁盘,那么它的实际空间使用率只有50%了,两块磁盘当做一块用,这是一种比较昂贵的方案。
RAID1其实与RAID0效果刚好相反。RAID1 这种写双份的做法,就给数据做了一个冗余备份。这样的话,任何一块磁盘损坏了,都可以再基于另外一块磁盘去恢复数据,数据的可靠性非常强,但性能就没那么好了。
了解了RAID0和RAID1之后,我们发现这两个方案都不完美啊。 这时候就该 性能又好、可靠性也高 的方案 RAID5 登场了。
- RAID5
这是目前用的最多的一种方式。 因为 RAID5 是一种将 存储性能、数据安全、存储成本 兼顾的一种方案。
在了解RAID5之前,我们可以先简单看一下RAID3,虽然RAID3用的很少,但弄清楚了RAID3就很容易明白RAID5的思路。
RAID3的方式是:将数据按照RAID0的形式,分成多份同时写入多块磁盘,但是还会另外再留出一块磁盘用于写「奇偶校验码」。例如总共有N块磁盘,那么就会让其中额度N-1块用来并发的写数据,第N块磁盘用记录校验码数据。一旦某一块磁盘坏掉了,就可以利用其它的N-1块磁盘去恢复数据。
但是由于第N块磁盘是校验码磁盘,因此有任何数据的写入都会要去更新这块磁盘,导致这块磁盘的读写是最频繁的,也就非常的容易损坏。
RAID5的方式可以说是对RAID3进行了改进。
RAID5模式中,不再需要用单独的磁盘写校验码了。它把校验码信息分布到各个磁盘上。例如,总共有N块磁盘,那么会将要写入的数据分成N份,并发的写入到N块磁盘中,同时还将数据的校验码信息也写入到这N块磁盘中(数据与对应的校验码信息必须得分开存储在不同的磁盘上)。一旦某一块磁盘损坏了,就可以用剩下的数据和对应的奇偶校验码信息去恢复损坏的数据。
RAID5校验位算法原理:P = D1 xor D2 xor D3 … xor Dn (D1,D2,D3 … Dn为数据块,P为校验,xor为异或运算)
RAID5的方式,最少需要三块磁盘来组建磁盘阵列,允许最多同时坏一块磁盘。如果有两块磁盘同时损坏了,那数据就无法恢复了。
- RAID6
为了进一步提高存储的高可用,聪明的人们又提出了RAID6方案,可以在有两块磁盘同时损坏的情况下,也能保障数据可恢复。
为什么RAID6这么牛呢,因为RAID6在RAID5的基础上再次改进,引入了双重校验的概念。
RAID6除了每块磁盘上都有同级数据XOR校验区以外,还有针对每个数据块的XOR校验区,这样的话,相当于每个数据块有两个校验保护措施,因此数据的冗余性更高了。
但是RAID6的这种设计也带来了很高的复杂度,虽然数据冗余性好,读取的效率也比较高,但是写数据的性能就很差。因此RAID6在实际环境中应用的比较少。
- RAID10
RAID10其实就是RAID1与RAID0的一个合体。
我们看图就明白了:
RAID10兼备了RAID1和RAID0的有优点。首先基于RAID1模式将磁盘分为2份,当要写入数据的时候,将所有的数据在两份磁盘上同时写入,相当于写了双份数据,起到了数据保障的作用。且在每一份磁盘上又会基于RAID0技术讲数据分为N份并发的读写,这样也保障了数据的效率。
但也可以看出RAID10模式是有一半的磁盘空间用于存储冗余数据的,浪费的很严重,因此用的也不是很多。
整体对比一下 RAID0、RAID1、RAID5、RAID6、RAID10 的几个特征:
以下是更多类型对比以及原理的简介!
热备盘
磁盘阵列术语汇编 Array:阵列
磁盘阵列模式是把几个磁盘的存储空间整合起来,形成一个大的单一连续的存储空间。NetRAID控制器利用它的SCSI通道可以把多个磁盘组合成一个磁 盘阵列。简单的说,阵列就是由多个磁盘组成,并行工作的磁盘系统。需要注意的是作为热备用的磁盘是不能添加到阵列中的。
Array Spanning:阵列跨越
阵列跨越是把2个,3个或4个磁盘阵列中的存储空间进行再次整合,形成一个具有单一连续存储空间的逻辑驱动器的过程。NetRAID控制器可以跨越连续 的几个阵列,但每个阵列必需由相同数量的磁盘组成,并且这几个阵列必需具有相同的RAID级别。就是说,跨越阵列是对已经形成了的几个阵列进行再一次的组 合,RAID 1,RAID 3和RAID 5跨越阵列后分别形成了RAID 10,RAID 30和RAID 50。
Cache Policy:高速缓存策略
NetRAID控制器具有两种高速缓存策略,分别为Cached I/O(缓存I/O)和Direct I/O(直接I/O)。缓存I/O总是采用读取 和写入策略,读取的时候常常是随意地进行缓存。直接I/O在读取新的数据时总是采用直接从磁盘读出的方法,如果一个数据单元被反复地读取,那么将选择一种 适中的读取策略,并且读取的数据将被缓存起来。只有当读取的数据重复地被访问时,数据才会进入缓存,而在完全随机读取状态下,是不会有数据进入缓存的。
Format:格式化
在物理驱动器(硬盘)的所有数据区上写零的操作过程,格式化是一种纯物理操作,同时对硬盘介质做一致性检测,并且标记出不可读和坏的扇区。由于大部分硬盘在出厂时已经格式化过,所以只有在硬盘介质产生错误时才需要进行格式化。
Hot Spare:热备用
当一个正在使用的磁盘发生故障后,一个空闲、加电并待机的磁盘将马上代替此故障盘,此方法就是热备用。热备用磁盘上不存储任何的用户数据,最多可以有8 个磁盘作为热备用磁盘。一个热备用磁盘可以专属于一个单一的冗余阵列或者它也可以是整个阵列热备用磁盘池中的一部分。而在某个特定的阵列中,只能有一个热 备用磁盘。
当磁盘发生故障时,控制器的固件能自动地用热备用磁盘代替故障磁盘,并通过算法把原来储存在故障磁盘上的数据重建到热备用磁盘上。数据只能从带有冗余的 逻辑驱动器上进行重建(除了RAID 0以外),并且热备用磁盘必须有足够多的容量。系统管理员可以更换发生故障的磁盘,并把更换后的磁盘指定为新的热备 用磁盘。
Hot swap Disk Module:热交换磁盘模式(热插拔)
热交换模式允许系统管理员在服务器不断电和不中止网络服务的情况下更换发生故障的磁盘驱动器。由于所有的供电和电缆连线都集成在服务器的底板上,所以热 交换模式可以直接把磁盘从驱动器笼子的插槽中拔除,操作非常简单。然后把替换的热交换磁盘插入到插槽中即可。热交换技术仅仅在 RAID 1,3,5,10,30和50的配置情况下才可以工作。
Initialization:初始化
在逻辑驱动器的数据区上写零的操作过程,并且生成相应的奇偶位,使逻辑驱动器处于就绪状态。初始化将删除以前的数据并产生奇偶校验,所以逻辑驱动器在此过程中将一并进行一致性检测。没有经过初始化的阵列是不能使用的,因为还没有生成奇偶区,阵列会产生一致性检测错误。
IOP(I/O Processor):输入输出处理器
输入输出处理器是NetRAID控制器的指令中心,实现包括命令处理,PCI和SCSI总线的数据传输,RAID的处理,磁盘驱动器重建,高速缓存的管理和错误恢复等功能。
Logical Drive:逻辑驱动器
阵列中的虚拟驱动器,它可以占用一个以上的物理磁盘。逻辑驱动器把阵列或跨越阵列中的磁盘分割成了连续的存储空间,而这些存储空间分布在阵列中的所有磁 盘上。NetRAID控制器能设置最多8个不同容量大小的逻辑驱动器,而每个阵列中至少要设置一个逻辑驱动器。输入输出操作只能在逻辑驱动器处于在线的状 态下才运行。
Logical Volume:逻辑卷
由逻辑磁盘形成的虚拟盘,也可称为磁盘分区。
Mirroring:镜像
冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。RAID 1和RAID 10使用的就是镜像。 Parity:奇偶校验位
在数据存储和传输中,字节中额外增加一个比特位,用来检验错误。它常常是从两个或更多的原始数据中产生一个冗余数据,冗余数据可以从一个原始数据中进行重建。不过,奇偶校验数据并不是对原始数据的完全复制。
在RAID中,这种方法可以应用到阵列中的所有磁盘驱动器上。奇偶校验位还可以组成专用的奇偶校验方式,在专用奇偶校验中,奇偶校验数据可分布在系统中所有的磁盘上。如果一个磁盘发生故障,可以通过其它磁盘上的数据和奇偶校验数据重建出这个故障磁盘上的数据。
Power Fail Safeguard:掉电保护
当此项设置为可用时,在重构过程中(非重建),所有的数据将一直保存在磁盘上,直到重构完成后才删除。这样如果在重构过程中发生掉电,将不会发生数据丢失的危险情况。
Ready State:就绪状态
就绪状态是一个可用的硬盘,它即不在线也不是热备用盘,并可以添加到任一个阵列中或者指定为热备用盘的这种硬盘状态。 Rebuild:重建
在RAID 1,3,5,10,30或50阵列中把一个故障盘上的所有数据再生到替换磁盘上的过程。磁盘重建过程中逻辑驱动器通常不会中断对其数据的访问请求。
SCSI Disk Status:SCSI磁盘状态
SCSI磁盘(物理驱动器)可以有以下五种状态,分别为Ready(就绪),未配置的加电可操作磁盘;Online(在线),配置过的加电可操作磁 盘;Hot Spare(热备用),当一个磁盘出现故障时,准备使用的加电待用磁盘;Failed(故障),磁盘发生错误导致失效或用户利用 NetRAID控制器使用程序使驱动器脱机的状态;Rebuilding(重建),磁盘正处于从一个或几个关键性逻辑驱动器上恢复数据的过程中。
Stripe Size:条带容量
在每个磁盘上连续写入数据的总量,也称作“条带深度”。你可以指定每个逻辑驱动器的条带容量从2KB,4KB,8KB一直到128KB。为了获得更高的 性能,要选择条带的容量等于或小于操作系统的簇的大小。大容量的条带会产生更高的读取性能,尤其在读取连续数据的时候。而读取随机数据的时候,最好设定条 带的容量小一点。如果指定128KB的条带将需要8MB内存。
Striping:条带化
条带化是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中不同磁盘上的方法。此技术非常有用,它比单个磁盘所能提供的读写速度要快的 多,当数据从第一个磁盘上传输完后,第二个磁盘就能确定下一段数据。数据条带化正在一些现代数据库和某些RAID硬件设备中得到广泛应用。
Write policy:写入策略
当处理器向磁盘上写入数据的时候,数据先被写入高速缓存中,并认为处理器有可能马上再次读取它。NetRAID有两种如下的写入策略:
Write Back(回写),在回写状态下,数据只有在要被从高速缓存中清除时才写到磁盘上。随着主存读取的数据增加,回写需要开始从高速缓存中向此 盘上写数据,并把更新的数据写入高速缓存中。由于一个数据可能会被写入高速缓存中许多次,而没有进行磁盘存取,所以回写的效率非常高。
Write Through(完全写入),在完全写入状态下,数据在输入到高速缓存时,它同时也被写到磁盘上。因为数据已经复制到磁盘上,所以在高速缓存中可以直接更改要替换的数据,因此完全写入要比回写简单的多。