RAID在企业服务器中的应用(RAID几种级别)

企业级的数据库应用大多部署在RAID磁盘阵列的服务器上,这样能提升磁盘的访问性能,并可以实现容错/容灾。
RAID(冗余磁盘阵列),简单理解,就是拿一些廉价的硬盘来作成阵列。其目的无非是为了扩展存储容量,提高读写性能,实现数据冗余(备份容灾)。就像很早就有老外拿N台旧PC,作成一个强大的“服务器集群”。RAID技术诞生于1987年,由美国加州大学伯克利分校提出。
主流的大概能够分为几个级别:RAID 0,RAID 1,RAID 5,RAID 10 。配置起来也不是很复杂,有兴趣的朋友能够找相关的资料,本身动手实践。


SQL Server 2005经常使用的有几个级别0,1,5,10 下面我来简单说说这个几个级别的区别及其应用。 


RAID 0 简称磁盘条带化,它能够提供最好的读写性能,若是你把两块磁盘作成了RAID0,那么在写入数据的时候,就能够同时对A磁盘和B磁盘执行写入操做。这里我必须说明的是:“能够同时...写入操做”,并非意味着将文件的相同内容“在同一时间内彻底写入”A磁盘和B磁盘中打个比方:有一个100M的文件须要写入磁盘中,假设单个磁盘的写入速度是10M/S,那么须要10秒钟才能完成写入工做。但若是在具备A、B两块磁盘的RAID 0阵列环境中,(以秒/S为最小单位的)单时间内,能够将10M内容写入A磁盘中,并同时将紧随的10M内容写入B磁盘中,这样算起来,写入速度变成了20M/S,只须要5秒钟就能搞定了,并且每块磁盘中只需存储50M的文件内容,不会形成硬盘存储压力。固然,上诉例子也许不恰当,也只是指的理论环境下,实际环境中会有不少其余因素,效率确定不能达到。
毋庸置疑的是,这样确定是能提升读写性能的,可是这样也带来了一个问题就是,若是其中的一部分数据丢失了,你的所有数据都不会找回来的,由于RAID0没有提供冗余恢复数据的策略。因此RAID0能够用在只读的数据库数据表,或者是通过复制过来的数据库上,若是你对数据丢失不敏感的话,也可使用RAID 0,总之这个level下是高性能、无冗余。 

RAID 1 磁盘镜像 它对读没有什么影响,若是有两块磁盘它只对写有影响,由于它采用了一块磁盘作冗余备份的方法,这样若是你有两块50G的磁盘,那么加起来就是100G,可是在RAID 1下,那么你只能使用50G ,这种方法会影响磁盘的空间使用,下降了I/O 写的性能。通俗点来说:你将一个100M的文件写入RAID 1时,讲内容写入A磁盘的同时,也会将相同的内容写入B磁盘中。这样一来,两块磁盘的内容是彻底一致的(这就传说中的”冗余“,并非什么高深的东西)。原本只须要写入1块硬盘的,但是如今要写入到两块硬盘去,效率确定会变低。至于“读”操做,RAID 1环境下,读取时候只使用到了一块硬盘,因此和普通的环境下没啥区别(若是两块硬盘都可以同时工做,那么还能够分摊压力的)。只是当第一个硬盘数据损坏或者挂掉了,就启动第二块硬盘。固然,两块硬盘都挂了,那就真的崩溃了。哈哈。值得一提的是,有些书或者文章上讲,RAID 1是在将第一块硬盘写入完成后,才将数据完整复制到第二块磁盘中作为镜像备份的这种说法有待考证,按个人理解,是同时复制写入的。


RAID 5 与RAID1 不一样之处就是多了奇偶校验,全部的奇偶校验的信息会遍及各个磁盘,性能上要比RAID1高些,可是一旦发生磁盘I/O失败,就会形成性能急剧降低,同时这种方法也在RAID0 与RAID1间折了中,是比较通用的作法。 用简单的语言来表示,至少使用3块硬盘(也能够更多)组建RAID5阵列,当有数据写入硬盘的时候,按照1块硬盘的方式就是直接写入这块硬盘的,若是是RAID5的话此次数据写入会分根据算法分红3部分,而后写入这3块硬盘,写入的同时还会在这3块硬盘上写入校验信息,当读取写入的数据的时候会分别从3块硬盘上读取数据内容,再经过检验信息进行校验。当其中有1块硬盘出现损坏的时候,就从另外2块硬盘上存储的数据能够计算出第3块硬盘的数据内容。也就是说RAID5这种存储方式只容许有一块硬盘出现故障,出现故障时须要尽快更换。当更换故障硬盘后,在故障期间写入的数据会进行从新校验。 若是在未解决故障又坏1块,那就是灾难性的了。

RAID 10  (也叫RAID 0+1 )就是RAID0 与 RAID1的组合,它提供了高性能,高可用,性能上要比RAID5好,特别适合大量写入的应用程序,可是就是成本比较高不管是多少块磁盘你都是将损失一半的磁盘存储。按照个人理解,至少须要4块硬盘才能完成,A和B作数据分割,分别存储一半的数据,C和D分别对应作A和B的镜像备份。这样一来,可真是完美了,也是我理想中的最佳状态。也不须要RAID 5的奇偶校验。很显然,这样子成本也会高一些。

mysql

固然,这就和咱们讲架构时候常常说的“负载均衡、高可用集群,横向扩展,纵向扩展”的目的其实很相似。通俗点来说,都是为了实现不间断的工做,保证数据完整性和高可用性,并且最重要的,还要能分摊压力。忽然让我想起了上初中物理时候学的“串联和并联”,有点像哦。顺便讲个丢人的笑话,也是个人真实经历,N年前,某日和某大师在一块儿抽烟、吹牛、瞎侃,大师瞎侃说”google光是在中国目前有XX台服务器集群......“,当时我并不理解什么叫“集群”,第一反应就是这么多台服务器之间究竟是“串联“的仍是”并联”的关系呢?算法


  说到最后,可能某些朋友已经不耐烦了。好像本文只是在不停的解释常见RAID的和其好处,而并没说起到sqlserver或者windows存储相关的内容。你们都知道,I/O每每是数据库性能最大的瓶颈, 有时候其实很简单,只须要将sqlserver所在的db server上部署合适的RAID,并将数据库文件分布到不一样的磁盘上,就能很大程度的提高数据库的性能,真可谓是立竿见影。有兴趣的朋友,不妨本身实际动手实践一下,网上这方面的资料也不少。其实RAID成本并不高(和DELL、EMC等等那些高端的存储比起来真是“廉价”)。sql

甚至本身在家里PC机上,也能够经过阵列卡的方式来实现(效果可能不太好)。目前通常的PC服务器,内置都会有RAID支持,在PC服务器领域使用很是普遍。数据库


本文出自http://blog.csdn.net/dinglang_2009
windows