这是来自Server Fault 上的这个问题为了有一个很好的问题,可以 VTC 其他重复项。
这是一个典型问题关于 RAID 级别。
什么是:
- 通常使用的 RAID 级别(包括 RAID-Z 系列)?
- 它们通常出现在哪些部署中?
- 各自的优点和缺点?
答案1
RAID:原因和时间
RAID 代表独立磁盘冗余阵列(有些被称为“便宜”以表明它们是“普通”磁盘;历史上,内部冗余磁盘非常昂贵;由于这些磁盘不再可用,因此该缩写词已适应)。
从最一般的层面上讲,RAID 是一组执行相同读写操作的磁盘。SCSI IO 在卷(“LUN”)上执行,并以一种可提高性能和/或增加冗余的方式分布到底层磁盘。性能的提高是条带化的功能:数据分布在多个磁盘上,以允许读写同时使用所有磁盘的 IO 队列。冗余是镜像的功能。整个磁盘可以作为副本保存,也可以多次写入单个条带。或者,在某些类型的 RAID 中,不是逐位复制数据,而是通过创建包含奇偶校验信息的特殊条带来获得冗余,这些条带可用于在发生硬件故障时重新创建任何丢失的数据。
有几种配置可以提供不同级别的这些好处,本文将对此进行介绍,每种配置都偏向于性能或冗余。
评估哪种 RAID 级别适合您的一个重要方面取决于其优势和硬件要求(例如:驱动器数量)。
另一个重要方面最多这些类型的 RAID (0,1,5) 的特点是它们不是确保数据的完整性,因为它们是从实际存储的数据中抽象出来的。因此 RAID 无法防止文件损坏。如果文件被损坏任何意味着,损坏的数据将被镜像或奇偶校验并提交到磁盘。但是,RAID-Z 确实声称可以提供文件级的数据完整性。
直接连接 RAID:软件和硬件
RAID 可以在两个层面上实现:硬件和软件。在真正的硬件 RAID 解决方案中,有一个专用的硬件控制器,带有专用于 RAID 计算和处理的处理器。它通常还具有电池供电的缓存模块,以便即使在断电后也可以将数据写入磁盘。这有助于消除系统未完全关闭时的不一致问题。一般来说,好的硬件控制器比软件控制器性能更好,但它们的成本也相当高,而且复杂性也更高。
软件 RAID 通常不需要控制器,因为它不使用专用的 RAID 处理器或单独的缓存。通常这些操作由 CPU 直接处理。在现代系统中,这些计算消耗的资源很少,但会产生一些边际延迟。RAID 由操作系统直接处理,或者在以下情况下由伪控制器处理假RAID。
一般来说,如果有人要选择软件 RAID,他们应该避免使用 FakeRAID,并使用其系统的操作系统原生软件包,例如 Windows 中的动态磁盘、Linux 中的 mdadm/LVM 或 Solaris、FreeBSD 和其他相关发行版中的 ZFS。FakeRAID 使用硬件和软件的组合,这导致最初的外观像硬件 RAID,但实际性能却像软件 RAID。此外,将阵列移动到另一个适配器(如果原始适配器发生故障)通常非常困难。
集中存储
RAID 的另一个常见应用是集中式存储设备,通常称为 SAN(存储区域网络)或 NAS(网络附加存储)。这些设备管理自己的存储,并允许连接的服务器以各种方式访问存储。由于多个工作负载包含在相同的几个磁盘上,因此通常需要具有高水平的冗余度。
NAS 和 SAN 之间的主要区别在于块级导出和文件系统级导出。SAN 导出整个“块设备”,例如分区或逻辑卷(包括建立在 RAID 阵列之上的分区或逻辑卷)。SAN 的示例包括光纤通道和 iSCSI。NAS 导出“文件系统”,例如文件或文件夹。NAS 的示例包括 CIFS/SMB(Windows 文件共享)和 NFS。
RAID 0
适用情形:不惜一切代价加快速度!
不好的情况:您很关心自己的数据。
RAID0(又称条带化)有时被称为“驱动器发生故障时剩余的数据量”。它实际上与“RAID”的本质相反,其中的“R”代表“冗余”。
RAID0 获取您的数据块,将其分成与磁盘数量相同的块(2 个磁盘 → 2 块,3 个磁盘 → 3 块),然后将每块数据写入单独的磁盘。
这意味着单个磁盘故障会破坏整个阵列(因为您有第 1 部分和第 2 部分,但没有第 3 部分),但它提供了非常快速的磁盘访问。
它不常用于生产环境,但可用于具有严格临时数据且可能丢失而不会产生影响的情况。它通常用于缓存设备(例如 L2Arc 设备)。
总可用磁盘空间是阵列中所有磁盘的总和(例如 3x 1TB 磁盘 = 3TB 空间)
RAID 1
适用情况:磁盘数量有限,但需要冗余
不适合的情况:你需要大量的存储空间
RAID 1(又称镜像)获取您的数据并将其复制到两个或多个磁盘上(尽管通常只有 2 个磁盘)。如果使用两个以上的磁盘,则每个磁盘上存储相同的信息(它们都是相同的)。当您拥有少于三个磁盘时,这是确保数据冗余的唯一方法。
RAID 1 有时可提高读取性能。一些 RAID 1 实现会从两个磁盘读取数据,从而使读取速度加倍。一些 RAID 1 实现会只从其中一个磁盘读取数据,这不会带来任何额外的速度优势。其他 RAID 1 实现会从两个磁盘读取相同的数据,从而确保每次读取时阵列的完整性,但这会导致读取速度与单个磁盘相同。
它通常用于磁盘扩展很少的小型服务器,例如可能只有两个磁盘空间的 1RU 服务器或需要冗余的工作站。由于其“丢失”空间的开销很高,因此对于小容量、高速(且高成本)的驱动器来说,成本可能过高,因为您需要花费两倍的钱才能获得相同级别的可用存储。
总可用磁盘空间是阵列中最小磁盘的大小(例如,2x 1TB 磁盘 = 1TB 空间)。
RAID 1E
这1ERAID 级别与 RAID 1 类似,数据始终写入(至少)两个磁盘。但与 RAID1 不同的是,它允许奇数个磁盘,只需将数据块交错在多个磁盘之间即可。
性能特征与 RAID1 类似,容错能力与 RAID 10 类似。此方案可扩展到三个以上奇数个磁盘(可能称为 RAID 10E,但很少见)。
RAID 10
适用情况:您需要速度和冗余
糟糕的情况:您无法承受失去一半的磁盘空间
RAID 10 是 RAID 1 和 RAID 0 的组合。1 和 0 的顺序非常重要。假设您有 8 个磁盘,它将创建 4 个 RAID 1 阵列,然后在 4 个 RAID 1 阵列之上应用 RAID 0 阵列。它至少需要 4 个磁盘,并且必须成对添加其他磁盘。
这意味着每对磁盘中有一个可能会发生故障。因此,如果您有 A、B、C 和 D 组,其中磁盘分别为 A1、A2、B1、B2、C1、C2、D1、D2,那么您可以丢失每组(A、B、C 或 D)中的一个磁盘,但阵列仍可正常运行。
但是,如果你丢失了同一组中的两个磁盘,那么阵列将完全丢失。你可能会丢失取决于(但不保证) 50%的磁盘。
RAID 10 可保证高速和高可用性。
RAID 10 是一种非常常见的 RAID 级别,尤其是对于高容量驱动器,在重建 RAID 阵列之前,单个磁盘故障更有可能导致第二个磁盘故障。在恢复过程中,性能下降比 RAID 5 低得多,因为它只需从一个驱动器读取即可重建数据。
可用磁盘空间为总空间的 50%。(例如 8x 1TB 驱动器 = 4TB 可用空间)。如果您使用不同的大小,则每个磁盘中只会使用最小的大小。
值得注意的是,Linux 内核的软件 raid 驱动程序 md 允许具有奇数个驱动器的 raid10 配置,即 3 或 5 个磁盘 raid10:
https://en.wikipedia.org/wiki/Non-standard_RAID_levels#Linux_MD_RAID_10
RAID 01
适用情况:绝不
不合适情况:总是
它与 RAID 10 相反。它创建两个 RAID 0 阵列,然后将 RAID 1 置于其上。这意味着您可以丢失每组中的一块磁盘(A1、A2、A3、A4 或 B1、B2、B3、B4)。
要绝对清楚的是:
- 如果你有一个包含 8 个磁盘的 RAID10 阵列,其中一个磁盘坏了(我们称之为 A1),那么你将有 6 个冗余磁盘和 1 个无冗余磁盘。如果另一个磁盘坏了,85%您的阵列仍有可能继续工作。
- 如果您有一个包含 8 个磁盘的 RAID01 阵列,并且其中一个磁盘坏了(我们将其称为 A1),那么您将有 4 个冗余磁盘和 3 个无冗余磁盘。如果另一个磁盘坏了,则57%您的阵列仍有可能继续工作。
与 RAID 10 相比,它并没有提供额外的速度,但冗余度却大大降低,因此应该不惜一切代价避免。
RAID 5
适用情况:您想要平衡冗余度和磁盘空间,或者有大量随机读取工作负载。
不良情况:您具有较高的随机写入工作负载或较大的驱动器。
几十年来,RAID 5 一直是最常用的 RAID 级别。它提供阵列中所有驱动器的系统性能(小型随机写入除外,这会产生轻微的开销)。它使用简单的 XOR 运算来计算奇偶校验。当单个驱动器发生故障时,可以使用已知数据的 XOR 运算从剩余驱动器重建信息。
不幸的是,如果发生驱动器故障,重建过程会占用大量 IO。RAID 中的驱动器越大,重建所需的时间就越长,并且发生第二个驱动器故障的可能性就越大。由于大型慢速驱动器需要重建的数据更多,而重建所需的性能却更低,因此通常不建议将 RAID5 与 7200 RPM 或更低的驱动器一起使用。
raid5 的最大规模约为 12 TB,在此规模下重建几乎肯定会导致另一个驱动器故障,从而导致所有数据丢失。
此数字基于 SATA 驱动器的不可恢复读取错误 (URE) 率 10^14,这是驱动器制造商通常报告的。实际上,这意味着驱动器每读取 100,000,000,000,000 位就会抛出一个 URE。这或多或少等于 12 TB。
如果我们以具有七个 2 TB 驱动器的 RAID 5 为例。当一个驱动器发生故障时,还剩下六个驱动器。为了重建 RAID,控制器需要读取六个驱动器,每个驱动器 2 TB。从上图可以看出,在重建完成之前几乎肯定会发生另一个 URE。一旦发生这种情况,RAID 5 及其上的所有数据都会丢失。
RAID 5 还必须置于可靠的(电池供电)写入缓存之后。这样可以避免小写入的开销,以及写入过程中发生故障时可能出现的不稳定行为。
RAID 5 是向阵列添加冗余存储的最经济有效的解决方案,因为它只需要丢失 1 个磁盘(例如 12x 146GB 磁盘 = 1606GB 可用空间)。它至少需要 3 个磁盘。
RAID 6
适用情况:您想使用 RAID 5,但磁盘太大或太慢
不好的情况:您有大量的随机写入工作负载。
RAID 6 与 RAID 5 类似,但它使用两个磁盘的奇偶校验,而不是一个磁盘(第一个是 XOR,第二个是 LSFR),因此您可以丢失阵列中的两个磁盘而不会丢失数据。写入损失比 RAID 5 更高,并且磁盘空间会少一个。
值得考虑的是,raid6 最终会遇到与 raid5 类似的问题。驱动器越大,重建时间越长,潜在错误越多。最终导致在重建完成之前 raid 和所有数据都发生故障。
- http://www.zdnet.com/article/why-raid-6-stops-working-in-2019
- http://queue.acm.org/detail.cfm?id=1670144
RAID 50
适用情况:您有很多磁盘需要放在单个阵列中,而由于容量原因,RAID 10 不是一种选择。
不好的情况:您拥有太多磁盘,以至于在重建完成之前可能会同时发生许多故障。或者当您没有很多磁盘时。
RAID 50 是一种嵌套级别,与 RAID 10 非常相似。它将两个或多个 RAID 5 阵列组合在一起,并在 RAID 0 中跨它们条带化数据。这既提供了性能,又提供了多磁盘冗余,只要多个磁盘从不同的RAID 5 阵列。
在 RAID 50 中,磁盘容量为 nx,其中 x 是条带化的 RAID 5 的数量。例如,如果是一个简单的 6 磁盘 RAID 50(最小可能),如果您在两个 RAID 5 中有 6x1TB 磁盘,然后将其条带化为 RAID 50,则您将拥有 4TB 可用存储空间。
RAID 60
适用情况:您有与 RAID 50 类似的用例,但需要更多冗余。
不好的情况:阵列中没有大量磁盘。
RAID 6 与 RAID 60 的关系就如同 RAID 5 与 RAID 50 的关系。本质上,您拥有多个 RAID 6,然后数据在 RAID 0 中被条带化。此设置允许集合中任何单个 RAID 6 的最多两个成员发生故障而不会丢失数据。RAID 60 阵列的重建时间可能很长,因此通常最好为阵列中的每个 RAID 6 成员配备一个热备用。
在 RAID 60 中,磁盘容量为 n-2x,其中 x 是条带化的 RAID 6 的数量。例如,如果是一个简单的 8 磁盘 RAID 60(最小可能),如果您在两个 RAID 6 中有 8x1TB 磁盘,然后将其条带化为 RAID 60,则您将拥有 4TB 可用存储空间。如您所见,这提供的可用存储空间与 RAID 10 在 8 个成员阵列上提供的存储空间相同。虽然 RAID 60 的冗余度略高,但重建时间会大得多。通常,只有当您拥有大量磁盘时才考虑使用 RAID 60。
RAID-Z
适用情况:您在支持 ZFS 的系统上使用 ZFS。
不良情况:性能需要硬件 RAID 加速。
RAID-Z 解释起来有点复杂,因为 ZFS 从根本上改变了存储和文件系统的交互方式。ZFS 涵盖了卷管理(RAID 是卷管理器的功能)和文件系统的传统角色。因此,ZFS 可以在文件的存储块级别而不是卷的条带级别执行 RAID。这正是 RAID-Z 所做的,将文件的存储块写入多个物理驱动器,包括每个条带集的奇偶校验块。
举个例子可能会更清楚。假设您在 ZFS RAID-Z 池中有 3 个磁盘,块大小为 4KB。现在您将一个正好为 16KB 的文件写入系统。ZFS 会将其拆分为四个 4KB 块(就像普通操作系统一样);然后它将计算两个奇偶校验块。这六个块将放置在驱动器上,类似于 RAID-5 分配数据和奇偶校验的方式。这是对 RAID5 的改进,因为无需读取现有数据条带来计算奇偶校验。
另一个示例建立在前一个示例的基础上。假设文件只有 4KB。ZFS 仍将必须构建一个奇偶校验块,但现在写入负载已减少到 2 个块。第三个驱动器将可以自由地为任何其他并发请求提供服务。只要写入的文件不是池的块大小乘以驱动器数减一的倍数(即 [文件大小] <> [块大小] * [驱动器 - 1]),就会看到类似的效果。
ZFS 处理卷管理和文件系统也意味着您不必担心对齐分区或条带块大小。ZFS 会使用推荐的配置自动处理所有这些问题。
ZFS 的性质抵消了一些经典的 RAID-5/6 缺陷。ZFS 中的所有写入都以写入时复制的方式完成;写入操作中所有更改的块都将写入磁盘上的新位置,而不是覆盖现有块。如果写入因任何原因失败,或者系统在写入过程中失败,则写入事务要么在系统恢复后完全发生(借助 ZFS 意图日志),要么根本不发生,从而避免潜在的数据损坏。RAID-5/6 的另一个问题是重建期间可能出现数据丢失或静默数据损坏;常规zpool scrub
操作可以帮助在数据损坏或驱动器问题导致数据丢失之前发现它们,并且所有数据块的校验和将确保发现重建期间的所有损坏。
RAID-Z 的主要缺点是它仍然是软件 RAID(并且同样存在轻微延迟,这是由 CPU 计算写入负载而不是让硬件 HBA 卸载它造成的)。未来支持 ZFS 硬件加速的 HBA 可能会解决这个问题。
其他 RAID 和非标准功能
由于没有中央机构强制执行任何类型的标准功能,各种 RAID 级别已经发展并被普遍使用标准化。许多供应商生产的产品与上述描述不同。他们发明一些花哨的新营销术语来描述上述概念之一也是很常见的(这种情况在 SOHO 市场最常见)。如果可能,请尝试让供应商实际描述冗余机制的功能(大多数供应商会自愿提供这些信息,因为实际上已经没有秘密武器了)。
值得一提的是,有类似 RAID 5 的实现,允许您仅使用两个磁盘启动阵列。它将数据存储在一个条带上,将奇偶校验存储在另一个条带上,类似于上面的 RAID 5。这将像 RAID 1 一样执行,但有奇偶校验计算的额外开销。优点是您可以通过重新计算奇偶校验来将磁盘添加到阵列中。