题 有哪些不同的广泛使用的RAID级别,何时应该考虑它们?


这是一个 典型问题 关于RAID级别。

什么是:

  • 通常使用的RAID级别(包括RAID-Z系列)?
  • 部署是他们常见的?
  • 每个的好处和陷阱?

175
2017-12-08 19:40




@ erimar77 StackExchange网络的目的是收集有关指定主题的所有知识 在SE网络内。这意味着维基百科上的数据对任务毫无用处。我对RAID很熟悉,所以我不需要答案,但这是一个规范的问题。一个共同的问题是对我们能够指出所有重复问题的常见问题有明确答案的问题。 “只是谷歌它”或“它在维基百科上”是不可接受的答案。但维基百科上的文章非常好。 - MDMarra
复制到 超级用户 我可以将VTC作为副本在那里。请将答案复制到 超级用户 (或者让我现在复制它)。 - Hennes


答案:


RAID:为什么以及何时

RAID代表独立磁盘冗余阵列(一些被称为“廉价”以表示它们是“普通”磁盘;历史上有内部冗余磁盘非常昂贵;因为这些不再可用,缩写已适应)。

在最一般的级别,RAID是一组磁盘,它们对相同的读写操作起作用。 SCSI IO在卷(“LUN”)上执行,并以引入性能增加和/或冗余增加的方式分发到底层磁盘。性能提升是条带化的一个功能:数据分布在多个磁盘上,以允许读取和写入同时使用所有磁盘的IO队列。冗余是镜像的一个功能。整个磁盘可以保留为副本,也可以多次写入单个条带。或者,在某些类型的raid中,不是逐位复制数据,而是通过创建包含奇偶校验信息的特殊条带来获得冗余,这些条带可用于在发生硬件故障时重新创建任何丢失的数据。

有几种配置可以提供不同级别的这些优势,这里包含了这些优点,每种配置都偏向于性能或冗余。

评估哪种RAID级别适合您的一个重要方面取决于其优势和硬件要求(例如:驱动器数量)。

另一个重要方面  这些类型的RAID(0,1,5)就是这样的  确保数据的完整性,因为它们是从存储的实际数据中抽象出来的。因此RAID无法防止损坏的文件。如果文件被破坏了 任何 意味着,无论如何,损坏都将被镜像或paritied并提交到磁盘。然而, RAID-Z声称可以提供数据的文件级完整性


直连RAID:软件和硬件

RAID可以在直接连接存储上实现两层:硬件和软件。在真正的硬件RAID解决方案中,有一个专用硬件控制器,其处理器专用于RAID计算和处理。它通常还有一个电池备份的缓存模块,即使在电源故障后也可以将数据写入磁盘。这有助于消除系统未完全关闭时的不一致性。一般来说,良好的硬件控制器比软件控制器表现更好,但它们也具有相当大的成本并增加了复杂性。

软件RAID通常不需要控制器,因为它不使用专用RAID处理器或单独的缓存。通常,这些操作由CPU直接处理。在现代系统中,这些计算消耗的资源最少,但会产生一些边际延迟。 RAID由操作系统直接处理,或者由虚拟控制器处理 FakeRAID

一般来说,如果有人要选择软件RAID,他们应该避免使用FakeRAID并将OS本机软件包用于他们的系统,例如Windows中的动态磁盘,Linux中的mdadm / LVM,Solaris中的ZFS,FreeBSD和其他相关发行版。 。 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

好时:您的磁盘数量有限,但需要冗余

不好的时候:你需要大量的存储空间

RAID 1(也称为镜像)获取​​您的数据并在两个或多个磁盘上以相同方式复制它(尽管通常只有2个磁盘)。如果使用两个以上的磁盘,则每个磁盘上都存储相同的信息(它们都是相同的)。当磁盘少于三个时,这是确保数据冗余的唯一方法。

RAID 1有时可以提高读取性能。 RAID 1的某些实现将从两个磁盘读取以使读取速度加倍。有些只会从其中一个磁盘读取,这不会提供任何额外的速度优势。其他人将从两个磁盘读取相同的数据,确保每次读取时阵列的完整性,但这将导致与单个磁盘相同的读取速度。

它通常用于磁盘扩展非常少的小型服务器,例如1RU服务器可能只有两个磁盘空间或需要冗余的工作站。由于“丢失”空间的高开销,使用小容量,高速(和高成本)驱动器可能成本过高,因为您需要花费两倍的资金才能获得相同级别的可用存储。

总可用磁盘空间是阵列中最小磁盘的大小(例如,2x 1TB磁盘= 1TB空间)。

RAID 1


RAID 1E

1E RAID级别与RAID 1类似,因为数据始终写入(至少)两个磁盘。但与RAID1不同,它通过简单地在几个磁盘之间交错数据块来允许奇数个磁盘。

