【分享】磁盘阵列 RAID 技术如何保护数据

  • 西
    西西弗的神话

    最近由于工作需要,需要对RAID技术有所了解,因此根据网上的资料整理了一下,顺便发到D版。D版这么多大牛电工,如果有问题,请指点哦。


    RAID.png


    RAID 的名称为磁盘阵列,它的作用,是在多块硬盘组成的系统中,牺牲一块至多块硬盘的容量,来对数据的存储提供一定的容错能力。

    基本的 RAID 级别有 RAID0、RAID1、RAID5、RAID6。根据他们的排列组合,可以衍生出 RAID1+0、RAID5+0 等多种用法。


    RAID 的关键技术

    首先,介绍一个基础概念,RAID 技术主要有以下三个关键技术:

    • 镜像:将数据复制到多个磁盘,保证冗余。
    • 条带:将数据分片,同时读写至不同硬盘,提高读写速度。
    • 冗余校验:通过存储奇偶校验信息等方式,实现了对数据的冗余保护,当发生磁盘故障,可根据校验信息恢复数据。

    RAID 级别

    RAID0(条带存储)

    假设有 2 块硬盘,RAID0 是将数据条带化,也就是切片,分别写入 2 块硬盘中。因此,RAID0 将提供非常优秀的读写性能。比如,读写一个 2G 的文件,在普通硬盘上,要以单盘的速度读取/写入 2G 的数据,而如果在 2 盘 RAID0 阵列中,每个盘只需读取/写入 1G 的数据,2 个盘可以并行读取/写入,因此理论的读写速度将是单块硬盘的 2 倍。

    15872855724320.jpg

    但是严格的说,RAID0 没有冗余,只要阵列中有一块硬盘坏掉,由于这块硬盘保存着所有数据(每个文件)的某一部分,所有数据都将无法读取,整个阵列中的数据将宣告报废。

    因此,RAID0 的优点是读写速度快,缺点是没有冗余。


    RAID1(镜像存储)

    RAID1 是最安全的阵列方案,但也是空间利用率最低的方案。RAID1 将所有数据原封不动复制一份,放于另一块硬盘中。如果用 2 块 1T 的硬盘组成 RAID1 阵列,可用空间甚至只有 1T。因为剩下的 1 块硬盘中的数据与第一块硬盘一模一样。

    15872853192763.jpg

    至于 RAID1 阵列组的性能,读取性能取决于阵列中最快的硬盘(谁读的快就用谁的数据,反正数据都一样),而写入性能则取决于阵列中最慢的硬盘(要等所有硬盘写入结束,才完成写入操作)。

    因此,RAID1 的优点是安全性高,但是空间利用率低,只有 50%。


    RAID5(奇偶校验存储)

    RAID5 阵列需要存储时,至少需要 3 块硬盘,每块硬盘会多存部分的奇偶校验信息,当任意一块磁盘损坏,就可以通过对剩余硬盘的数据做 XOR 异或操作来恢复损坏硬盘中的数据。因此,RAID5 最多可以坏掉 1 块硬盘。

    15872983505791.jpg

    值得注意的是,有一种说法:RAID5 阵列在第一块盘坏掉后,重建时第二块盘坏掉的几率大于 70%。

    这个说法不一定正确。

    假设 RAID5 的阵列由多块硬盘组成,运行 3 年了,每天 24 小时工作,运行这么久硬盘或多或少会有些成长坏道,如果一块硬盘坏了,更换了新硬盘,Rebuild 时,其他硬盘的成长坏道将导致 Rebuild 失败,故有「第二块盘坏掉的几率大于70%」一说,实质是疏于管理造成的。

    运维人员积极关注 RAID 的健康状况可解决此问题。通过抓取 RAID 阵列卡的日志,查看阵列的「巡读日志」和硬盘的「Midea Error」数量,及时更换存在隐患的硬盘,避免阵列损坏。

    当然,这个解释也不一定正确,需要使用者自行判断,信不过 RAID5 的话可以选择 RAID6。


    RAID6

    RAID6 基于 RAID5 的基础上,根据伽罗华域的乘除法多产生了一份校验信息,因此需要至少 4 块硬盘,其中有 2 块存储冗余数据(比 RAID5 多了一块),同时允许最多 2 块硬盘坏掉。

    15872977144514.jpg

    RAID6 的读取性能与 RAID5 相似,而写入性能由于加入了基于伽罗华域的乘除法,计算相比 XOR 异或计算更为复杂,因此比起 RAID5 来说更是慢上加慢。


    RAID10

    介绍完 RAID0 与 RAID1,大家或许会发现如果是单独使用,它们俩都有着巨大的不足。因此,就有两种结合性的 RAID 方案被提出:RAID0+1 与 RAID1+0,分别简称为 RAID01 和 RAID10。这两种方案都是同时吸取了 RAID0 的读写快速优点与 RAID1 的安全容错优点,但是
    RAID10 由于可以在相同的性能/容量下提供比 RAID01 更好的容错安全性,因此RAID01 已经被弃用。

    要具体了解为什么弃用 RAID01 而选择 RAID10,我们要先分别了解它俩的原理。其实很简单,RAID01 就是先条带后镜像。而 RAID10 则先镜像后条带。

    接下来我们假设拥有 10 块 1T 硬盘,来看看它们两个的安全性:

    RAID01:ABCDE 硬盘组 RAID0 容量 5T,FGHIJ 硬盘组 RAID0 容量 5T,两组硬盘组 RAID1 容量 5T。在坏掉一块硬盘的情况下(假设 F 坏掉),FGHIJ 组成的 RAID0 阵列失效,整个 RAID1 阵列处于降级(不健康)状态;此时若ABCDE 中任意一块硬盘再坏掉,将导致 ABCDE 组成的 RAID0 阵列失效,整个 RAID1 阵列将完全失效,数据全部丢失。因此在一块硬盘失效,阵列恢复重建过程中的失败率为 5/9,超过了 50%。

    15872997528847.jpg

    RAID10:AB 硬盘组 RAID1 容量 1T,CD 组 RAID1 容量 1T……依此类推组成 5 个 RAID1,之后再将这 5 个 1T 阵列组成 RAID0,容量 5T。依然假设坏掉 F 盘,此时 F 所处的 RAID1 阵列(E、F)处于降级状态,而整个 RAID0 阵列依然健康(由于RAID0阵列没有容错机制,因此除了健康就是失效,没有降级状态);如果第二块硬盘坏掉,只要不是E盘,整个RAID0 阵列就不会失效。因此 RAID10 在一块硬盘失效,阵列恢复重建过程中的失败率仅为 1/9,只有 RAID01 的五分之一。

    15872995005704.jpg


    RAID50

    RAID10 是用 2 块硬盘组 RAID1,之后再组 RAID0;而 RAID50 就是用 3 块硬盘组成 RAID5 阵列,之后再用多个RAID5 阵列组成 RAID0。如图所示:

    15873001590196.jpg

    RAID50 的限制是最少 6 块硬盘,同时硬盘的数量要是 3 的倍数。而它的空间利用率达到了 2/3,容错率也达到了 1/3,可谓是比较平衡的一种大量硬盘存储的解决方案了。


    RAID 级别对比总结
    屏幕快照 2020-04-20 20.34.49.png

    总结:数据保护要求级别特别高的,建议使用 RAID10,常规的数据可以使用 RAID5,对于 RAID5 不信任,可以使用 RAID6。


    热备盘与冷备盘

    如果具有容错冗余能力的 RAID 阵列中坏掉了一块硬盘,RAID 阵列会如何自我进行恢复呢?

    以 2 盘的 RAID1 为例。假如坏掉了一块盘,RAID1 阵列将只有 1 块盘在正常运行,这时的 RAID1 阵列将处于降级(Degraded)状态,也就意味着当前阵列已无容错冗余能力,虽然还能继续运行,但是数据已经不安全,需要人为干预进行修复。只需要拔出坏掉的硬盘,换一块相同容量的、好的硬盘插上去,RAID1 阵列就会自动开始恢复重建过程。简单来说,就是将剩余 1 块盘中的数据重新拷贝到新换上的这块盘中。根据硬盘大小的不同,阵列恢复重建过程将从十几小时到几十小时不等。

    那么,换上的这块硬盘,不管是从抽屉里拿出来的还是去科技市场买了一块新的,都是通过人为操作插入到整个阵列里的。在出问题之前,这块盘就冷冷的躺在抽屉里而并不会通电,这块盘就叫冷备盘(Cold Spare)。

    那能不能让阵列自动找一块好的硬盘来替换掉坏掉的盘呢?当然可以。

    通过热备盘(Hot Spare)实现。简单来说,就是在建好 RAID 阵列后,再向其中插入 1 到多块与阵列中硬盘相同容量的盘,将其设置为 Hot Spare 模式。这些盘在阵列健康的时候就静静的呆在那,也不存数据,也没有读写访问。一旦阵列中有硬盘出问题,阵列处于 Degraded 状态时,RAID控制器会立即激活热备盘,开始阵列的恢复重建工作。

    配备热备盘的好处是当阵列出现问题时,可以第一时间启动恢复重建操作,而不必等操作人员发现之后再手动操作。这样就避免了阵列在(降级后,操作人员发现之前)的这段时间内「带病运行」,增加了数据的可靠性。当然,缺点就是又增加了成本。

    戴尔服务器 R740 的配置单里写着「硬盘4*6T(Raid5+1)」,指的就是有 4 块 6T 的硬盘。RAID5+1,是指 4 块硬盘其中 3 块做 RAID5,剩余 1 块做热备硬盘。


    注:有些材料写的 RAID51 与 RAID5+1 是不一样的,RAID51 是指 6 块以上硬盘,其中 3 块硬盘做成 RAID5,另外 3 块硬盘做这个 RAID5 的镜像。


    实现方式

    RAID 阵列的实现分为硬实现和软实现,组成的阵列分别称为硬 RAID 和软 RAID。

    1、硬 RAID
    硬实现是通过硬件(RAID 卡)插在服务器上,类似于单独插显卡,优点是配备了专门的 RAID 控制/处理芯片和 I/O 处理芯片以及阵列缓冲,不占用服务器的 CPU 资源,性能较好,有缓存的 RAID 卡还可以提高随机读写性能。缺点是不够灵活,用 RAID 卡组 RAID 后,如果不解除/撤销/取消,阵列中的硬盘直接挂载到别的电脑上是无法使用的。以及需要额外的硬件,成本较高。当阵列柜损坏,更换阵列柜型号需要谨慎,如果更换品牌更要再三确认。

    2、软 RAID
    软 RAID 就是通过软件方式实现的 RAID,。磁盘数据的读写由 CPU 完成,系统可以识别出阵列中所有的硬盘。优点是使用灵活,拆下后可直接在其他电脑上使用,成本较低,操作简单。缺点是占用服务器 CPU 资源,性能较差。

    生产环境一般使用硬实现,性能更好,特别是针对 RAID5、RAID6等。

    Q&A

    Q:RAID10 和 RAID5 区别比较,利用率与安全的取舍?

    A:要求较高的空间利用率,对安全性要求不是特别高、大文件存储的系统采用 RAID5 比较好,值得注意的是 RAID5 重建,需要时间长,对于剩余的硬盘压力大,如果此时再损坏硬盘,就全军覆没了。相反,安全性要求很高,不计成本,小数据量频繁写入的系统采用 RAID10 的方式比较好。另外需要考虑的是,磁盘数量增加,对电源的要求上升,能耗也加大了,且服务器散热风扇的噪音也将增大。

    Q:不同大小的磁盘是否可以组 RAID?
    A:可以,以最小容量的磁盘作为 RAID 的有效容量。

    Q:软件定义存储与传统磁盘阵列有哪些区别?
    A:两者扩展性、兼容性、易用性不同。

    最后,磁盘阵列主要解决的是冗余的问题,备份方案需要另外考虑。


    参考列表
  • f
    f_coco
    有个问题有点想不太明白,通常情况下,一开始上机的n块硬盘,应该都是同一批次的硬盘吧?这样不是出现故障的时间基本都会在同一个时期内么?这样不管raid几都没啥用吧。
  • y
    youngj78
    再学习学习。
  • z
    zhdphao
    地板每每说到个人或者家庭备份,总有人跳出来说raid,我就笑笑。
  • 西
    西西弗的神话
    回复4#zhdphao
    我主要是工作上用到,生产环境还是必要的吧小尾巴~
  • F
    Foh
    好奇那些超级数据中心的存储设备一般多少年报废换新?
  • l
    lumi
    冗余 条带化,话说这么搞有点浪费的,现在都是云了
  • 西
    西西弗的神话
    回复7#lumi


    大型生产企业对数据资产比较敏感,不愿意上云,都是自己建数据中心。
  • s
    songco
    当年实验室搞RAID重建算法一遍一遍测试测到吐啊

    现在磁盘容量大了基础的几种RAID都不太适合了,重建太慢,比如12t的盘带着中等负载重建一个月都有可能
  • s
    songco
    云上分布式存储很多系统都是3个副本起,也很浪费,不过可以共享空间
  • 西
    西西弗的神话
    回复10#songco
    请教一下,分布式储存多副本,如何通过共享空间减少成本的呢?小尾巴~
  • s
    stevenflp
    学习 iOS fly ~
  • t
    tsonglin
    玩过最早lenovo d400软raid5, 和gen8的raid1,

    raid重建太慢,家用就最简单粗暴上raid1即可,反正你也用不了多少硬盘,硬盘也便宜,2500块就能买toshiba 正经14tb了,raid5省那点空间不值当。raid1坏了,直接把好的那块拔下来插pc上直读,秒恢复。
  • w
    wang88795
    还没重建好RAID,另一块硬盘就又坏了怎么办?
  • g
    gj91
    回复14#wang88795

    这就是raid5重建最大的问题吧,所以raid6感觉更安全…
  • 寒冰炫
    我12T的硬盘在黑裙上重建raid1差不多21个小时吧,而且我把所有负载都断了的,不访问群晖,不同步数据,如果在重建的时候去访问,大概率系统出问题,机器重启,不知道是电源问题还是别的问题
  • s
    songco
    主要有两个方面
    一个是去重,重复的内容只保存一份,对于对象存储这个效果非常明显,比如百度网盘。块存储也有去重,难做一点,某些情况下效果也很好,比如针对vm系统盘的优化。

    另外一个就是类似云一直吹的,比较大的范围的资源共享(规模上去了才能体现出来),廉价定制存储节点(计算存储合一的也行,成本高一点)靠软件组成超大存储池,硬件便宜,总体空间浪费少利用率高,故障恢复是多对多拷贝速度快很多。成本上可能会便宜非常多,比如国内某大厂一个自研系统上线后,某方面的存储成本降到了几乎1/10。
    当然缺点也很明显,最大的问题是软件复杂,坑多,出问题会非常悲剧。小厂玩不起,研发成本摊不平,一般用开源的系统比如ceph 这样的。 一般越是专用的系统成本越低,性能越好。
  • 不吃宵夜
    好文点赞支持
  • g
    ghell
    家庭备份采用raid基本上是弊大于利,重要数据还是在应用侧备份双份或多份数据比较好。raid本身故障率也不低,不划算,就算采用raid,还是多备份几份比较靠谱
  • h
    heartrick
    之前研究过,想来想去还是用basic模式算了,重要的东西放文件夹用google drive实时备份到云端,其他不重要的的就仍在另外的磁盘,没了就没了。不过用了这么多年nas,从来没有坏过一个。小尾巴~
  • g
    ggank
    好文,谢谢科普。
  • l
    luislee3000
    感谢科普,刚入了T532X,两个500G固态,三个8T机械,怎么弄比较好 iOS fly ~
  • h
    hookgao
    Mark iOS fly ~
  • s
    stevenluo
    工作要用的不是公司发什么用什么吗?
    自己家用的?多买几块硬盘U盘多拷一份呗。需要上到raid?
    不行就百度 google 都来一份,不会两家同时倒了吧