RAID
2012-05-10 15:17:32 阿炯

独立磁盘冗余阵列(RAID, Redundant Array of Independent Disks)简称硬盘阵列,其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:增强资料整合度,增强容错功能,增加处理量或容量。另外,磁盘阵列对于电脑来说, 看起来就像一个单独的硬盘或逻辑存储单元。分为RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6,RAID-7,RAID-10,RAID-50。

简单来说,RAID把多个硬盘组合成为一个逻辑磁区,因此,操作系统只会把它当作一个硬盘。RAID常被用在服务器电脑上,并且常使用完全相同的硬盘作为组合。由于硬盘价格的不断下降与RAID功能更加有效地与主板整合,它也成为了玩家的一个选择,特别是需要大容量储存空间的工作,如:视讯与音讯制作。

最初的RAID分成了不同的等级,每种等级都有其理论上的优缺点,不同的等级在两个目标间取得平衡,分别是增加资料可靠性以及增加存储器(群)读写效能。这些年来,出现了对于RAID观念不同的应用。

重要的 RAID 概念

校验方式用在 RAID 重建中从校验所保存的信息中重新生成丢失的内容。 RAID 5,RAID 6 基于校验。
条带化是将切片数据随机存储到多个磁盘。它不会在单个磁盘中保存完整的数据。如果我们使用2个磁盘,则每个磁盘存储我们的一半数据。
镜像被用于 RAID 1 和 RAID 10。镜像会自动备份数据,在 RAID 1 中,它会保存相同的内容到其他盘上。
热备份只是我们的服务器上的一个备用驱动器,它可以自动更换发生故障的驱动器。在我们的阵列中,如果任何一个驱动器损坏,热备份驱动器会自动用于重建 RAID。
块是 RAID 控制器每次读写数据时的最小单位,最小 4KB。通过定义块大小,我们可以增加 I/O 性能。

RAID有不同的级别,在这里仅列出在真实环境下的使用最多的 RAID 级别。

RAID0 = 条带化
RAID1 = 镜像
RAID5 = 单磁盘分布式奇偶校验
RAID6 = 双磁盘分布式奇偶校验
RAID10 = 镜像 + 条带(嵌套RAID)。

JBOD磁盘直接串连
JBOD磁盘直接串连而成的磁盘柜
RAID0无冗余分布存储
RAID1镜像冗余
RAID2海明码校验,4个磁盘存数据分布存储,3个磁盘校验,实际很少用
RAID3至少三数据盘分布存储(按位分布或按字节分布),一磁盘校验,适用于大容量分散顺序访问。RAID3在有坏盘时性能下降,常由RAID5代替
RAID4同RAID3,但按块分布,读性能好,写性能差,实际少见
RAID5同RAID4,校验数据分布在各磁盘,不存在RAID4的写瓶颈,目前最佳方案
RAID6上面只保护单个磁盘失效,RAID6为双重校验(可在两个磁盘用两种算法存不同的校验数据),写性能差
RAID00双重RAID0
RAID01先镜像1再条带化0,保证数据安全性的同时又提高了性能
RAID10先条带化0再镜像1,保证数据安全性的同时又提高了性能
RAID30/50/60提高性能
RAID7一套事件驱动的操作系统,采用非同步访问减轻写瓶颈提高IO,自动读写优化
RAID-DP采用NVRAM存储写数据,掉电也不丢失,集中写,采用RAID6,性能比RAID4下降小于2%,固件实时更新时也不中断
RAID5E提供冗余盘,在一块磁盘损坏时自动降级至RAID5,时间较长

JBOD
(JBOD, Just a Bunch Of Disks)在某些分类上,JBOD并不算是RAID的等级。只是将多个磁盘空间合并成一个大的逻辑磁盘,不具有错误备援机制。资料的存放机制是由第一颗磁盘开始依序往后存放,即操作系统看到的是一个大磁盘(由许多小磁盘组成)。但如果磁盘损毁,则该颗硬盘上的所有数据将无法救回。若第一颗硬盘损坏,通常无法作救援(因大部分文件系统将文件表存在磁盘前端,即第一颗),失去文件表即失去一切数据。



