Chinaunix首页 | 论坛 | 博客
  • 博客访问: 660422
  • 博文数量: 66
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 2204
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-26 21:43
个人简介

曾就职于阿里巴巴担任Oracle DBA,MySQL DBA,目前在新美大担任SRE。[是普罗米修斯还是一块石头,你自己选择!] 欢迎关注微信公众号 “自己的设计师”,不定期有原创运维文章推送。

文章分类

全部博文(66)

文章存档

2017年(2)

2016年(3)

2015年(7)

2014年(12)

2013年(42)

分类: Mysql/postgreSQL

2014-01-26 19:47:59

RAID: a natural solution to narrow the gap
   
Stripping data across multiple disks to allow parallel I/O, thus improving performance
   
RAIDstroage级别提供了不同的数据保护和性能优化措施,比如常见的RAID0RAID1RAID10RAID01RAID5,这里就这些不同形式的RAID进行分析。


   
RAID0
   
RAID0 通过条带的方式,将数据通过RAID CONTROLLER分布到不同的磁盘/磁盘组上,这种方式带来了一个极大的好处便是提高了磁盘的吞吐量(当然这是对于单个磁盘而言),提高了磁盘IO的性能!
但同时,由于RAID0又是如何实现的呢?    


 
      通过这个图我们可以很清晰的看到RAID0原理,每次进行数据写入,RAID0总是在两个磁盘/磁盘组交叉进行写入。对于写入量比较的APP而言,使用RAID0可以带来写入性能的提升。特别是对于
  concurrent write比较高的应用而言,能在磁盘吞吐量上带来倍数级的提升!当然,当出现某个磁盘/磁盘组(至少一个)磁盘损坏的情况下,会导致数据损丢失。对于数据安全比较重要的应用而言,不是一个靠谱的选择。
     

    

优点:
               1.提高了IO的性能。 
     缺点:
               1.数据安全性低,坏盘的情况下可能导致数据无法恢复。     
               2.磁盘/磁盘组的容量来自于最小磁盘/磁盘组容量的计算。(比如两个磁盘做RAID0,A盘100G,B盘500G,最终容量为2*100=200G)。 
               Best write performance(due to no updating redundancy information)
               Not best read performance(Redundancy schemes can schedule requests on the disks with shortest queue and disk seek time .

  RAID1
        

RAID1RAID0相比,能提供更高的安全性,采用mirror形式,将每份数据一式两份存储在不同的磁盘/磁盘组上。这样当单块盘/磁盘组损坏的情况下,换进的新磁盘,能够快速从另一个好的磁盘copy
       

数据来保证数据的安全性(High Availability).当然,缺点也是很明显的,磁盘的使用率最多只有1/2


        

优点:
            
1.数据冗余,提供了较高的安全保障,在单块盘/磁盘组出现故障的情况下仍然可用。
             

2.数据读取有优化,数据读取可以使用队列来进行。
             
 Reads may be optimized(minimize the queue and disk search time)

  缺点:      
              1.磁盘的利用率最多只有1/2(比如,有两块盘组成的RAID1A100GB500G,最终的容量只有100G)
              2.写带宽浪费。(每个logical write会伴随两个phyical writes)。


     RAID01
    
 RAID01相比RADI0RAID1,可以说是这两者的组合,不过在先后顺序上有差别。RAID01是先将单个磁盘/磁盘组做RAID0,然后将整个RAID0当做RAID1的一部分,再做mirror。简而言之,就是先strip,然后mirror
     
    
 优点:
            
1.不仅有stripe,增加数据的写入性能,同时增加的mirror,提高了数据的安全性和读取性能。提高较快的读写性能,增加了磁盘的吞吐量。
            2.最多可以损坏1/2个磁盘/磁盘组(比如上图中的第一组,第四组)
     缺点:
           1.磁盘容量的使用率较低,最多只有1/2的使用率。

       2.写带宽浪费。(每个logical write会伴随两个phyical writes

          
    RAID01不仅在性能上和RAID0接近,在安全上也几乎达到了RAID1的标准(可以损坏1/2个磁盘/磁盘组),因此,在安全和性能都要求比较高的情况下,RAID01是一个不错的选择。

    RAID10
    Raid01是先做strip,在做mirror。而Raid10正好相反,是先做mirror,再做strip。那么RAID10和RAID01又有什么区别呢?这里来分析一下.
   
 
      从上图我们可以很容易对比出来,其实在容量和性能上RAID10和RAID0没有什么差别,两者最大的差别就 fault tolerance的差别。在RAID01上,因为做了mirror,所以只有两个group互为Mirror。
   当每组中,互为镜像的磁盘/磁盘组损坏,RAID01即损坏。而对于RAID10,由于先mirror后strip,所以可以提供多个groups,我们图上看到的是三个,这个在每个 组中损坏一个磁盘的情况下仍然可
   以继续提供访问。相比而言,RAID10在高可用方面做的更好。
   
     相比RAID01,RAID10具有更高的可用性。

     
RAID4  

    
RAID4与前面所述的RAID不同之处在于,使用一个专门的磁盘/磁盘组来做ECC/盘组(校验盘),这样在其某个磁盘/磁盘组损坏的情况下,可以通过XOR来进行计算,从而进行数据恢复。


   假如:
  
 A=1101 B=1100 C=1111 AP=1101 xor 1100 xor 1111=1110
  
 此时假如A数据损坏,则A’=AP xor B xor C=1101
   
XOR:
         
1110 xor 1100 = 0010 xor 1111 = 1101
   
当然这里运算的都是4bit,而对于64K的strip size,则需要做64*1024=65535 bit的xor运算,所以对于使用raid4来讲,好的位运算engine,能加快数据的写入速度。
   
可以看到上述 :


    
      可以看到,RAID4在写入上面,可能并没有RAID10快,但在磁盘使用率上,还是大于RAID10
      
优点:

    1.磁盘使用率高(1/N)
      2.读写性能比较高,略低于RAID10
      3.安全方面,可以容忍至多一个磁盘/磁盘组的损坏。

       缺点:
  1.单块盘/盘组做为校验盘,可能会出现lock contention
  2.每次逻辑写入要2次物理读,2次物理写。
  3.单块盘/磁盘组损坏的情况下,恢复的时间可能较长。


RAID5
Raid5其实是Raid4的变种,相对于raid4raid5将校验位放到多个磁盘/磁盘组上,这样减少了lock contention,下面来看看RAID5的具体实现.

     ( Left-Symmetric)


   RAID5的其他形式:
   
Single disk failure tolerant array

   

       

优点:


              

 1. 和raid4相比,消除了校验盘的bottleneck 。

                    2.在单个磁盘/磁盘组损坏的情况下,能够恢复
                 
3.Small reads 和 small writes都有比较好的性能。

   缺点:
                    

1.单个逻辑写,需要两个physical reads,两个physical writes
                     2.某个磁盘/磁盘组坏掉的情况下,需要读取所有其他盘的数据源。 

后记
        究竟是选择RAID10和RAID5,没有一个固定的标准。依赖于应用对安全的要求以及成本的规划。如果成本不成问题,而要求是High Availability and High Performance
 我想使用RAID10是个更好的选择。如果要求降低成本,对于安全的要求和性能的要求都不是很高,选择RAID5也许就已经可以满足了。不过选择前,不要忘记了,test,test,test…..







    祝玩得开心
-------EOF---------

    




阅读(3080) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~