性能特征与RAID1类似,容错类似于RAID 10.此方案可以扩展到奇数个磁盘超过三个(可能称为RAID 10E,但很少)。

RAID 1E


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 10


RAID 01

好时: 决不

不好的时候: 总是

它与RAID 10相反。它创建两个RAID 0阵列,然后将RAID 1置于顶部。这意味着您可以从每个组中丢失一个磁盘(A1,A2,A3,A4或B1,B2,B3,B4)。在商业应用程序中很少见,但可以使用软件RAID。

要绝对清楚:

  • 如果你有一个带有8个磁盘和一个裸片的RAID10阵列(我们称之为A1),那么你将拥有6个冗余磁盘和1个没有冗余的磁盘。如果另一个磁盘死了,那就是a 85% 你的阵列仍然有效。
  • 如果你有一个带有8个磁盘和一个裸片的RAID01阵列(我们称之为A1),那么你将拥有3个冗余磁盘,4个没有冗余。如果另一个磁盘死了,那就是a 43% 你的阵列仍然有效。

它没有提供超过RAID 10的额外速度,但是冗余大大减少,应该不惜一切代价避免。


RAID 5

好的时候:您需要冗余和磁盘空间的平衡,或者具有大多数随机读取工作负载。

以下时间不好:您的随机写入工作负载较高或大型驱动器较多。

几十年来,RAID 5一直是最常用的RAID级别。它提供了阵列中所有驱动器的系统性能(小型随机写入除外,这会产生轻微的开销)。它使用简单的XOR运算来计算奇偶校验。在单个驱动器故障时,可以使用对已知数据的XOR运算从剩余的驱动器重建信息。

不幸的是,在驱动器发生故障的情况下,重建过程非常密集。 RAID中的驱动器越大,重建所需的时间越长,第二次驱动器发生故障的可能性就越大。由于大型慢速驱动器都需要重建更多数据并且性能要低得多,因此通常不建议将RAID5用于7200 RPM或更低的任何值。

raid5的最大大小几乎可以保证产生另一个驱动器故障,导致所有数据丢失,大约为12 TB。

该数字基于驱动器制造商通常报告的10 ^ 14的SATA驱动器的不可恢复读取错误(URE)速率。实际上,这意味着每100,000,000,000,000位驱动器将抛出一个URE。这或多或少等于12 TB。

如果我们举一个带有7个2 TB驱动器的raid 5的例子。当驱动器发生故障时,剩下六个驱动器。为了重建raid,控制器需要读取每个2 TB的六个驱动器。看看上图,几乎可以肯定在重建完成之前会发生另一个URE。一旦发生这种情况,raid 5及其上的所有数据都将丢失。

将RAID 5置于可靠(电池备份)写入缓存之后也是必不可少的。这避免了小写入的开销,以及在写入过程中发生故障时可能发生的片状行为。

RAID 5是向阵列添加冗余存储的最具成本效益的解决方案,因为它只需要丢失1个磁盘(例如12x 146GB磁盘= 1606GB可用空间)。它至少需要3个磁盘。

RAID 5


RAID 6

好时:你想使用RAID 5,但你的磁盘太大或太慢

不好的时候:你的随机写入工作量很高。

RAID 6类似于RAID 5,但它使用两个相当于一个奇偶校验的磁盘(第一个是XOR,第二个是LSFR),因此您可以从阵列丢失两个磁盘而不会丢失数据。写入惩罚高于RAID 5,并且您只需少一个磁盘空间。

值得考虑的是,raid6最终会遇到与raid5类似的问题。较大的驱动器会导致较大的重建时间和较多的潜在错误。最终在重建完成之前导致raid和所有数据失败。

RAID 6


RAID 50

好的时候:你有 很多 需要在单个阵列中的磁盘和由于容量而无法选择RAID 10。

错误时间:您有这么多磁盘,在重建完成之前可以同时发生许多故障。或者当你没有很多磁盘时。

RAID 50是嵌套级别,非常类似于RAID 10.它在RAID 0中将两个或多个RAID 5阵列和条带数据组合在一起。这提供了性能和多个磁盘冗余,只要多个磁盘丢失 不同 RAID 5阵列。

在RAID 50中,磁盘容量为n-x,其中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。

不良时:性能要求硬件RAID加速。

RAID-Z解释起来有点复杂,因为ZFS从根本上改变了存储和文件系统的交互方式。 ZFS包含卷管理(RAID是Volume Manager的功能)和文件系统的传统角色。因此,ZFS可以在文件的存储块级别而不是卷的条带级别执行RAID。这正是RAID-Z所做的,将文件的存储块写入多个物理驱动器,包括每组条带的奇偶校验块。

