2010.1--RAID比较

RAID基础,RAID10与RAID01比较,RAID10与RAID5比较
文档中,RAID10与RAID5抄袭了piner的文章,敬请谅解。
文档内容3部分:
1、基本的RAID级别介绍
2、RAID10和RAID01的比较
3、RAID10和RAID5的比较
RAID10和RAID01的比较
 RAID10是先做镜象,然后再做条带。
 RAID01则是先做条带,然后再做镜象。
比如以6个盘为例,RAID10就是先将盘分成3组镜象,然后再对这3个RAID1做条带。RAID01则是先利用3块盘做RAID0,然后将另外3块盘做为RAID0的镜象。
下面以4块盘为例来介绍安全性方面的差别:
1、RAID10的情况

这种情况中,我们假设当DISK0损坏时,在剩下的3块盘中,只有当DISK1一个盘发生故障时,才会导致整个RAID失效,我们可简单计算故障率为1/3。
2、RAID01的情况

这种情况下,我们仍然假设DISK0损坏,这时左边的条带将无法读取。在剩下的3块盘中,只要DISK2,DISK3两个盘中任何一个损坏,都会导致整个RAID失效,我们可简单计算故障率为2/3。
因此RAID10比RAID01在安全性方面要强。

从数据存储的逻辑位置来看,在正常的情况下RAID01和RAID10是完全一样的,而且每一个读写操作所产生的IO数量也是一样的,所以在读写性能上两者没什么区别。而当有磁盘出现故障时,比如前面假设的DISK0损坏时,我们也可以发现,这两种情况下,在读的性能上面也将不同,RAID10的读性能将优于RAID01。
BTxigua 上传了这个图片:
document.body.clientWidth-230) this.width=document.body.clientWidth-230" border="0" />

RAID10RAID5的比较

为了方便对比,这里拿同样多驱动器的磁盘来做对比, RAID5 选择 3D+1P RAID 方案, RAID10 选择 2D+2D RAID 方案,如图:
1 、安全性方面的比较
其实在安全性方面,勿须质疑,肯定是 RAID10 的安全性高于 RAID5 。我们也可以从简单的分析来得出。当盘 1 损坏时,对于 RAID10 ,只有当盘 1 对应的镜象盘损坏,才导致 RAID 失效。但是对于 RAID5 ,剩下的 3 块盘中,任何一块盘故障,都将导致 RAID 失效。
在恢复的时候, RAID10 恢复的速度也快于 RAID5
2 、空间利用率的比较
RAID10 的利用率是 50% RAID5 的利用率是 75% 。硬盘数量越多, RAID5 的空间利用率越高。
3 、读写性能方面的比较
主要分析分析如下三个过程:读,连续写,离散写。
在介绍这三个过程之前,先介绍一个特别重要的概念: 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 那么明显而已。
4 )磁盘的 IOPS 对比
假定一个 case ,业务的 iops 10000 ,读 cache 命中率是 30% ,读 iops 60% ,写 iops 40% ,磁盘个数为 120 ,那么分别计算在 raid5 raid10 的情况下,每个磁盘的 iops 为多少。
raid5:
单块盘的 iops = (10000*(1-0.3)*0.6 + 4 * (10000*0.4))/120
= (4200 + 16000)/120
= 168
这里的 10000*(1-0.3)*0.6 表示是读的 iops ,比例是 0.6 ,除掉 cache 命中,实际只有 4200 iops
4 * (10000*0.4) 表示写的 iops ,因为每一个写,在 raid5 中,实际发生了 4 io ,所以写的 iops 16000
为了考虑 raid5 在写操作的时候,那 2 个读操作也可能发生命中,所以更精确的计算为:
单块盘的 iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4)*(1-0.3) + 2 * (10000*0.4))/120
= (4200 + 5600 + 8000)/120
= 148
计算出来单个盘的 iops 148 个,基本达到磁盘极限
raid10
单块盘的 iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4))/120
= (4200 + 8000)/120
= 102
可以看到,因为 raid10 对于一个写操作,只发生 2 io ,所以,同样的压力,同样的磁盘,每个盘的 iops 只有 102 个,还远远低于磁盘的极限 iops
4 、小结
所以要求较高的空间利用率,对安全性要求不是特别高、大文件存储的系统采用 RAID5 比较好。
相反,安全性要求很高,不计成本,小数据量频繁写入的系统采用 RAID10 的方式比较好。

你可能感兴趣的:(职场,raid,休闲)