什么是不同的广泛使用的RAID级别,我应该什么时候考虑他们?

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

什么是:

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

RAID:为什么和什么时候

RAID代表独立磁盘冗余arrays(一些教导“廉价”,表明它们是“正常”磁盘;历史上有内部冗余磁盘,非常昂贵,因为这些不再可用的首字母缩写已经适应)。

在最普通的级别上,RAID是一组在同一读写操作上运行的磁盘。 SCSI IO在卷(“LUN”)上执行,并以一种引入性能增加和/或冗余增加的方式分配给底层磁盘。 性能提高是条带化的function:数据分布在多个磁盘上,允许读取和写入同时使用所有磁盘的IO队列。 冗余是镜像的function。 整个磁盘可以保存为副本,或者可以多次写入单独的条带。 或者,在某些types的raid中,不是逐位复制数据,而是通过创build包含奇偶校验信息的特殊条带来获得冗余,在发生硬件故障的情况下可用来重新创build任何丢失的数据。

有几种configuration可以提供不同级别的这些好处,这些好处在这里涵盖,每个configuration都有一个偏向于性能或冗余的方面。

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

这些types的RAID(0,1,5) 大部分的另一个重要方面是,它们不能保证数据的完整性,因为它们是从存储的实际数据中抽象出来的。 所以RAID不能防止损坏的文件。 如果一个文件被任何方式破坏,腐败将被镜像或分区,并提交到磁盘,无论如何。 但是, RAID-Z确实要求提供数据的文件级完整性 。


直接连接的RAID:软件和硬件

在直接连接的存储上有两层可以实现RAID:硬件和软件。 在真正的硬件RAID解决scheme中,有专用的硬件控制器,专用于RAID计算和处理的处理器。 它通常还有一个由电池供电的高速caching模块,因此即使在电源出现故障后,也可以将数据写入磁盘。 这有助于消除系统未完全closures时的不一致性。 一般来说,好的硬件控制器的性能比软件对手要好,但是它们也有相当大的成本和复杂性。

软件RAID通常不需要控制器,因为它不使用专用RAID处理器或单独的高速caching。 通常这些操作是由CPU直接处理的。 在现代系统中,这些计算消耗最less的资源,尽pipe会产生一些边际延迟。 RAID由FakeRAID直接处理,或由人工控制器处理 。

一般来说,如果有人select软件RAID,他们应该避免使用FakeRAID,并为他们的系统使用操作系统本地软件包,例如Windows中的Dynamic Disks,Linux中的mdadm / LVM,Solaris中的ZFS,FreeBSD以及其他相关发行版。 FakeRAID使用硬件和软件的组合,导致硬件RAID的初始显示,而软件RAID的实际性能。 另外,将arrays移动到另一个适配器(如果原始失败)通常是非常困难的。


集中存储

另一个地方RAID是常见的集中式存储设备,通常称为SAN(存储区域networking)或NAS(networking附加存储)。 这些设备pipe理自己的存储并允许连接的服务器以各种方式访问​​存储。 由于多个工作负载包含在同一个磁盘上,通常需要具有高冗余度。

NAS和SAN之间的主要区别在于块与文件系统级导出。 SAN导出整个“块设备”,如分区或逻辑卷(包括构build在RAIDarrays之上的块)。 SAN的例子包括光纤通道和iSCSI。 NAS导出“文件系统”,如文件或文件夹。 NAS的例子包括CIFS / SMB(Windows文件共享)和NFS。


RAID 0

好的时候:速度不惜一切代价!

不好的时候:你关心你的数据。

RAID0(也称为条带)有时被称为“当驱动器出现故障时您将留下的数据量”。 它实际上是针对“RAID”,其中“R”代表“Redundant”。

RAID0会将您的数据块分割为与磁盘相同的块(2个磁盘→2个磁盘,3个磁盘→3个磁盘),然后将每个数据写入单独的磁盘。

这意味着单个磁盘故障会破坏整个arrays(因为您拥有第1部分和第2部分,但没有第3部分),但它提供了非常快速的磁盘访问。

它在生产环境中并不经常使用,但可用于严格限制临时数据丢失而不会造成影响的情况。 它通常用于caching设备(如L2Arc设备)。

总可用磁盘空间是数组中所有磁盘的总和(例如,3x 1TB磁盘= 3TB的空间)