一个例子可以说明这一点。假设您在ZFS RAID-Z池中有3个磁盘,块大小为4KB。现在您将一个文件写入系统,该文件正好是16KB。 ZFS会将其分成四个4KB块(正常操作系统也是如此);那么它将计算两个奇偶校验块。这六个块将放置在驱动器上,类似于RAID-5将如何分配数据和奇偶校验。这是对RAID5的改进,因为没有读取现有数据条带来计算奇偶校验。

另一个例子建立在前面。说文件只有4KB。 ZFS仍然需要构建一个奇偶校验块,但现在写入负载减少到2个块。第三个驱动器可以免费为任何其他并发请求提供服务。只要写入的文件不是池的块大小的倍数乘以驱动器数量减去1(即[文件大小] <> [块大小] * [驱动器 - 1]),就会看到类似的效果。

ZFS处理卷管理和文件系统也意味着您不必担心对齐分区或条带块大小。 ZFS使用推荐的配置自动处理所有这些。

ZFS的性质抵消了一些经典的RAID-5/6警告。 ZFS中的所有写操作都是以写时复制的方式完成的;写入操作中的所有已更改块都将写入磁盘上的新位置,而不是覆盖现有块。如果写入由于任何原因而失败,或者系统在写入期间失败,则写入事务要么在系统恢复之后(在ZFS意图日志的帮助下)完全发生,要么根本不发生,从而避免潜在的数据损坏。 RAID-5/6的另一个问题是在重建期间潜在的数据丢失或静默数据损坏;定期 zpool scrub 操作可以帮助捕获数据损坏或在问题导致数据丢失之前驱动问题,并且所有数据块的校验和将确保捕获重建期间的所有损坏。

RAID-Z的主要缺点是它仍然是软件raid(并且由于CPU计算写入负载而不是让硬件HBA卸载它而导致相同的小延迟)。 HBA支持ZFS硬件加速,将来可以解决这个问题。

其他RAID和非标准功能

由于没有中央权威机构强制执行任何类型的标准功能,因此各种RAID级别已经发展并通过普遍使用进行标准化。许多供应商生产的产品偏离了上述描述。他们发明一些奇特的新营销术语来描述上述概念之一(这在SOHO市场中最常发生)也是很常见的。在可能的情况下,尝试让供应商实际描述冗余机制的功能(大多数人会自愿提供这些信息,因为真的没有秘密的调味品)。

值得一提的是,RAID 5之类的实现允许您启动只有两个磁盘的阵列。它会将数据存储在一个条带上,而奇偶校验存储在另一个条带上,类似于上面的RAID 5。这将像RAID 1一样执行奇偶校验计算的额外开销。优点是您可以通过重新计算奇偶校验将磁盘添加到阵列。


190
2017-12-09 16:08



我目前没有时间添加此信息,但解释 怎么样 你可以使用不可恢复的读错误率来估计你可以使用特定磁盘的最大RAID 5集是一个好主意。 - Hubert Kario
总结!我有一个关于RAID5与RAID6的补充:通常人们考虑填充了大量磁盘或容量非常大的磁盘的阵列的整体可靠性(灾难性阵列故障的可能性)将选择RAID6。它们基于在重建第一个磁盘时发生第二次故障的可能性来执行此操作。当锭子数大于8或单个驱动器大于1TB时,我个人的经验法则是RAID6。我一直无法找到规范的计算器,但谷歌和已知的重建时间将有助于计算好。 - JGurtz
这里可能值得添加一个注释,Linux软件RAID10是非标准的。它允许不寻常的,可能有用的布局。 en.wikipedia.org/wiki/Non-standard_RAID_levels#Linux_MD_RAID_10 - Zoredache
可能值得包括澄清写惩罚和条纹合并。 RAID 2或3可能值得一提,但我不知道任何“真正的”实现。但是 - NetApp仍然使用RAID4(而RAID-DP基本上是带有额外奇偶校验驱动器的RAID-4。) - Sobrique
RAID 6:LSFR应该是LFSR(线性反馈移位寄存器)吗? - α CVn


RAID ONE MILLION !!!!

128磁盘如此读取将是快速,可怕的写入,但非常可靠我想象,哦,你会得到1/128的可用空间,所以从预算的角度来看并不是很好。不要用闪存驱动器这样做,我试着放火烧气氛......

enter image description here


55



天啊。 Chopper现在正在失去理智。 - MDMarra
我的数学错了吗? - Chopper3
你知道我真的会建立这个吗? - Chopper3
Raid 1000000需要至少128个磁盘,但是它将提供64个磁盘的存储空间,它具有与Raid 1相同的最差写入性能,并且任何2个adjecent驱动器故障都会导致数组死亡。你正在解读Raid 0111111,它具有相当好的可靠性(Raid 11111110必须具备更好的可靠性。) - Kevin Cathcart
哦,很可爱。二进制RAID级别。下一步是什么? - α CVn