RAID 0
将多个磁盘合并成一个大的磁盘,不具有冗余,并行I/O,速度最快。RAID 0亦称为带区集。它是将多个磁盘并列起来,成为一个大磁盘。在存放数据时,其将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能,如果一个磁盘(物理)损坏,则所有的数据都会丢失。

理论上越多的磁盘效能就等于“单一磁盘效能”ד磁盘数”,但实际上受限于总线I/O瓶颈及其它因素的影响,RAID效能会随边际递减,也就是说,假设一个磁盘的效能是50MB每秒,两个磁盘的RAID 0效能约96MB每秒,三个磁盘的RAID 0也许是130MB每秒而不是150MB每秒,所以两个磁盘的RAID 0最能明显感受到效能的提升。

但如果是以软件方式来实作RAID,则磁盘的空间则不见得受限于此(例如Linux Software RAID),透过软件实作可以经由不同的组合而善用所有的磁盘空间。
高性能。
RAID 0 中容量零损失。
零容错。
写和读有很高的性能。




RAID 1
两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,另外写入速度有微小的降低。除非拥有相同资料的主磁盘与镜像同时损坏,否则只要一个磁盘正常即可维持运作,可靠性最高。RAID 1就是镜像。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID上磁盘利用率最低的一个级别。
良好的性能。
总容量丢失一半可用空间。
完全容错。
重建会更快。
写性能变慢。
读性能变好。
能用于操作系统和小规模的数据库。




RAID 2
这是RAID 0的改良版,以汉明码(Hamming Code)的方式将数据进行编码后分割为独立的位元,并将数据分别写入硬盘中。因为在数据中加入了错误修正码(ECC,Error Correction Code),所以数据整体的容量会比原始数据大一些,RAID2最少要三台磁盘机方能运作。



RAID 3
采用Bit-interleaving(数据交错储存)技术,它需要通过编码再将数据位元分割后分别存在硬盘中,而将同位元检查后单独存在一个硬盘中,但由于数据内的位元分散在不同的硬盘上,因此就算要读取一小段数据资料都可能需要所有的硬盘进行工作,所以这种规格比较适于读取大量数据时使用。



RAID 4
它与RAID 3不同的是它在分割时是以区块为单位分别存在硬盘中,但每次的数据存取都必须从同位元检查的那个硬盘中取出对应的同位元数据进行核对,由于过于频繁的使用,所以对硬盘的损耗可能会提高。(Block interleaving)



RAID 5
RAID Level 5 是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk Striping(硬盘分割)技术。RAID 5 至少需要三颗硬盘, RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。 RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度相当的慢,若使用“回写快取”可以让效能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较便宜。假设我们有4个驱动器,如果一个驱动器发生故障而后我们更换发生故障的驱动器后,我们可以从奇偶校验中重建数据到更换的驱动器上。奇偶校验信息存储在所有的4个驱动器上,如果我们有4个 1TB 的驱动器。奇偶校验信息将被存储在每个驱动器的256G中,而其它768GB是用户自己使用的。单个驱动器故障后,RAID 5 依旧正常工作,如果驱动器损坏个数超过1个会导致数据的丢失。
性能卓越。
读速度将非常好。
写速度处于平均水准,如果我们不使用硬件 RAID 控制器,写速度缓慢。
从所有驱动器的奇偶校验信息中重建。
完全容错。
1个磁盘空间将用于奇偶校验。
可以被用在文件服务器,Web服务器,非常重要的备份中。




RAID 6
与RAID 5相比,RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的磁盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”非常差。较差的性能和复杂的实作方式使得RAID 6很少得到实际应用。

同一阵列中最多容许两个磁盘损坏。更换新磁盘后,资料将会重新算出并写入新的磁盘中。依照设计理论,RAID 6必须具备四个以上的磁盘才能生效。