RAID 1


RAID 1

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

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

RAID 1(也称为镜像)将您的数据复制到两个或更多磁盘上(尽pipe通常只有两个磁盘)。 如果使用两个以上的磁盘,则每个磁盘上都存储相同的信息(它们全部相同)。 只有less于三个磁盘时,才能确保数据冗余。

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

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

总可用磁盘空间是arrays中最小磁盘的大小(例如2个1TB磁盘= 1TB的空间)。

RAID 1


RAID 1E

1E RAID级别与RAID 1类似,因为数据总是写入(至less)两个磁盘。 但是,与RAID1不同的是,只需在多个磁盘之间交错数据块,就可以支持奇数个磁盘。

性能特征与RAID1类似,容错性与RAID 10类似。该scheme可以扩展到超过三个的奇数磁盘(可能称为RAID 10E,尽pipe很less)。

RAID 1E


RAID 10

良好的时候:你想要速度和冗余

不好的时候:你不能失去一半的磁盘空间

RAID 10是RAID 1和RAID 0的组合。1和0的顺序非常重要。 假设您有8个磁盘,它将创build4个RAID 1arrays,然后在4个RAID 1arrays的顶部应用RAID 0arrays。 它至less需要4个磁盘,并且必须成对添加额外的磁盘。

这意味着每一对中的一个磁盘可能会失败。 所以,如果你有A1,A2,B1,B2,C1,C2,D1,D2盘的A,B,C和D盘,你可以从每盘(A,B,C或D)丢失一盘,一个正常的数组。

但是,如果从同一组丢失两个磁盘,则该arrays完全丢失。 您可能会损失(但不能保证)50%的磁盘。

在RAID 10中保证高速度和高可用性。

RAID 10是一个非常常见的RAID级别,特别是对于高容量的驱动器,其中单个磁盘故障在RAIDarrays重build之前更容易发生第二个磁盘故障。 在恢复过程中,性能下降速度远远低于RAID 5,因为它只需要从一个驱动器读取数据就可以重build数据。

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

值得注意的是,linux内核的raid驱动程序叫做md,可以用raid10configuration一些奇怪的驱动器,例如3或5个磁盘raid10:

https://en.wikipedia.org/wiki/Non-standard_RAID_levels#Linux_MD_RAID_10

RAID 10


RAID 01

好的时候: 从来没有

不好的时候: 总是

这是RAID 10的反面。它创build两个RAID 0arrays,然后在顶部放置一个RAID 1。 这意味着您可能会损失每个集合(A1,A2,A3,A4或B1,B2,B3,B4)中的一个磁盘。 在商业应用程序中很less见,但是可以使用软件RAID。

要绝对清楚:

  • 如果你有一个带有8个磁盘和一个死亡的RAID10arrays(我们将它称为A1),那么你将有6个冗余磁盘,1个没有冗余。 如果另一个磁盘死了,有85%的机会你的arrays仍在工作。
  • 如果你有一个有8个磁盘和一个死亡的RAID01arrays(我们称之为A1),那么你将有3个冗余磁盘,4个没有冗余。 如果另外一个磁盘死了,你的arrays还有43%的机会在工作。

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


RAID 5

在以下情况下performance良好:您需要冗余和磁盘空间的平衡,或者具有大部分随机读取工作负载

不好的时候:你有一个高随机写入工作量或大型驱动器。

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

不幸的是,在发生驱动器故障的情况下,重build过程非常密集。 RAID中的驱动器越大,重build的时间越长,发生第二次驱动器故障的可能性也越大。 由于大型caching驱动器的重build数据要多得多,性能也要差得多,所以通常不推荐使用7200RPM或更低的RAID5。

raid5的最大大小几乎能保证重build产生另一个驱动器故障,造成所有数据丢失,大约是12TB。

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

如果我们以七个2TB驱动器为例来说明RAID 5。 当驱动器出现故障时,剩下六个驱动器。 为了重buildRAID,控制器需要通过6个驱动器读取每个2TB的数据。 看上面的图,几乎可以确定在重build结束之前会发生另一个URE。 一旦发生这种情况,突袭5和其上的所有数据都将丢失。

