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


181

这是有关RAID级别的规范问题

什么是:

  • 通常使用的RAID级别(包括RAID-Z系列)?
  • 部署通常在哪里找到?
  • 各自的好处和陷阱?

10
@ erimar77 StackExchange网络的重点是收集SE网络中有关指定主题的所有知识。这意味着Wikipedia上的数据对任务毫无用处。我对RAID非常熟悉,因此不需要答案,但这意味着一个典型的问题。圆锥形问题是对我们可以将所有重复项都指向的一个常见问题的明确答案。不接受“仅在谷歌上搜索”或“它在Wikipedia上”。但是,维基百科上的文章非常好。
MDMarra 2011年

2
复制到超级用户,我可以在那里复读VTC。请将答案复制到超级用户(或让我现在复制它)。
亨尼斯

Answers:


197

RAID:为什么和何时

RAID代表独立磁盘冗余阵列(有些被称为“廉价”,以指示它们是“普通”磁盘;历史上有内部冗余磁盘,它们非常昂贵;由于不再可用,因此首字母缩略词已改写)。

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

有几种配置可提供不同级别的这些好处,在此介绍了这些配置,并且每种配置都对性能或冗余有偏见。

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

这些类型的RAID(0,1,5)中大多数类型的另一个重要方面是它们不能确保数据的完整性,因为它们是从存储的实际数据中抽象出来的。因此RAID无法防止损坏的文件。如果文件以任何方式损坏,则无论该损坏如何,都将被镜像或初始化并提交到磁盘。但是,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,容错性类似于RAID10。此方案可以扩展到奇数个以上的三个磁盘(可能很少称为RAID 10E)。

RAID 1E


RAID 10

好的时机:您想要速度和冗余

糟糕的情况:您承受不起失去一半磁盘空间的负担

RAID 10是RAID 1和RAID 0的组合。1和0的顺序非常重要。假设您有8个磁盘,它将创建4个RAID 1阵列,然后在4个RAID 1阵列之上应用RAID 0阵列。它至少需要4个磁盘,并且必须成对添加其他磁盘。

这意味着每对磁盘中的一个可能发生故障。因此,如果您拥有具有磁盘A1,A2,B1,B2,C1,C2,D1,D2的磁盘组A,B,C和D,则可能会丢失每个磁盘组(A,B,C或D)中的一个磁盘一个有效的数组。

但是,如果丢失了同一组中的两个磁盘,则阵列将完全丢失。你可以失去最多(但不能保证)磁盘的50%。

您可以在RAID 10中获得高速和高可用性。

RAID 10是非常常见的RAID级别,尤其是在大容量驱动器中,单个磁盘故障会导致在重建RAID阵列之前发生第二个磁盘故障。在恢复过程中,性能降级远低于RAID 5,因为它只需从一个驱动器读取即可重建数据。

可用磁盘空间为总空间的50%。(例如8个1TB驱动器= 4TB可用空间)。如果使用不同的大小,则每个磁盘将仅使用最小的大小。

值得注意的是,Linux内核的软件RAID驱动程序称为md RAID 10配置,其中驱动器数量奇数,即3或5磁盘RAID 10。

RAID 10


RAID 01

好时机:永不

不好的时候:总是

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

绝对清楚:

  • 如果您的RAID10阵列具有8个磁盘和一个裸片(我们将其称为A1),那么您将拥有6个冗余磁盘和1个无冗余磁盘。如果另一个磁盘消失了,则阵列仍有85%的机会在运行。
  • 如果您的RAID01阵列具有8个磁盘和一个裸盘(我们将其称为A1),那么您将拥有3个冗余磁盘和4个无冗余磁盘。如果另一个磁盘消失,则阵列仍有43%的机会在运行。

它没有提供超过RAID 10的额外速度,但冗余性却大大降低,因此应不惜一切代价避免。


RAID 5

良好时机:您想要平衡冗余和磁盘空间或具有随机读取工作量

糟糕的情况:您的随机写入工作量较大或驱动器较大

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

不幸的是,如果驱动器发生故障,重建过程将占用大量的IO。RAID中的驱动器越大,重建所需的时间就越长,并且第二个驱动器发生故障的机会就越大。由于大型慢速驱动器都具有大量要重建的数据,并且要处理的性能也低得多,因此通常不建议将RAID 5与7200 RPM或更低的值一起使用。