它比 RAID 5 慢,因为它将数据同时写到4个驱动器上。当我们使用硬件 RAID 控制器时速度就处于平均水准。如果我们有6个的1TB驱动器,4个驱动器将用于数据保存,2个驱动器将用于校验。
性能不佳。
读的性能很好。
如果我们不使用硬件 RAID 控制器写的性能会很差。
从两个奇偶校验驱动器上重建。
完全容错。
2个磁盘空间将用于奇偶校验。
可用于大型阵列。
用于备份和视频流中,用于大规模。




RAID 7
RAID 7并非公开的RAID标准,而是Storage Computer Corporation的专利硬件产品名称,RAID 7是以RAID 3及RAID 4为基础所发展,但是经过强化以解决原来的一些限制。另外,在实作中使用大量的快取内存以及用以实现异步阵列管理的专用即时处理器,使得RAID 7可以同时处理大量的IO要求,所以效能甚至超越了许多其他RAID标准的实做产品。但也因为如此,在价格方面非常的高昂。[1]

RAID 10/01
RAID 10/01其实可细分为RAID 1+0或RAID 0+1。

RAID 1+0是先镜射再分割资料。是将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。RAID 1+0有着不错的读取速度,而且拥有比RAID 0更高的资料保护性。



RAID 0+1则是跟RAID 1+0的程序相反,是先分割再将资料镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运作。RAID 0+1比起RAID 1+0有着更快的读写速度,不过也多了一些会让整个硬盘组停止运转的机率;因为只要同一组的硬盘全部损毁,RAID 0+1就会停止运作,而RAID 1+0则可以在牺牲RAID 0的优势下正常运作。



RAID 10巧妙的利用了RAID 0的速度以及RAID 1的保护两种特性,不过它的缺点是需要的硬盘数较多,因为至少必须拥有四个以上的偶数硬盘才能使用。

RAID 50
RAID50也被称为镜象阵列条带,由至少六块硬盘组成,像RAID0一样,数据被分割成条带,在同一时间内向多块磁盘写入;像RAID5一样,也是以数据的校验位来保证数据的安全,且校验条带均匀分布在各个磁盘上。其目的在于提高RAID5的读写性能。

RAID 53
它拥有一个镜射条带阵列,硬盘里其中一个条带就是一个是由3组以上的RAID 5组成RAID 3硬盘阵列。

应用
RAID2、3、4较少实际应用,因为RAID5已经涵盖了所需的功能,因此RAID2、3、4大多只在研究领域有实作,而实际应用上则以RAID5或RAID6为主。

磁盘阵列技术术语

硬盘镜像(Disk Mirroring):硬盘镜像最简单的形式是,一个主机控制器带二个互为镜像的硬盘。数据同时写入二个硬盘,二个硬盘上的数据完全相同,因此一个硬盘故障时,另一个硬盘可提供数据。

硬盘数据跨盘(Disk Spanning):利用这种技术,几个硬盘看上去像是一个大硬盘;这个虚拟盘可以把数据跨盘存储在不同的物理盘上,用户不需关心哪个盘上存有他需要的数据。

硬盘数据分段(Disk Striping):数据分散存储在几个盘上。数据的第一段放在盘0,第2段放在盘1,……直至达到硬盘链中的最后一个盘,然后下一个逻辑段将放在硬盘0,再下一个逻辑段放在盘1,如此循环直至完成写操作。

双控(Duplexing):这里指的是用二个控制器来驱动一个硬盘子系统。一个控制器发生故障,另一个控制器马上控制硬盘操作。此外,如果编写恰当的控制器软件,可实现不同的硬盘驱动器同时工作。

容错(Fault Tolerant):具有容错功能的机器有抗故障的能力。例如RAID 1镜像系统是容错的,镜像盘中的一个出故障,硬盘子系统仍能正常工作。

主机控制器(Host Adapter):这里指的是使主机和外设进行数据交换的控制部件(如SCSI控制器)。

热修复(Hot Fix):指用一个硬盘热备份来替换发生的故障的硬盘。要注意故障盘并不是真正地被物理替换了。用作热备份的盘被加载上故障盘原来的数据,然后系统恢复工作。

