• [Linux 运维 -- 存储] RAID入门


    [Linux 运维 -- 存储] RAID入门

    RAID是什么:独立硬盘冗余阵列(Redundant Array of Independent Disks)。有多块廉价磁盘组成的冗余阵列。人们在开发RAID时主要是基于以下设想,即几块小容量硬盘的价格总和要低于一块大容量的硬盘。虽然目前这一设想还没有成为现实,RAID在节省成本方面的作用还不是很明显,但是RAID可以充分发挥出多块硬盘的优势,实现远远超出任何一块单独硬盘的速度和吞吐量。除了性能上的提高之外,RAID还可以提供良好的容错能力,在任何一块硬盘出现问题的情况下都可以继续工作,不会受到损坏硬盘的影响。不同的RAID技术对应不同的速度,安全性和性价比

    常用的RAID类型有:

    RAID0:

    RAID 0 并不是真正的RAID结构,没有数据冗余,没有数据校验的磁盘陈列。实现RAID 0至少需要两块以上的硬盘,它将两块以上的硬盘合并成一块,数据连续地分割在每块盘上。 因为带宽加倍,所以读/写速度加倍, 但RAID 0在提高性能的同时,并没有提供数据保护功能,只要任何一块硬盘损坏就会丢失所有数据。因此RAID 0 不可应用于需要数据高可用性的关键领域。

    如图所示:

    核心点:

    • 至少两块盘
    • 非常好的性能
    • 没有冗余(无备份,无校验)
    • 不要用在重要的系统里面

    RAID1

    RAID 1通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互 为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。

    如图所示:

    核心点:

    • 至少两块盘
    • 良好的性能(无校验,无strip)
    • 优良的冗余性(有备份盘)

    RAID 2

    RAID 2是RAID 0的改良版,以汉明码(Hamming Code)的方式将数据进行编码后分割为独立的位元,并将数据分别写入硬盘中。因为在数据中加入了错误修正码(ECC,Error Correction Code),所以数据整体的容量会比原始数据大一些。RAID存放数据的级别是Bit 级别,而不是block级别。同时还需要使用一块额外的盘存放校验的信息。

    如图所示:

    核心点:

    • 使用bit级别的striping,而不是block
    • 在上图中,b1,b2,b3是bits,E1,E2,E3是错误校验码。
    • 你需要两组盘,一组存放数据,一组存放校验码
    • 使用的hamming ECC(error correction code),并且将信息存放在额外的盘上。
    • 写数据的同时,计算ECC,写ECC
    • 读数据的时候,会同时读ECC,然后对比数据一致性,如果不一致会更新新的ECC
    • 这里数据盘和校验盘的比例搭配有很多种,常用的配置有:(1)10个data 盘 + 4个ECC盘 (2)4个data盘 + 3个ECC盘
    • RAID2已经怎么用了,昂贵同时实现比较复杂,并且现在ECC已经是多余的了,因为硬盘本身可以做到这些。

    RAID 3

    RAID 3是把数据分成多个“块”,按照一定的容错算法,存放在N+1个硬盘上,实际数据占用的有效空间为N个硬盘的空间总和,而第N+1个硬盘上存储的数据是校验容错信息,当这N+1个硬盘中的其中一个硬盘出现故障时,从其它N个硬盘中的数据也可以恢复原始数据,这样,仅使用这N个硬盘也可以带伤继续工作(如采集和回放素材),当更换一个新硬盘后,系统可以重新恢复完整的校验容错信息。由于在一个硬盘阵列中,多于一个硬盘同时出现故障率的几率很小,所以一般情况下,使用RAID3,安全性是可以得到保障的。

    如图所示:

    核心点:

    • 使用byte级别的striping,而不是block
    • 在上图中,B1,B2,B3是biye,p1,p2,p3是校验
    • 使用多个data 盘,一个专用的盘来存放奇偶校验
    • 获取数据的时候磁盘需要同步旋转
    • 连续的读写性能很好
    • 随机读写性能很差
    • 不怎么常用

    RAID 4

    RAID 4和RAID 3很类似,只不过数据分割是block来的。

    如图所示:

    核心点:

    • 使用的是block数据分割
    • 上图中,B1,B2,B3是block,p1,p2,p3是校验
    • 至少三块盘(2个数据盘,一个校验盘)
    • 很好的随机读性能,因为数据是按block分割的
    • 很差的随机读性能,因为每次写的时候,都要去写单独的校验盘
    • 和RAID 3,RAID 5很像
    • 和RAID 3像是因为使用的都是一个专用的校验盘,不同的是使用的分割方式
    • 和RAID 5像是因为使用的都是block 分割,但是RAID 4是使用一个单独的校验盘
    • 不怎么常用

    RAID 5

    RAID5和RAID4一样,数据以块为单位分布到各个硬盘上。RAID 5不对数据进行备份,而是把数据和与其相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

    如图所示:

    核心点:

    • 至少3块盘
    • 很好的性能,因为block strip
    • 很好的冗余性,因为校验信息是分散在各个盘上
    • 性能和冗余性都很好。可以应该在DB读比较多的场景,但是写会比较慢。

    RAID 6

    RAID6技术是在RAID 5基础上,为了进一步加强数据保护而设计的一种RAID方式,实际上是一种扩展RAID 5等级。与RAID 5的不同之处于除了每个硬盘上都有同级数据XOR校验区外,还有一个针对每个数据块的XOR校验区。当然,当前盘数据块的校验数据不可能存在当前盘而是交错存储的,具体形式见图。这样一来,等于每个数据块有了两个校验保护屏障(一个分层校验,一个是总体校验),因此RAID 6的数据冗余性能相当好。但是,由于增加了一个校验,所以写入的效率较RAID 5还差,而且控制系统的设计也更为复杂,第二块的校验区也减少了有效存储空间。

    如图所示:

    核心点:

    • 使用block striping,但是使用的双校验
    • 在上图中,A,B,C是blocks,p1,p2...是校验
    • 对每一个block会创建两个校验block
    • 可以允许两个盘挂掉
    • 这个实现复杂,因为要去计算每个block的两个校验

    RAID 10(1 + 0)

    Raid 10是一个Raid 0与Raid1的组合体,它是利用奇偶校验实现条带集镜像,所以它继承了Raid0的快速和Raid1的安全。我们知道,RAID 1在这里就是一个冗余的备份阵列,而RAID 0则负责数据的读写阵列。其实,图6只是一种RAID 10方式,更多的情况是从主通路分出两路,做Striping操作,即把数据分割,而这分出来的每一路则再分两路,做Mirroring操作,即互做镜像。

    如图所示:

    核心点:

    • 至少4块盘
    • 又称为 “strip of mirror” 镜象阵列条带
    • 优秀的冗余性(每个block都有mirror)
    • 优秀的性能(block是strip的)
    • 如果你有票子,这个是最佳的选择,尤其在数据库的应用场景中

    参考:

    (1) http://www.thegeekstuff.com/2011/10/raid10-vs-raid01/
    (2)http://www.thegeekstuff.com/2010/08/raid-levels-tutorial/
    (3)http://www.golinuxhub.com/2014/04/raid-levels-0-1-2-3-4-5-6-01-10.html

  • 相关阅读:
    初识JAVA
    计算机语言发展史
    课时11:禁用、清理二级缓存,以及整合Ehcache缓存
    课时10:MyBatis一级缓存、二级缓存
    课时9::MyBatis整合Log4j、延迟加载
    课时7:动语态SQL、foreach、输入参数为类中的集合属性、集合、数组、动态数组
    课时6 输出参数为简单类型、对象类型、HashMap及resultMap使用
    课时5 入参为HashMap,以及mybatis调用存储过程CRUD
    课时4:l两种取值符号以及ParameterType为简单,对象,嵌套对象类型
    课时3:属性文件丶全局参数丶别名丶类型转换器丶resultMap
  • 原文地址:https://www.cnblogs.com/zk47/p/4736260.html
Copyright © 2020-2023  润新知