简介
在设置服务器时,存储是一个重要的考虑因素。 您和您的用户关心的几乎所有重要信息都将被写入存储设备,以供以后检索。 如果您的需求是直接的,单磁盘可以很好地为您服务。 但是,如果您有更复杂的冗余或性能要求,RAID等解决方案可能会有所帮助。
在本指南中,我们将讨论常见的RAID术语和概念。我们将讨论将您的设备安排到RAID阵列中的一些优点和缺点,讨论实施技术的差异,并讨论不同的RAID级别如何影响您的存储环境。
什么是RAID?
RAID代表I 非依赖** D** ISK的** R** 冗余** A** 射线。通过组合不同模式的驱动器,管理员可以获得比单独操作时的驱动器集合更高的性能或冗余。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的一些缺点是:
- 具体实现 :虽然软件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支持 :通常只有RAID0或RAID1可用。
- 需要特定的硬件 :与硬件RAID一样,硬件辅助软件RAID与用于创建和管理它的硬件捆绑在一起。当包含在主板中时,这个问题甚至更有问题,因为RAID控制器出现故障可能意味着您必须更换整个主板才能再次访问数据。
- 性能开销 :和软件磁盘阵列一样,没有CPU专门管理磁盘阵列。处理必须与操作系统的其余部分共享。
大多数管理员都远离硬件辅助的软件RAID,因为它同时存在其他两种实现的缺陷。
术语
熟悉一些常见概念将帮助您更好地理解RAID。以下是你可能会遇到的一些常见术语:
- RAID级别 :阵列的RAID级别是指对组件存储设备施加的关系。驱动器可以通过多种不同的方式进行配置,从而产生不同的数据冗余和性能特征。有关详细信息,请参阅RAID levels]一节。
- 条带化 :条带化是将对阵列的写操作划分到多个底层磁盘的过程。此策略被许多不同的RAID级别使用(有关更多详细信息,请参阅Next section)。当数据跨阵列条带化时,数据被拆分成区块,每个区块被写入至少一个底层设备。
- 区块大小 :在对数据进行条带化时,区块大小定义了每个区块包含的数据量。调整区块大小以匹配您预期的I/O特征有助于影响阵列的相对性能。
- 奇偶校验 :奇偶校验是一种通过计算写入阵列的数据块的信息来实现的数据完整性机制。如果驱动器发生故障,奇偶校验信息可用于重建数据。计算出的奇偶校验放置在与计算数据不同的设备上,并且在大多数配置中跨可用驱动器分布,以获得更好的性能和冗余。
- 降级阵列 :具有冗余的阵列可以在不丢失数据的情况下遭遇不同类型的驱动器故障。当阵列失去一个设备但仍在运行时,它被称为处于降级模式。更换出现故障的硬件后,降级的阵列可以重建到完全正常运行的状态,但在此期间可能会降低性能。
- 重新同步 :重新同步是用于重建降级阵列的术语。根据RAID配置和故障的影响,这可以通过从阵列中的现有文件复制数据,或通过评估奇偶校验信息来计算数据来完成。
- 嵌套阵列 :可以将多组RAID阵列组合成更大的阵列。这样做通常是为了利用两个或多个不同的RAID级别的功能。通常,具有冗余的阵列(如RAID1或RAID5)被用作组件来创建RAID0阵列以提高性能。
- Span :不幸的是,在讨论数组时,SPAN有几个不同的含义。
-在某些情况下,
SPAN
可能意味着将两个或多个磁盘端到端地连接在一起,并将它们作为一个逻辑设备呈现,而没有任何性能或冗余改进。在处理Linux的mdAdm
实现时,这也称为线性排列。 -在讨论嵌套的RAID级别(如RAID10)时,SPAN
还可以指合并形成下一层的较低层阵列。 - 擦除 :擦除,或检查,是读取数组中的每个块以确保没有一致性错误的过程。这有助于确保存储设备上的数据是相同的,并防止静默错误可能导致损坏的情况,特别是在重建等敏感过程中。
RAID级别
阵列的特性由磁盘的配置和关系决定,称为其RAID级别 。最常见的RAID级别为:
RAID 0
RAID0通过跨设备条带化数据来组合两个或多个设备。如上所述,条带化是一种将数据拆分成块,然后交替地将块写入阵列中的每个磁盘的技术。这样做的好处是,由于数据是分布式的,因此每个设备的全部功率都可以用于读取和写入。理论上,RAID0阵列的性能曲线是单个磁盘的性能乘以磁盘数量(实际性能将达不到这一要求)。另一个优势是,阵列的可用容量只是所有组成驱动器的容量总和。
虽然这种方法提供了很好的性能,但它也有一些非常重要的缺点。由于数据在阵列中的每个磁盘之间拆分和划分,单个设备的故障将导致整个阵列停机,所有数据都将丢失。与大多数其他RAID级别不同,RAID0阵列不能重建,因为没有任何组件设备子集包含足够的内容信息来重建数据。如果您运行的是RAID0阵列,备份就变得极其重要,因为您的整个数据集同样依赖于阵列中每个磁盘的可靠性。
RAID1
RAID 1是一种在两个或更多设备之间镜像数据的配置。写入阵列的任何内容都放置在组中的每个设备上。这意味着每个设备都有一套完整的可用数据,以便在设备发生故障时提供冗余。在RAID 1阵列中,只要阵列中的单个设备仍正常运行,数据仍可访问。可以通过更换故障驱动器来重建阵列,此时剩余的设备将用于将数据复制回新设备。
这种配置也有一些缺点。 与RAID 0一样,理论读取速度仍然可以通过将单个磁盘的读取速度乘以磁盘数量来计算。 然而,对于写操作,理论上最大性能将是阵列中最慢的设备的性能。 这是因为必须将整个数据段写入阵列中的每个磁盘。 此外,阵列的总容量将是最小磁盘的总容量。 因此,具有两个大小相等的设备的RAID 1阵列将具有单个磁盘的可用容量。 添加额外的磁盘可以增加数据的冗余副本数量,但不会增加可用容量。
RAID5
RAID5具有前两个RAID级别的一些功能,但具有不同的性能配置文件和不同的缺点。在RAID5中,数据跨磁盘条带化的方式与RAID0阵列大致相同。然而,对于跨阵列写入的每个数据条带,奇偶信息(可用于纠错和数据重建的数学计算的值)将被写入其中一个磁盘。接收计算的奇偶校验块而不是数据块的磁盘将随着写入的每个条带而旋转。
这有几个重要的优势。与其他具有条带化的阵列一样,读取性能得益于一次从多个磁盘进行读取的能力。RAID 5阵列可以处理阵列中任何一个磁盘的丢失。如果发生这种情况,奇偶校验块允许完全重建数据。由于奇偶校验是分布式的(一些不太常见的RAID级别使用专用的奇偶校验驱动器),因此每个磁盘都有均衡数量的奇偶校验信息。虽然RAID1阵列的容量被限制为单个磁盘的大小(所有磁盘都具有相同的数据副本),但使用RAID5奇偶校验时,可以仅以单个磁盘的空间为代价来实现一定程度的冗余。因此,一个RAID 5阵列中的四个100G驱动器将产生300G的可用空间(另一个100G将被分布式奇偶校验信息占用)。
与其他级别一样,RAID 5有一些必须考虑的重大缺点。 系统性能可能会因运行中的奇偶校验计算而大大降低。 这可能会影响每个写操作。 如果磁盘出现故障并且阵列进入降级状态,则还将对读取操作造成显著的损失(必须从剩余磁盘计算丢失的数据)。 此外,当阵列在更换故障驱动器后进行修复时,必须读取每个驱动器,并使用CPU来计算丢失的数据以重建丢失的数据。 这可能会对剩余的驱动器造成压力,有时会导致其他故障,从而导致所有数据丢失。
RAID 6
RAID6使用类似于RAID5的体系结构,但具有双重奇偶校验信息。这意味着该阵列可以承受任何两个磁盘故障。这是一个显著的优势,因为在发生故障后的密集重建过程中,增加了其他磁盘故障的可能性。与其他使用条带化的RAID级别一样,读取性能通常很好。RAID5的所有其他优势也适用于RAID6。
至于缺点,RAID6用额外的磁盘容量来弥补额外的双重奇偶校验。这意味着阵列的总容量是所涉及的驱动器的总空间减去两个驱动器。确定RAID6的奇偶校验数据的计算比RAID5更复杂,这可能会导致写性能比RAID5更差。RAID6存在一些与RAID5相同的降级问题,但额外磁盘的冗余价值可防止在重建操作期间发生更多故障擦除数据的可能性。
RAID 10
可以通过几种不同的方式实施RAID 10,这会影响其一般特性:
- 嵌套的RAID 1+0
传统上,RAID10是指嵌套的RAID,其创建方法是首先设置两个或多个RAID1镜像,然后使用这些镜像作为组件在它们之间构建条带化的RAID0阵列。为了更明确地说明这种关系,现在有时将其称为RAID1+0。由于这种设计,至少需要四个磁盘才能形成一个RAID 1+0阵列(RAID 0跨两个分别包含两个设备的RAID 1阵列进行条带化)。
RAID1+0阵列具有RAID0阵列的高性能特征,但使用镜像阵列来提供冗余,而不是为条带的每个组件依赖单个磁盘。这种类型的配置可以处理其镜像的任何RAID1集中的磁盘故障,只要每个RAID1中至少有一个磁盘保持可用即可。整个阵列以不平衡的方式容错,这意味着它可以根据故障发生的位置处理不同数量的故障。
由于RAID 1+0同时提供冗余和高性能,如果所需的磁盘数量不是令人望而却步,这通常是一个非常好的选择。
- mdadm的Raid 10
Linux的mdAdm
提供了自己版本的RAID10,它继承了RAID1+0的精神和优点,但将实际实现更改为更灵活,并提供了一些额外的优势。
与RAID1+0一样,mdAdm
RAID10允许多个副本和条带化数据。然而,这些设备并不是以镜像对的形式排列的。相反,管理员决定将为阵列写入的副本数量。数据分块并以多个副本的形式跨阵列写入,从而确保数据块的每个副本都写入不同的物理设备。最终结果是存在相同数量的副本,但阵列不受基础嵌套的约束。
这种RAID 10的概念比嵌套RAID 1+0有一些显著的优势。 因为它不依赖于使用阵列作为构建块,所以它可以使用奇数个磁盘,并且具有较低的最小磁盘数(仅需要3个设备)。 要维护的副本数量也是可配置的。 由于您只需要寻址单个阵列,并且可以分配可用于阵列中任何磁盘的备用磁盘,而不仅仅是一个组件阵列,因此管理得到了简化。
结论
最适合您服务器的RAID级别在很大程度上取决于您的预期用例和目标。总成本和硬件限制也会对决策过程产生重大影响。
要了解有关使用linux的`mdAdm‘工具设置RAID阵列的更多信息,请遵循我们的指南在Ubuntu 22.04.上使用mdadm创建阵列之后,最好按照我们关于如何在Ubuntu 22.04](https://andsky.com/tech/tutorials/how-to-manage-raid-arrays-with-mdadm-on-ubuntu-22-04)上管理mdadm数组的指导来学习如何管理现有的数组。