介绍
设置服务器时,存储是一个重要的考虑因素。 您和您的用户关心的几乎所有重要信息都将在某一时刻写入存储设备以保存以供日后检索。 如果您的需求是直截了当的,那么单磁盘可以很好地为您服务。 但是,如果您有更复杂的冗余或性能要求,RAID 等解决方案可能会有所帮助。
在本指南中,我们将讨论常见的 RAID 术语和概念。 我们将讨论将您的设备排列成 RAID 阵列的一些优点和缺点,讨论实施技术的差异,并讨论不同的 RAID 级别如何影响您的存储环境。
什么是 RAID?
RAID 代表 I 独立 D 磁盘的 R 冗余 A 阵列。 通过以不同模式组合驱动器,管理员可以获得比单独操作驱动器集合所能提供的更高的性能或冗余。 RAID 被实现为原始驱动器或分区与文件系统层之间的一层。
什么时候 RAID 是个好主意?
RAID 提供的主要价值是数据冗余和性能提升。
冗余旨在帮助提高数据的可用性。 这意味着在某些故障情况下,例如存储驱动器出现故障时,您的信息仍然可以访问,并且整个系统可以继续运行,直到更换驱动器。 这 不是 作为一种备份机制(对于 RAID,始终建议与任何其他类型的存储一样使用单独的备份),而是旨在最大限度地减少出现问题时的中断。
RAID 在某些情况下提供的另一个好处是性能。 存储 I/O 通常受单个磁盘速度的限制。 使用 RAID,数据要么是冗余的,要么是分布式的,这意味着每次读取操作可以查询多个磁盘,从而提高总吞吐量。 在某些配置中也可以改进写入操作,因为可能要求每个单独的磁盘仅写入总数据的一小部分。
RAID 的一些缺点包括增加的管理复杂性以及通常会减少可用容量。 这转化为相同数量的可用空间的额外成本。 如果阵列不完全由软件管理,则可能会因使用专用硬件而产生更多费用。
专注于性能而没有冗余的阵列配置的另一个缺点是增加了总数据丢失的风险。 这些场景中的一组数据完全依赖于多个存储设备,从而增加了丢失的总风险。
硬件 RAID、软件 RAID 和硬件辅助软件 RAID
可以使用几种不同的技术来创建和管理 RAID 阵列。
硬件 RAID
称为 RAID 控制器或 RAID 卡的专用硬件可用于独立于操作系统设置和管理 RAID。 这称为 硬件 RAID。 真正的硬件 RAID 控制器将具有用于管理 RAID 设备的专用处理器。
这有很多优点:
- 性能:真正的硬件RAID控制器不需要占用CPU周期来管理底层磁盘。 这意味着没有管理附加存储设备的开销。 高质量的控制器还提供广泛的缓存,这会对性能产生巨大影响。
- 抽象出复杂性:使用 RAID 控制器的另一个好处是它们从操作系统中抽象出底层磁盘排列。 硬件 RAID 可以将整个驱动器组呈现为单个逻辑存储单元。 操作系统不必了解 RAID 排列; 它可以像与单个设备一样与阵列交互。
- 启动时可用:因为阵列完全在软件之外进行管理,所以它在启动时可用,允许根文件系统本身轻松安装在 RAID 阵列上。
硬件 RAID 也有一些明显的缺点。
- 供应商锁定:因为 RAID 安排由硬件本身的专有固件管理,所以阵列在某种程度上被锁定到用于创建它的硬件。 如果 RAID 控制器死机,几乎在所有情况下,都必须更换为相同或兼容的型号。 一些管理员建议购买一个或多个备份控制器以在第一个控制器出现问题时使用。
- 高成本:优质硬件 RAID 控制器往往相当昂贵。
软件 RAID
RAID 也可以由操作系统本身配置。 由于磁盘之间的关系是在操作系统而不是硬件设备的固件中定义的,因此称为软件RAID。
软件 RAID 的一些优点:
- 灵活性:由于 RAID 在操作系统内进行管理,因此可以从正在运行的系统轻松地从可用存储配置它,而无需重新配置硬件。 Linux 软件 RAID 特别灵活,允许许多不同类型的 RAID 配置。
- 开源:Linux和FreeBSD等开源操作系统的软件RAID实现也是开源的。 RAID 实现不是隐藏的,可以很容易地在其他系统上读取和实现。 例如,在 Ubuntu 机器上创建的 RAID 阵列可以在以后轻松导入 CentOS 服务器。 由于软件差异,您几乎不可能失去对数据的访问权限。
- 无额外成本:软件 RAID 不需要特殊硬件,因此不会为您的服务器或工作站增加额外成本。
软件 RAID 的一些缺点是:
- Implementation-specific:虽然软件 RAID 不与特定硬件绑定,但它往往与 RAID 的特定软件实现绑定。 Linux 使用
mdadm
,而 FreeBSD 使用基于 GEOM 的 RAID,Windows 有自己的软件 RAID 版本。 虽然在某些情况下可以移植或读取开源实现,但格式本身可能与其他软件 RAID 实现不兼容。 - 性能开销:从历史上看,软件 RAID 因产生额外开销而受到批评。 管理阵列需要 CPU 周期和内存,这些阵列可用于其他目的。 然而,现代硬件上的
mdadm
等实现在很大程度上消除了这些担忧。 CPU 开销很小,在大多数情况下是微不足道的。
硬件辅助软件 RAID(假 RAID)
第三种称为 硬件辅助软件 RAID、固件 RAID 或假 RAID 的 RAID 也可用。 通常,这可以在主板本身的 RAID 功能或廉价的 RAID 卡中找到。 硬件辅助软件 RAID 是一种使用控制器或卡上的固件来管理 RAID,但使用常规 CPU 来处理处理的实现。
硬件辅助软件 RAID 的优势:
- 多操作系统支持:由于RAID是在早期启动过程中启动,然后移交给操作系统,因此多个操作系统可以使用同一个阵列,而软件RAID可能无法做到这一点。
硬件辅助软件 RAID 的缺点:
- 有限的 RAID 支持:通常只有 RAID 0 或 RAID 1 可用。
- 需要特定硬件:与硬件 RAID 一样,硬件辅助软件 RAID 与用于创建和管理它的硬件相关联。 当包含在主板中时,这个问题会更加严重,因为 RAID 控制器出现故障可能意味着您必须更换整个主板才能再次访问数据。
- 性能开销:与软件 RAID 一样,没有 CPU 专门用于管理 RAID。 处理必须与操作系统的其余部分共享。
大多数管理员远离硬件辅助软件 RAID,因为它同时存在其他两种实施方式的缺陷。
术语
熟悉一些常见概念将有助于您更好地了解 RAID。 以下是您可能会遇到的一些常见术语:
- RAID级别:阵列的RAID级别是指施加在组件存储设备上的关系。 可以通过多种不同方式配置驱动器,从而产生不同的数据冗余和性能特征。 有关详细信息,请参阅 RAID 级别 部分。
- 条带化:条带化是在多个底层磁盘上划分对阵列的写入的过程。 许多不同的 RAID 级别都使用此策略(有关详细信息,请参阅 下一节 )。 当数据在数组中进行条带化时,它会被分割成块,并且每个块被写入至少一个底层设备。
- Chunk Size:分条数据时,chunk size定义了每个chunk将包含的数据量。 调整块大小以匹配您期望的 I/O 特性有助于影响阵列的相对性能。
- Parity:奇偶校验是一种数据完整性机制,通过计算写入数组的数据块的信息来实现。 如果驱动器发生故障,奇偶校验信息可用于重建数据。 计算出的奇偶校验被放置到一个单独的设备上,而不是计算出的数据,并且在大多数配置中,它分布在可用的驱动器上,以获得更好的性能和冗余。
- Degraded Arrays:具有冗余的阵列可以遭受不同类型的驱动器故障而不会丢失数据。 当阵列丢失设备但仍可运行时,称其处于降级模式。 一旦更换了故障硬件,降级的阵列可以重建到完全运行状态,但在此期间可能会受到性能下降的影响。
- Resilvering:重新同步或重新同步是用于重建降级阵列的术语。 根据 RAID 配置和故障的影响,这可以通过从阵列中的现有文件复制数据或通过评估奇偶校验信息来计算数据来完成。
- 嵌套阵列:RAID阵列组可以组合成更大的阵列。 这通常是为了利用两个或更多不同 RAID 级别的功能。 通常,具有冗余的阵列(如 RAID 1 或 RAID 5)用作组件来创建 RAID 0 阵列以提高性能。
- Span:不幸的是,在讨论数组时,span 有几个不同的含义。 在某些情况下,“跨度”可能意味着将两个或多个磁盘端到端连接在一起,并将它们呈现为一个逻辑设备,而没有性能或冗余改进。 在处理 Linux 的 mdadm 实现时,这也称为线性排列。 在讨论嵌套 RAID 级别(如 RAID 10)时,“跨度”也可以指组合形成下一层的阵列的较低层。
- Scrubbing:Scrubbing 或检查是读取数组中每个块以确保没有一致性错误的过程。 这有助于确保跨存储设备的数据相同,并防止出现静默错误可能导致损坏的情况,尤其是在重建等敏感过程期间。
RAID 级别
阵列的特性由磁盘的配置和关系决定,称为RAID级别。 最常见的 RAID 级别是:
RAID 0
RAID 0 通过在它们之间条带化数据来组合两个或更多设备。 如上所述,条带化是一种将数据分解成块,然后将这些块交替写入阵列中的每个磁盘的技术。 这样做的好处是,由于数据是分布式的,因此每个设备的全部功率都可以用于读取和写入。 RAID 0 阵列的理论性能配置文件只是单个磁盘的性能乘以磁盘数量(现实世界的性能将达不到这一点)。 另一个优点是阵列的可用容量只是所有组成驱动器的组合容量。
虽然这种方法提供了出色的性能,但它也有一些非常重要的缺点。 由于数据在阵列中的每个磁盘之间进行拆分和分配,因此单个设备的故障将导致整个阵列瘫痪,所有数据都将丢失。 与大多数其他 RAID 级别不同,RAID 0 阵列无法重建,因为没有组件设备子集包含足够的有关内容的信息来重建数据。 如果您正在运行 RAID 0 阵列,则备份变得非常重要,因为您的整个数据集同样取决于阵列中每个磁盘的可靠性。
RAID 1
RAID 1 是一种在两个或更多设备之间镜像数据的配置。 写入阵列的任何内容都放置在组中的每个设备上。 这意味着每个设备都有一套完整的可用数据,在设备故障的情况下提供冗余。 在 RAID 1 阵列中,只要阵列中的单个设备仍然正常运行,数据仍然可以访问。 可以通过更换故障驱动器来重建阵列,此时剩余的设备将用于将数据复制回新设备。
这种配置也有一些惩罚。 与 RAID 0 一样,理论读取速度仍然可以通过将单个磁盘的读取速度乘以磁盘数量来计算。 然而,对于写入操作,理论上的最大性能将是阵列中最慢的设备的性能。 这是因为必须将整条数据写入阵列中的每个磁盘。 此外,阵列的总容量将是最小磁盘的容量。 因此,具有两个相同大小的设备的 RAID 1 阵列将具有单个磁盘的可用容量。 添加额外的磁盘可以增加数据的冗余副本数量,但不会增加可用容量。
RAID 5
RAID 5 具有前两个 RAID 级别的一些功能,但具有不同的性能配置文件和不同的缺点。 在 RAID 5 中,数据以与 RAID 0 阵列大致相同的方式跨磁盘条带化。 但是,对于跨阵列写入的每个数据条,奇偶校验信息(可用于纠错和数据重建的数学计算值)将被写入其中一个磁盘。 接收计算的奇偶校验块而不是数据块的磁盘将随着写入的每个条带旋转。
这有几个重要的优点。 与其他带条带化的阵列一样,读取性能受益于一次从多个磁盘读取的能力。 RAID 5 阵列可处理阵列中任何一个磁盘的丢失。 如果发生这种情况,奇偶校验块允许完全重建数据。 由于奇偶校验是分布式的(一些不太常见的 RAID 级别使用专用的奇偶校验驱动器),因此每个磁盘都有平衡数量的奇偶校验信息。 虽然 RAID 1 阵列的容量仅限于单个磁盘的大小(所有磁盘都具有相同的数据副本),但使用 RAID 5 奇偶校验,可以实现一定程度的冗余,代价是仅单个磁盘的价值空间。 因此,RAID 5 阵列中的四个 100G 驱动器将产生 300G 的可用空间(其他 100G 将被分布式奇偶校验信息占用)。
与其他级别一样,RAID 5 有一些必须考虑的重大缺点。 由于动态奇偶校验计算,系统性能可能会大大降低。 这会影响每个写入操作。 如果一个磁盘发生故障,阵列进入降级状态,也会对读操作带来很大的损失(丢失的数据必须从剩余的磁盘中计算出来)。 此外,当阵列在更换故障驱动器后进行修复时,必须读取每个驱动器并使用 CPU 计算丢失的数据以重建丢失的数据。 这可能会对剩余的驱动器造成压力,有时会导致其他故障,从而导致所有数据丢失。
RAID 6
RAID 6 使用类似于 RAID 5 的架构,但具有双奇偶校验信息。 这意味着阵列可以承受任何两个磁盘发生故障。 这是一个显着的优势,因为在发生故障后的密集重建过程中增加了额外磁盘故障的可能性。 与其他使用条带化的 RAID 级别一样,读取性能通常很好。 RAID 5 的所有其他优势也适用于 RAID 6。
至于缺点,RAID 6 为额外的双奇偶校验支付额外的磁盘容量。 这意味着阵列的总容量是所涉及驱动器的组合空间减去两个驱动器。 确定 RAID 6 奇偶校验数据的计算比 RAID 5 更复杂,这可能导致比 RAID 5 更差的写入性能。 RAID 6 与 RAID 5 存在一些相同的降级问题,但额外磁盘的冗余价值可防止在重建操作期间出现额外故障清除数据的可能性。
RAID 10
RAID 10 可以通过几种不同的方式实现,这会影响其一般特性:
- 嵌套 RAID 1+0
传统上,RAID 10 指的是嵌套 RAID,首先设置两个或多个 RAID 1 镜像,然后使用它们作为组件在它们之间构建条带化 RAID 0 阵列。 这有时称为 RAID 1+0,以更明确地说明这种关系。 由于这种设计,至少需要四个磁盘来形成一个 RAID 1+0 阵列(RAID 0 跨越两个 RAID 1 阵列,每个阵列由两个设备组成)。
RAID 1+0 阵列具有 RAID 0 阵列的高性能特征,但不是依赖单个磁盘来存储条带的每个组件,而是使用镜像阵列来提供冗余。 只要每个 RAID 1 中至少有一个磁盘保持可用,这种类型的配置就可以处理其任何镜像 RAID 1 集中的磁盘故障。 整个阵列以不平衡的方式容错,这意味着它可以根据故障发生的位置处理不同数量的故障。
因为 RAID 1+0 提供冗余和高性能,如果所需的磁盘数量不高,这通常是一个很好的选择。
- mdadm 的 RAID 10
Linux 的 mdadm
提供了自己的 RAID 10 版本,它继承了 RAID 1+0 的精神和优点,但改变了实际实现,使其更加灵活并提供了一些额外的优势。
与 RAID 1+0 一样,mdadm
RAID 10 允许多个副本和条带化数据。 但是,这些设备不是按照镜像对排列的。 相反,管理员决定为阵列写入的副本数。 数据被分块并以多个副本跨阵列写入,确保块的每个副本都写入不同的物理设备。 最终结果是存在相同数量的副本,但数组不受底层嵌套的限制。
与嵌套 RAID 1+0 相比,这种 RAID 10 概念具有一些显着优势。 因为它不依赖于使用阵列作为构建块,所以它可以使用奇数个磁盘并且具有更低的最小磁盘数(只需要 3 个设备)。 要维护的副本数量也是可配置的。 由于您只需要寻址单个阵列,并且可以分配可用于阵列中任何磁盘的备件,而不仅仅是一个组件阵列,因此管理得到了简化。
结论
最适合您的服务器的 RAID 级别在很大程度上取决于您的预期用例和目标。 硬件施加的总成本和限制也会在决策过程中产生重大影响。
要了解有关使用 Linux 的 mdadm
工具设置 RAID 阵列的更多信息,请按照我们的指南在 在 Ubuntu 16.04 上使用 mdadm 创建阵列。 之后,最好按照我们关于 如何在 Ubuntu 16.04 上管理 mdadm 阵列的指南来学习如何管理现有阵列。