摘要:安全性方面的比较, 其实在安全性方面,勿须质疑,肯定是RAID 10的安全性高于RAID 5。我们也可以从简单的分析来得出。当盘1损坏时,对于RAID 10,只有当盘1对应的镜象盘损坏,才导致RAID失效。但是对于RAID 5,剩下的3块盘中……

公司最近上马新的ERP系统,旧的系统已经无法满足业务迅速发展的要求,在服务器选择方面遇到了一些技术难题。

经过长达数月的调研,最近要开始实施了,但要决定的事情还有很多,费用开销(一次性和每个月份的)的差异性也很大,比如:软件系统服务提供商的选择;服务器是放在公司内部还是在数据中心?如果采用远程数据中心的方案,是放在电信的机房,还是网通的机房?亦或是联通的机房?在选择服务器方面,是选择1U的服务器,还是2U的?CPU个数,内存,储存空间的使用,系统软件的许可证的个数等等,都需要权衡,做出决定和取舍,要知道这些要素的组合产生的价格差异真是天壤之别!

里就选择磁盘阵列问题:一个最具典型性的与储存空间,效率以及可靠性相关的技术问题,就我了解到的情况列出来进行探讨,期望对遇到类似问题的朋友和公司内部人士提供一些参考信息。

公司数年前已经使用了一台著名品牌的塔式服务器作为公司内部的文件服务器和ERP数据服务器,使用两块完全相同的磁盘,采用RAID1结构,这台服务器使用了5年了,基本没有出现过数据灾难,但因为频繁的断电和加电的不规范操作,前不久,这台服务器的电源出现问题了,磁盘容量也几乎消耗完了,我估计磁盘的寿命也差不多了,可能也需要升级了。

公司新上马的ERP系统,因为要满足各个分公司,各办事处,销售人员和后勤人员,服务人员甚至客户的协同的,大量的,24小时不间断的远程高负荷的数据操作,在数据储存方面需要采用更高级别的RAID磁盘阵列容错系统。

就在此时,服务器基础构架,型号基本定了,但是采取何种磁盘阵列,到现在为止,还无法决定,但我明白,我们只能在RAID 5和RAID10二者之间做出选择,我将我了解到的二者的区别列出来进行分析,期望从中获得决策的灵感:

为了方便RAID 10和RAID5对比,这里拿同样多驱动器的磁盘来做对比(4个相同的磁盘),RAID 5可以选择3D+1P的RAID方案,RAID 10则可以选择2D+2D的RAID方案。

  • 安全性方面的比较, 其实在安全性方面,勿须质疑,肯定是RAID 10的安全性高于RAID 5。我们也可以从简单的分析来得出。当盘1损坏时,对于RAID 10,只有当盘1对应的镜象盘损坏,才导致RAID失效。但是对于RAID 5,剩下的3块盘中,任何一块盘故障,都将导致RAID失效, 在恢复的时候,RAID10恢复的速度也快于RAID5。

  • 空间利用率的比较: RAID 10的利用率是50%,RAID 5的利用率是75%。硬盘数量越多,RAID 5的空间利用率越高。

  • 读写性能方面的比较: 主要分析分析如下三个过程:读,连续写,离散写。

在介绍这三个过程之前,先介绍一个特别重要的概念:cache(写入缓存), cache已经是整个存储的核心所在,就是中低端存储,也有很大的cache存在,包括最简单的raid卡,一般都包含有几十,甚至几百兆的Raid cache。

Cache的主要作用是什么呢?体现在读与写两个不同的方面,如果作为写,一般存储阵列只要求写到cache就算完成了写操作,所以,阵列的写是非常快速的,在写cache的数据积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入,至于cache数据的保护,一般都依赖于镜相与电池(或者是UPS)。

Cache的读一样不可忽视,因为如果读能在cache中命中的话,将减少磁盘的寻道,因为磁盘从寻道开始到找到数据,一般都在6ms以上,而这个时间,对于那些密集型io的应用可能不是太理想。但是,如果cache能命中,一般响应时间则可以在1ms以内。两者应该相差3个数量级(1000倍)。

读操作方面的性能比较

RAID 10可供读取有效数据的磁盘个数为4,RAID 5可供读取有效数据的磁盘个数也为4个(校验信息分布在所有的盘上),所以两者的读的性能应该是基本一致的。

连续写方面的性能比较

在连续写操作过程,如果有写cache存在,并且算法没有问题的话,RAID 5比RAID 10甚至会更好一些,虽然也许并没有太大的差别。(这里要假定存储有一定大小足够的写cache,而且计算校验的cpu不会出现瓶颈)。 因为这个时候的RAID校验是在cache中完成,如4块盘的RAID 5,可以先在内存中计算好校验,同时写入3个数据+1个校验。而RAID 10只能同时写入2个数据+2个镜相。

根据前面对缓存原理的介绍,写cache是可以缓存写操作的,等到缓存写数据积累到一定时期再写到磁盘。但是,写到磁盘阵列的过程是迟早也要发生的,所以RAID 5与RAID 10在连续写的情况下,从缓存到磁盘的写操作速度会有较小的区别。不过,如果不是连续性的强连续写,只要不达到磁盘的写极限,差别其实并不是太大。

离散写方面的性能比较

如果采用的是 oracle 数据库,每次写一个数据块的数据,如8K;由于每次写入的量不是很大,而且写入的次数非常频繁,因此联机日志看起来会像是连续写。但是因为不保证能够添满RAID 5的一个数据条带块,比如32K(保证每个盘都能写入),所以很多时候更加偏向于离散写入(写入到已存在数据的条带中)。在 离散写的时候对于RAID5,实际发生了4次i/o:但 对于RAID 10,同样的操作,最终RAID 10只需要2个i/o操作,但是,在RAID 5中, 如果需要读取的数据已经在cache中,可能并不需要4个io的。这也证明了cache对RAID5 的重要性,不仅仅是计算校验需要,而且对性能的提升尤为重要。 当然,并不是说cache对RAID10就不重要了,因为写缓冲,读命中等,都是提高速度的关键所在,只不过RAID 10对cache的依赖性没有RAID 5那么明显而已。

磁盘世纪读写操作(机械 电磁操作)的IOPS对比

假定有一个数据请求事件,其iops是10000,读cache命中率是30%,读iops为60%,写iops为40%,磁盘个数为120,那么分别计算在raid5与raid10的情况下,每个磁盘的iops为多少。

Raid 5: 单块盘的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,因为每一个写,在raid 5中,实际发生了4个io,所以写的iops为16000个。

为了考虑raid 5在写操作的时候,那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

可以看到,因为raid 10对于一个写操作,只发生2次io,所以,同样的压力,同样的磁盘,每个盘的iops只有102个,这远远低于磁盘的极限iops。

Raid10和Raid5对比结论

要求较高的空间利用率,对安全性要求不是特别高、大文件存储的系统采用RAID 5比较好。相反,安全性要求很高,不计成本,小数据量频繁写入的系统采用RAID 10的方式比较好。另外关于限制: 在Raid 10中,四个硬盘的总空间不能大于3.8T,这样现在的大容量磁盘: 1T的就无法使用,限制了储存空间,而RAID 5就基本不存在这种限制。另外,磁盘数量增加,对电源的要求上升,能耗也加大了,且服务器散热风扇的噪音也将急剧增大。(文:Traveler行者 188688900)