在消费类应用中使用RAID 5阵列时,最关键的问题可能是当总容量超过12TB时几乎可以保证它们会发生故障。这是因为SATA消费者驱动器的不可恢复的读取错误(URE)率为每10 14位一个,即〜12.5TB。

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

但是,大多数硬盘制造商已将其较新驱动器的URE额定值提高到10 15位中的一个,从而在一定程度上缓解了消费类驱动器中的URE /数据丢失/阵列故障以及RAID 5问题。一如往常,购买前请检查规格表!

还必须将RAID 5置于可靠的(由电池供电)写缓存之后。这样可以避免小写操作的开销,以及写操作失败时可能发生的不稳定行为。

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

RAID 5


RAID 6

良好时机:您想使用RAID 5,但是磁盘太大或太慢

糟糕的情况:您的随机写入工作量很大

RAID 6与RAID 5类似,但是RAID 6使用两个磁盘的奇偶校验值,而不是一个磁盘(第一个磁盘是XOR,第二个磁盘是LSFR),因此您可以从阵列中丢失两个磁盘而不会丢失数据。写损失高于RAID 5,并且磁盘空间减少了一个。

值得考虑的是,最终RAID 6阵列将遇到与RAID 5类似的问题。更大的驱动器会导致更长的重建时间和更多的潜在错误,最终导致整个阵列发生故障并在重建完成之前丢失所有数据。

RAID 6


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对应RAID50。从本质上讲,您有多个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的主要缺点是它仍然是软件团队(并且遭受CPU计算写负载而不是让硬件HBA卸载它所引起的相同的较小延迟)。将来,支持ZFS硬件加速的HBA可能会解决此问题。

其他RAID和非标准功能

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

值得一提的是,有一些类似RAID 5的实现,使您可以仅使用两个磁盘来启动阵列。它将在一个条带上存储数据,在另一个条带上存储奇偶校验,类似于上面的RAID 5。这将类似于RAID 1,但具有奇偶校验计算的额外开销。优点是您可以通过重新计算奇偶校验将磁盘添加到阵列。


我目前没有时间来添加此信息,但是解释一下如何使用不可恢复的读取错误率来估计可用于特定磁盘的最大RAID 5集将是一个好主意。
休伯特·卡里奥

很棒的总结!关于RAID5与RAID6,我还有一个补充:通常,人们在考虑由大量主轴或容量非常大的磁盘组成的阵列的整体可靠性(灾难性阵列故障的可能性)时,会选择RAID6。他们基于重建第一个磁盘时发生第二次故障的可能性来执行此操作。我个人的经验法则是RAID6,当主轴数大于8或单个驱动器大于1TB时。我一直找不到规范的计算器,但是Google和已知的重建时间将帮助您很好地进行计算。
JGurtz

3
可能需要在此处添加注释,说明Linux软件RAID10是非标准的。它允许不寻常且可能有用的布局。 zh.wikipedia.org/wiki/Non-standard_RAID_levels#Linux_MD_RAID_10
Zoredache 2013年

可能值得澄清写惩罚和条带合并。RAID 2或3可能值得一提,但是我不知道任何“真正的”实现。但是-NetApp仍使用RAID4(RAID-DP
本质

1
RAID 6:LSFR应该是LFSR(线性反馈移位寄存器)吗?
CVn

58

也是RAID一百万!!!

128块磁盘这样的读取将是快速,可怕的写入,但我想像的非常可靠,哦,您将获得1/128的可用空间,因此从预算角度来看并不理想。不要用闪存驱动器这样做,我试着放火烧空气...

在此处输入图片说明


7
天啊。菜刀现在失去理智了。
MDMarra 2011年

4
我算错了吗?
Chopper3 2011年

6
你知道我会真正建立这个权利吗?
Chopper3 2011年

33
Raid 1000000至少需要128个磁盘,但是它将提供64个磁盘的存储空间,在最坏情况下的写入性能与Raid 1相同,并且任何2个相邻的驱动器故障都会杀死该阵列。您正在描述Raid 0111111,它将具有非常好的可靠性(Raid 11111110在平均上必须具有更好的可靠性。)
Kevin Cathcart

5
真可爱 二进制RAID级别。下一步是什么?
CVn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.