将RAID 5放在可靠的(电池支持的)写caching之后也是必要的。 这样可以避免小写操作的开销,以及在写入过程中发生故障时可能发生的片状行为。

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

RAID 5


RAID 6

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

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

RAID 6类似于RAID 5,但是它使用两个磁盘而不是一个磁盘(第一个是XOR,第二个是LSFR),因此可以从arrays中丢失两个磁盘而不会丢失数据。 写入惩罚高于RAID 5,并且您有一个较小的磁盘空间。

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

RAID 6


RAID 50

好的时候:你有很多磁盘需要在一个arrays中,而RAID 10由于容量而不是一个选项。

不好的时候:你有这么多的磁盘,许多同时发生故障是可能的,然后重build完成。 或者当你没有很多的磁盘。

RAID 50是一个嵌套级别,与RAID 10非常相似。它将RAID 5arrays和条带数据组合在一个RAID 0中。只要多个磁盘从不同的 RAID 5中丢失,就会同时提供性能和多个磁盘冗余arrays。

在RAID 50中,磁盘容量是nx,其中x是条带化的RAID 5的数量。 例如,如果一个简单的6磁盘RAID 50(尽可能最小),如果在两个RAID 5中有6x1TB磁盘,然后将其划分为RAID 50,那么您将拥有4TB的可用存储容量。


RAID 60

好的时候:你有一个与RAID 50相似的用例,但需要更多的冗余。

不好的时候:你arrays中没有大量的磁盘。

RAID 6是指RAID 60,因为RAID 5是指RAID 50。基本上,您有多个RAID 6,然后在RAID 0中将数据分条。此设置允许集合中的任何单个RAID 6的最多两个成员失败而没有数据丢失。 RAID 60arrays的重build时间可能相当长,因此arrays中的每个RAID 6成员都有一个热备用通常是个好主意。

在RAID 60中,磁盘容量是n-2x,其中x是条带化的RAID 6的数量。 例如,如果一个简单的8磁盘RAID 60尽可能小,那么如果您将两个RAID 6中的8x1TB磁盘划分为一个RAID 60,则您将拥有4TB的可用存储容量。 正如你所看到的,这给了RAID 10在8个成员arrays上所能提供的相同数量的可用存储空间。 尽pipeRAID 60会稍微冗余,但重build时间将会更长。 一般情况下,只有在拥有大量磁盘的情况下才需要考虑RAID 60。


RAID-Z

在以下情况下可以使用:在支持它的系统上使用ZFS。

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

由于ZFS彻底改变了存储和文件系统之间的交互方式,RAID-Z有点复杂的解释。 ZFS包含卷pipe理(RAID是卷pipe理器的function)和文件系统的传统angular色。 因此,ZFS可以在文件的存储块级别执行RAID,而不是在卷的条带级别执行RAID。 这正是RAID-Z的function,将文件的存储块写入多个物理驱动器,包括每个条带的奇偶校验块。

一个例子可以使这个更清楚。 假设您在ZFS RAID-Z池中有3个磁盘,则块大小为4KB。 现在你写一个文件到系统,正是16KB。 ZFS将把它分成4个4KB的块(正常的操作系统)。 那么它将计算两个校验块。 这六个块将被放置在驱动器上,类似于RAID-5如何分配数据和奇偶校验。 这是对RAID5的改进,因为没有读取现有的数据条来计算奇偶性。

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

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

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

RAID-Z的主要缺点是它仍然是软件RAID(并且受到CPU计算写入负载而不是让硬件HBA卸载它所引起的相同的小延迟)。 HBA支持ZFS硬件加速将来可能会解决这个问题。

其他RAID和非标准function

由于没有中央机构执行任何标准function,所以各种RAID级别已经发展并被普遍使用标准化。 许多供应商已经生产了偏离上述说明的产品。 他们发明一些新奇的营销术语来描述上述概念之一(在SOHO市场中这种情况最为频繁)也是很常见的。 在可能的情况下,试着让供应商真正地描述冗余机制的function(大多数人会自愿提供这些信息,因为再也没有秘密了)。

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

还有RAID一百万!

所以读取的磁盘将会是快速,可怕的写入,但我想象得非常可靠,哦,你会得到1/128的可用空间,所以从预算的angular度来看不是太好。 不要用闪存驱动器做这个,我尝试着点燃大气。

在这里输入图像描述