对于raid的理解

一、前言

1.1简介

磁盘阵列RAID——独立磁盘冗余阵列。

磁盘阵列是由很多廉价的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。

利用同位检查(ParityCheck)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。

相同的数据存储在多个硬盘的不同的地方的方法。通过把数据放在多个硬盘上(冗余),输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。

1.2raid实现方式

软 RAID :
所有功能均有操作系统和 CPU 来完成,没有独立的 RAID 控制 / 处理芯片和 I/O 处理芯片,效率最低
硬 RAID :
配备了专门的 RAID 控制 / 处理芯片和 I/O 处理芯片以及阵列缓冲,不占用 CPU 资源,但成本很高。
软硬混合 RAID
具备 RAID 控制 / 处理芯片,但缺乏 I/O 处理芯片,需要 CPU 和驱动程序来完成,性能和成本 在软 RAID 和硬 RAID 之间。

二、标准raid

raid0、raid1、raid5、raid6、raid10、raid01、raid50

1、raid0:条带化存储

对于raid的理解_第1张图片

特点: 存储性能最优
原理: 把连续的数据分散到多个磁盘上存取,有数据请求时可以多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。
优点

  1. 充分利用I/O总线性能使其带宽翻倍,读/写速度翻倍
  2. 充分利用磁盘空间,利用率为100%

缺点:

  1. 没有数据冗余,存在单点故障
  2. 没有数据校验,正确性不能保证

应用场景:

  1. 数据正确性要求不高的场景:个人娱乐,日志
  2. 读写性能要求高:图像处理
    性能:
    读性能:n100%
    写性能:n
    100%
2、raid1:镜像存储

对于raid的理解_第2张图片
特点:
成本最高的,磁盘利用率最低,但提供了很高的数据安全性和可用性,当一个磁盘失效的时候,系统可以自动切换到镜像磁盘进行读写,不需要重组失效的数据。
性能:
磁盘空间 = 磁盘总量/2 = 50%
需要的磁盘数:至少2块
读性能= 优秀 = I/O性能*n = 200%
写性能=正常=100%
优点:

  1. 提供数据冗余,数据双倍存储。
  2. 提供良好的读性能

缺点:

  1. 无数据校验
  2. 利用率低,成本高

应用场景:
存放重要数据,银行,金融

3、raid5:奇偶校验(0和1的折中版)

对于raid的理解_第3张图片

原理:
数据以块分段条带化存储。校验信息交叉地存储在所有的数据盘上。数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据
优点:

  1. 读写性能高
  2. 有校验机制
  3. 磁盘空间利用率高

缺点:

磁盘越多安全性能越差,因为重建时,raid的性能就会受损

应用场景:
安全性高,如金融、数据库、存储等。
性能:
磁盘空间 = n-1
需要的磁盘数 ≥ 3
读写性能 ≈ 优秀 = 磁盘个数(n)I/O速度 = n100%

4、raid6:双重奇偶校验

对于raid的理解_第4张图片
RAID0-5都只能保护因单个磁盘失效而造成的数据丢失。

RAID6 不仅支持数据的恢复,还支持校验数据的恢复,因此实现代价很高,控制器的设计也比其他等级更复杂、更昂贵。

原理:
两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。
但RAID 6需要分配给奇偶校验信息更大的磁盘空间,写性能比RAID5差。
特点:
RAID6 具有快速的读取性能、更高的容错能力。但成本高于 RAID5 许多,写性能较差,设计和实施非常复杂。它一般是替代 RAID10 方案的经济性选择。
性能:
磁盘空间 = n-2
需要的磁盘数 ≥ 4

优点:

  1. 良好的随机读性能
  2. 有校验机制

缺点:

  1. 写入速度差
  2. 成本高

应用场景:
对数据安全级别要求比较高的企业

三、组合raid

1、raid01

对于raid的理解_第5张图片
原理:

先做RAID 0再将RAID 0组合成RAID 1,拥有两种RAID的特性。

磁盘空间= n/2 = 50%

4 ≥ 需要的磁盘数 ≥ 2*n

读写性能 = RAID0

优点:

  1. 较高的IO性能
  2. 有数据冗余
  3. 无单点故障

缺点:

  1. 成本稍高
  2. 安全性比RAID 10 差

应用场景
适用于既有大量数据需要存取,同时又对数据安全性要求严格的领域,如银行、金融、商业超市、仓储库房、各种档案管理等。

2、raid10

对于raid的理解_第6张图片
原理:
先做RAID 1再将RAID 1组合成RAID 0,拥有两种RAID的特性,安全性能高。

优点:

  1. RAID10的读性能将优于RAID01
  2. 较高的IO性能
  3. 有数据冗余
  4. 无单点故障
  5. 安全性能高

缺点:
成本稍高

特性:
磁盘空间= n/2 = 50%
至少4块硬盘

应用场景:

