(本文镜像于: http://cloudme.info/?p=32)
1. 前言
RAID(Redundant Array of Independant Disks,独立冗余磁盘阵列),已经火了二十来年,在存储领域一直是速度和可靠性的代名词。专业的存储,没有看见谁不用RAID的。RAID提供了很多级别,常用的有0,1,5,6,10等。其中,兼顾性能(数据并发访问)和可靠性(利用冗余来提升)的RAID5,6,10是在实际应用中利用得最多的,尤其是RAID5,几乎成了考察磁盘阵列性能的首选测试级别。除了专业存储的设备(NAS,SAN等),普通操作系统对RAID也有很好的支持,比如Linux内核中的md模块就是用软件来实现RAID的,同时在用户态有一个管理程序mdadm能够对RAID进行复杂的配置。
本文以分析RAID5为主,来谈谈云时代RAID技术所遇到的一些情况。
RAID5能够容忍任意一块磁盘出错,保证在出错的时候磁盘仍能顺利读写。在大多数人看来,两块磁盘同时出错的概率并不是很高,所以一般认为RAID5也就足够用了。且现在的磁盘阵列都提供热备盘,只要有盘出错,就会自动把空闲盘加入RAID5中,利用剩下的好盘重建数据,把计算出来的数据写入新盘。当数据重建完成之后,该设备就完好如初了,又能容忍任意一块盘再出错。看上去似乎很不错。
假设一个RAID5设备由n块磁盘组成,则实际存放数据的磁盘有n-1块,另外一块盘用来存放Parity(校验码,RAID5的校验盘是分散在每个磁盘中的,合计共用一块盘),则数据的有效利用率是(n-1)/n,这是一个比较高的值,尤其是当n比较大的时候,它的利用率就越高;该设备能够并发访问(n-1)个盘的数据,理论上也可以达到单盘速度的(n-1)倍,这也是很高的一个值。看来,RAID5在速度,空间利用率,容错性上都得到了很好的平衡,理所当然地成为许多人的首选了。
事实果真如此吗?RAID是在1987年提出的,那个时代,硬盘还是非常昂贵的设备,RAID的优势在于能够在控制整体成本的基础上兼顾性能和容错。如今,磁盘越来越廉价,数据本身越来越重要,时过境迁,一些应用模式也发生了根本的变化。如今,Google的文件系统,Hadoop的HDFS等分布式文件系统大行其道,它们有一个共同的特点,都是利用简单地把一组数据复制到多个计算节点的方法来实现冗余的,单机并不做RAID(最多做不损失容量不提供冗余的RAID0),已经抛弃了传统的RAID概念。这样看似成本会高不少——在传统的RAID中,提供数据冗余可靠只需要多用一两块磁盘就可以了,但现在却得多好几倍的磁盘数(一般情况下冗余度至少为3,也就是说至少要用3倍