架构师不得不了解的硬件知识 - 磁盘阵列 RAID

概述

什么是 RAID:RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能数据冗余的技术。
RAID 是一类多磁盘管理技术,其向主机环境提供了成本适中、数据可靠性高的高性能存储。

RAID 中主要有三个关键概念和技术:镜像( Mirroring )数据条带( Data Stripping )数据校验( Data parity )

镜像:将数据复制到多个磁盘,一方面可以提高可靠性,另一方面可并发从两个或多个副本读取数据来提高读性能。显而易见,镜像的写性能要稍低, 确保数据正确地写到多个磁盘需要更多的时间消耗。

数据条带:将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本,这与镜像的多个副本是不同的,它通常用于性能考虑。数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上数据进行读写操作, 从而获得非常可观的 I/O 性能提升 。

数据校验:利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。利用校验功能,可以很大程度上提高磁盘阵列的可靠性、鲁棒性和容错能力。不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。 不同等级的 RAID 采用一个或多个以上的三种技术,来获得不同的数据可靠性、可用性和 I/O 性能。

对于系统需要采用何种模式的 RAID ,需要在深入理解系统需求的前提下进行合理选择,综合评估可靠性、性能和成本来进行折中的选择。

常见的 RAID 等级有:

下面我们分别介绍一下各种 RAID 级别并做个简单对比。

RAID0

image.png

使用 N 块磁盘进行组合实现性能翻 N 倍的效果,写入数据会分成 N 部分进行,读取数据会从磁盘中组合起来读,这样就实现了读写性能翻倍。
优点:
使用 RAID0 可以将磁盘空间利用率最大化,能达到 100%;性能快,磁盘越多性能越强。

缺点:
没有数据保护,甚至比单盘的风险还大。任意坏了一块磁盘都会导致数据丢失。

RAID 1

image.png

RAID 1 中的磁盘互为镜像,写入的数据会存放 N 份,读取的时候可以从任意一块磁盘读取。实现了读性能翻倍,写性能与单盘一样的效果。

优点:
安全性依照阵列中的实体硬盘数量倍数成长。

缺点:
空间利用率低,是所有阵列中利用率最低的。

RAID 5

image.png

RAID5 既考虑了空间利用率又考虑了性能的提升,采用校验码的而非镜像的方式组合而成,RAID5 阵列需要至少 3 块磁盘。
在上图中使用了 4 块磁盘组合而成,任意一份数据写入会被分成三个数据块 + 一个校验块分别放入 4 个盘,数据块与校验块之间交叉分布,最终每个盘上既有数据块又有校验块。读数据时 A 时从 Disk 0 ,1 ,2 分别读取到 A1,A2,A3 然后组合成 A;如果此时有一块磁盘比如 Disk2 损坏,则会通过读取到的 A1、A2+ 校验码算出 A3,再组合生成数据 A 对外提供。RAID 5 可以容忍一块盘的损坏。

优点:
读的情况下是单盘数据的三倍;有一定的安全性,可以容忍损坏一块磁盘
缺点:
由于每次写数据都需要计算校验块,导致写性能下降;仅能容忍坏一块磁盘损坏

RAID 6

image.png

RAID6 可以灵活设计数据库和校验块的比例,上图中被设计成 3 个数据块 +2 个校验块的组合,增加了数据可靠性。RAID 6 在备份的数据场景使用较多,提供的数据可靠性比 RAID 5 要高很多。

RAID 10

image.png

首先把两块盘做镜像,再按照 RAID0 的方式组合,既实现了数据的冗余又实现了性能翻倍的效果。RAID 1+0 多适用于数据库场景。

RAID 50

image.png

先做成 RAID5 的组再组合成 RAID0,兼顾 RAID5 和 RAID0 的特性。

RAID 60

image.png

先做成 RAID6 的组合再组合成 RAID0,兼顾 RAID6 和 RAID0 的特性。

各种组合之间的对比

RAID 级别 冗余 空间利用率 读性能 写性能 最少磁盘数
RAID0 100% *** *** 2
RAID1 50% ** ** 2
RAID5 67-94% *** * 3
RAID6 50-88% ** * 4
RAID10 50% ** ** 4
RAID50 67-94% *** * 6
RAID60 50-88% ** * 8
  • 硬件基础
    2 引用
  • 工具

    子曰:“工欲善其事,必先利其器。”

    170 引用 • 492 回帖
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    111 引用 • 412 回帖 • 1 关注
回帖
请输入回帖内容...