热补(Hot Patch):具有硬盘热备份,可随时替换故障盘的系统。

热备份(Hot Spare):与CPU系统电连接的硬盘,它能替换下系统中的故障盘。与冷备份的区别是,冷备份盘平时与机器不相连接,硬盘故障时才换下故障盘。

平均数据丢失时间(MTBDL-Mean Time Between Data Loss):发生数据丢失的事件间的平均时间。

平均无故障工作时间(MTBF-Mean Time Between Failure或MTIF):设备平均无故障运行时间。

廉价冗余磁盘阵列(RAID-Redundant Array of Inexpensive Drives):一种将多个廉价硬盘组合成快速,有容错功能的硬盘子系统的技术。

系统重建(Reconstruction or Rebuild):一个硬盘发生故障后,从其它正确的硬盘数据和奇偶信息恢复故障盘数据的过程。

恢复时间(Reconstruction Time):为故障盘重建数据所需要的时间。

单个大容量硬盘(SLED-Singe Expensive Drive)。

传输速率(Transfer Rate):指在不同条件下存取数据的速度。

虚拟盘(Virtual Disk):与虚拟存储器类似,虚拟盘是一个概念盘,用户不必关心他的数据写在哪个物理盘上。虚拟盘一般跨越几个物理盘,但用户看到的只是一个盘。

Stripe size
Stripe size 默认64KB。
 1)、Stripe size百科介绍 
在每个磁盘上连续写入数据的总量,也称作“条带深度”。你可以指定每个逻辑驱动器的条带容量从2KB,4KB,8KB一直到128KB。为了获得更高的性能,要选择条带的容量等于或小于操作系统的簇的大小。大容量的条带会产生更高的读取性能,尤其在读取连续数据的时候。而读取随机数据的时候,最好设定条带的容量小一点。如果指定128KB的条带将需要8MB内存。

不同Stripe size的选择直接影响性能,如IOPS和吞吐量。
Stripe size值小,通过多块磁盘响应多个I/O请求,可以增加I/O访问速率(IOPS)
Stripe size值大,通过多块磁盘响应一个I/O请求,可以增加数据传输速率(Mbps)
我们知道顺序和随机对于带宽和iops的需求成反比,即顺序的读写比较消耗带宽,随机的读写比较消耗iops;

2)、Stripe size一般设置
通常,小Stripe size适用于数据库,一般Stripe size适用于文件服务器,大Stripe size适用于多煤体应用。实际应用stripe size大小应在效率测试后具体设置。

数据库一般4-16KB
web服务器默认即可,16-64KB
流媒体等大文件建议128KB以上


缓存
对于一块中高端的RAID,缓存是必不可少的。一般raid卡使用的DDR2内存颗粒,和内存条几乎相同,adaptec的缓存叫DRAM,根据硬件技术的发展DDR3肯定会跟上的。说到缓存技术就必须说一下两种缓存模式。
write through 系统的写入请求直接写入硬盘,安全性很高,性能很低。
write back 系统的写入请求先存放到缓存,再根据时机统一回写到硬盘中,由于缓存的写速度远远高于磁盘,所以这种方式性能可以大大提高。

BBWC
为了挖掘更好的RAID写入性能,可打开write back功能,让咱的数据库飞起来。但是这个时候出现了一个非常严重的安全问题,就是突然断电导致数据丢失的问题(上面提过raid卡使用的是RAM存储 器,断电丢失数据,但是系统层已经认为这些数据已经写入硬盘,所以系统层不能提供任何保护措施),数据丢失对于DBA的亲们肯定是不能接收的。

针对这个问题出现了BBWC–Battery-Backed Write Cache.BBWC的核心就是BBU电池备份单元,它就是一块锂电池,在系统开机的情况下处于充电状态,一旦遇到断电,就会给缓存提供刷新所需的电流,保持数据不丢失,直到下次开机时把数据写回到磁盘上。有的BBU和raid卡的内存做在一个模块上,有些是raid卡通过一个连接线连接一个电池。BBWC的缺点:
 1、每隔1-2年需要跟换电磁,维护麻烦,管理员容易忘记这个事情,如果机器不很远的机房单独去机房换电池,成本就高了。
 2、更换电磁需要停机,并且需要把机器下架,拆开。
 3、由于电池也是一个故障点,所以需要管理员花更多的时间来关心电磁的工作情况
 4、电池能够提供的供电时间最多72小时,初始化需要充电数小时才能使用
 5、电池不环保