特别适用于既有大量数据需要存取,同时又对数据安全性要求严格的领域,如银行、金融、商业超市、仓储库房、各种档案管理等。
对于raid的理解_第7张图片

3、raid50

原理:
由两组RAID 5磁盘组成(每组最少3个),每一组都使用了分布式奇偶位,而两组硬盘再组建成RAID 0,实现跨磁盘抽取数据。RAID 50提供可靠的数据存储和优秀的整体性能,并支持更大的卷尺寸。即使两个物理磁盘发生故障(每个阵列中一个),数据也可以顺利恢复过来。
优点:

  1. 读性能高:支持并发读取
  2. 连续写性能适中:支持并行写入
  3. 安全性高:最多允许故障2块盘

缺点: 随机写性能适中,支持并发写入,但是

四、RAID 应用选择

选择判断的3个因素:

数据可用性、 I/O 性能和成本

关于标准磁盘的选择:

如果可用性和性能是重要的,而成本不是一个主要因素,则根据磁盘数量选择 RAID1
如果可用性,成本和性能都同样重要,则根据一般的数据传输和磁盘数量选择 RAID3 或 RAID5

关于组合磁盘:raid10、raid01和raid50

安全性:
raid10安全性比较高:
空间利用率
raid10和raid01都是50%
raid50空间利用率最低百分之75,磁盘越多,利用率越高
读写性能较
主要分析分析如下三个过程:读,连续写,离散写。
在介绍这三个过程之前,先介绍一个特别重要的概念:cache。
cache已经是整个存储的核心所在,就是中低端存储,也有很大的cache存在,包括最简单的raid卡,一般都包含有几十,甚至几百兆的raid cache。

cache的作用?
体现在读与写两个不同的方面,如果作为写,一般存储阵列只要求写到cache就算完成了写操作,所以,阵列的写是非常快速的,在写cache的数据积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入,至于cache数据的保护,一般都依赖于镜像与电池(或者是UPS)。
cache的读一样不可忽视,因为如果读能在cache中命中的话,将减少磁盘的寻道,因为磁盘从寻道开始到找到数据,一般都在6ms以上,而这个时间,对于那些密集型io的应用可能不是太理想。但是,如果cache能命中,一般响应时间则可以在1ms以内。两者应该相差3个数量级(1000倍)。

1)读操作方面的性能差异
RAID10可供读取有效数据的磁盘个数为4,RAID5可供读取有效数据的磁盘个数也为4个(校验信息分布在所有的盘上),所以两者的读的性能应该是基本一致的。
2)连续写方面的性能差异
在连续写操作过程,如果有写cache存在,并且算法没有问题的话,RAID5比RAID10甚至会更好一些,虽然也许并没有太大的差别。(这里要假定存储有一定大小足够的写cache,而且计算校验的cpu不会出现瓶颈)。
因为这个时候的RAID校验是在cache中完成,如4块盘的RAID5,可以先在内存中计算好校验,同时写入3个数据+1个校验。而RAID10只能同时写入2个数据+2个镜相。
4块盘的RAID5可以在同时间写入1、2、3到cache,并且在cache计算好校验之后,这里假定是6,同时把三个数据写到磁盘。而4块盘的RAID10不管cache是否存在,写的时候,都是同时写2个数据与2个镜相。
根据前面对缓存原理的介绍,写cache是可以缓存写操作的,等到缓存写数据积累到一定时期再写到磁盘。但是,写到磁盘阵列的过程是迟早也要发生的,所以RAID5与RAID10在连续写的情况下,从缓存到磁盘的写操作速度会有较小的区别。不过,如果不是连续性的强连续写,只要不达到磁盘的写极限,差别并不是太大。
3)离散写方面的性能差异
例如oracle 数据库每次写一个数据块的数据,如8K;由于每次写入的量不是很大,而且写入的次数非常频繁,因此联机日志看起来会像是连续写。但是因为不保证能够添满RAID5的一个条带,比如32K(保证每张盘都能写入),所以很多时候更加偏向于离散写入(写入到已存在数据的条带中)。
离散写的时候,RAID5与RAID10工作方式有什么不同?我们假定要把一个数字2变成数字4,那么对于RAID5,实际发生了4次io:先读出2与校验6,可能发生读命中然后在cache中计算新的校验写入新的数字4与新的校验8。
对于RAID10,同样的单个操作,最终RAID10只需要2个io,而RAID5需要4个io.
这里我忽略了RAID5在那两个读操作的时候,可能会发生读命中操作的情况。也就是说,如果需要读取的数据已经在cache中,可能是不需要4个io的。这也证明了cache对RAID5 的重要性,不仅仅是计算校验需要,而且对性能的提升尤为重要。
当然,并不是说cache对RAID10就不重要了,因为写缓冲,读命中等,都是提高速度的关键所在,只不过RAID10对cache的依赖性没有RAID5那么明显而已。

你可能感兴趣的:(运维基础知识,运维)