FBWC
针对BBWC的缺点,出现了FBWC –Flash-Based Write Cache。
FBWC的原理就是再系统以外停电的时候,利用一组“超级电容”中存储的电量,在较短的时间内(大约1分钟),将缓存中的数据备份到RAID卡上的大容量FLASH闪存中,知道下次开机再把数据回写到硬盘中。FBWC和BBWC几乎完成的目的是一样的,但是实现方式不同。FBWC的优点:
 1、不需要维护,这点就把管理员们解决出来了
 2、数据可以在flash中保存很多年
 3、系统启动即可用
 4、环保

对于数据库应用,通常我们换选择raid1+0。他在磁盘空间成本和安全性方面和raid5差不多,但是在性能方面(IOPS)却明显优越于raid5,所以对于OLTP系统,一般使用raid1+0。

RAID卡的读、写、缓存的策略

Read Policy

Read-Ahead
若使用Read-Ahead方式,在查找数据时控制器会从逻辑磁盘上连续的几个扇区读取数据。若数据实际写在逻辑磁盘连续的几个扇区上,Read-Ahead能提高读性能。

No-Read-Ahead
即控制器不使用Read Ahead的方式读取磁盘。

Adaptive Read-Ahead
若使用这种方式,仅当最近2个读请求获取的数据是在连续的扇区时,控制器才启动Read-Ahead方式读取数据,当读请求获取的数据随机分布在磁盘上时,控制器会转为no read ahead方式,此时控制器继续判断接下来的读请求获取的数据是否在连续的扇区上,如果是的话,再将读策略调整为Read-Ahead的方式。

Write Policy

WriteBack
将数据写入RAID卡缓存并直接返回,RAID卡控制器将在系统负载低或者Cache满了的情况下把数据写入硬盘。该设置会大大提升RAID卡写性能,绝大多数的情况下会降低系统IO负载。 数据的可靠性由RAID卡的BBU(Battery Backup Unit)进行保证。

WriteThrough
数据写操作不使用缓存,数据直接写入磁盘。RAID卡写性能下降,在大多数情况下该设置会造成系统IO负载上升。

Cache Policy

Cache I/O
指定所有读请求被cache内存缓存。

Direct I/O
读请求不会被cache缓存。当使用Direct I/O时,读请求的数据会同时传给控制器缓存,如果随后的读请求需要的是同一个数据块数据时,其能直接从控制器缓存中读取。Direct I/O是默认设置。

BBU相关信息

Dell服务器的Raid卡具体可充电电池的特性,即不使用时,也有微弱的放电现象,当它的电量低于一个阈值时,Raid卡控制器会对电池进行一次放电,将剩余的电量放掉后再进行充电。在这个过程中,当电量低于某阈值时,Raid卡默认认为BBU不可用,将Raid写策略由WriteBack改为WriteThrough,此时会导致Raid的I/O能力大幅度下降。

查看当前BBU状态
MegaCli -AdpBbuCmd -GetBbuStatus -aALL

对部分字段的解释:

Charging Status
当前电池处于什么状态,有Charging, Discharging, None等值,分别代表电池充电,放电,及没有充放电操作的状态。

Learn Cycle Requested
当其为Yes且Learn Cycle Active为No, 说明已经开始Learn Cycle的第一阶段, 此时策略开始变为WriteThrough, 电池将经历一个放电后充电或者充电的过程。

Learn Cycle Active
是否处于Learn Cycle的校准阶段。如果为Yes, 则进入了Learn Cycle的第二阶段,控制器开始校准电池。

Battery Replacement required
电池是否需要维修。

Remaining Capacity Low
剩余电容量低。如果为Yes,可能需要换电池。