奇偶校验RAID(例如RAID5)软件的优缺点


8

最近有人告诉我有关没有非易失性缓存的奇偶校验RAID的一些问题。更为强大的硬件控制器确实具有电池供电的高速缓存,以在电源故障的情况下完成写操作。现在,有人说这样的故障,可能与降级的阵列一起,可能会杀死您的整个文件系统。其他人则认为这些问题已经过时和/或存在误解

不幸的是,没有人提供硬性参考,也没有搜索md RAID和非易失性缓存,也没有通过位图缓存提供关于md-RAID5是否可取的可靠答案。

关于此的任何信息吗?


1
Linux的mdraid确实有一个日志,至少在突然停止(例如,系统崩溃或所有磁盘立即掉电)或RAID-1的情况下是安全的。我不知道它的RAID- [56]是否可以应付所有形式的断电。
吉尔(Gilles)“所以,别再邪恶了”,

2
@Gilles,它没有日记,但是有一个可选的写意图位图。但是,这可以加快系统重新启动时的重新同步过程,因为它可以标识需要重新同步哪些区域以及可以跳过哪些区域。
psusi 2011年

@psusi我回去检查了几个月前的研究。据我了解,写意图位图(不是日志,这是我的错误)不仅可以加快重新同步的速度,还可以指示哪些组件具有脏块,因此足以确保RAID-1上的块一致性,但不能在RAID-5上(旧状态和新状态下都可能没有足够的磁盘来还原任一状态)。
吉尔斯(Gilles)'所以

1
@吉尔斯我不确定你所说的“博克一致性”是什么意思。您似乎挂在整个条带上,处于写入开始之前的状态,还是写入之后的状态。永远不能保证,如果在写入过程中断电,则完全不可能。就像在单个磁盘上一样,由文件系统来处理。使用日记。
psusi 2011年

Answers:


4

我认为Linux的软件RAID与没有BBU且启用回写缓存的硬件RAID卡一样可靠。毕竟,软件RAID系统中的未提交数据驻留在内核的缓冲区高速缓存中,这是没有电池备份的回写高速缓存的一种形式。

由于我曾经使用过的每个硬件RAID-5卡都允许您在没有BBU的情况下启用回写缓存,因此我希望软件RAID-5可以对具有一定风险承受能力的人们正常工作。

战争故事:

话虽如此,我个人经历了严重的数据丢失,因为尽管启用了回写缓存​​,但在RAID-5卡上没有安装BBU。(也没有UPS。也不要对我大喊,不是我的电话。)

我度假时,老板打电话给我感到恐慌,因为停电后我们的其中一个生产系统无法恢复。他已经花光了要尝试的东西。我不得不走到路边,拿出笔记本电脑,打开手机上的WiFi绑定,ssh进入受灾的系统,然后修复它,而我的家人则坐在路边与我在一起直到完成从备份还原蟑螂数据库表。(当时我们距离失去手机接收能力大约一英里。)

所以告诉我:您现在为RAID卡+ BBU支付多少钱?


正确-我删除了我的评论。但是没有BBU的突袭应该写完,不是吗?至少这是PERC控制器在电池学习到并低于阈值时所做的事情。
尼尔斯,

是的,没有BBU或BBU失效,RAID卡仍会写入数据。它不做的是记住服务器电源中断时写缓冲区中的内容。由于RAID取决于冗余位之间的一致性,因此在变得不一致时会感到困惑。因此,由于在不知道哪个是正确的情况下,控制器被迫选择两个或多个数据副本中的一个,因此RAID写入过程中的电源故障有可能损坏RAID上的某些内容。
沃伦·杨

3

只是警告提示:在阵列降级时,RAID-5 / 6写入操作会占用大量CPU时间。如果在磁盘出现故障时服务器已经满载,则可能会陷入无响应状态。硬件RAID控制器不会发生这种问题。因此,我强烈建议您不要在生产服务器上使用软件RAID-5 / 6。对于工作站或负载较轻的服务器,也可以。


3

SW RAID确实具有故障模式-如果服务器在写操作中途中断,则可能会损坏条带。带有BBU的HW RAID控制器并不是那么昂贵,它会保留脏块,直到您可以重新启动磁盘为止。

高速缓存中的BBU 不能保证在电源故障时进行写操作(即,它不为磁盘供电)。它会为缓存供电几天,直到您可以重新启动磁盘。然后,控制器会将所有脏缓冲区刷新到磁盘。

关于软件与硬件RAID-5的一些说明

  1. 如果将直写缓存与阻塞的I / O一起使用,则在SW RAID-5卷上的写操作可能会很慢,因为在所有I / O完成之前,调用不会返回。带有BBWC的HW RAID控制器可以大大优化此性能,因此您可以看到明显更好的性能。

  2. 我上次看您无法在SW RAID卷上执行直接I / O(即零拷贝DMA)。这可能已经改变,并且实际上仅与使用原始分区的应用程序(如数据库管理器)有关。

  3. 现代的SAS RAID控制器可以从磁盘阵列中拉出或推送1GB /秒或更多的数据,特别是如果格式化的条带大小很大(例如256kb)。我什至已经对较旧的Adaptec ASR-2200s进行了基准测试,结果表明它的两个scsi通道以600MB / sec +的总速度(10x 15,000磁盘)饱和了很多,而主机上的CPU负载却很少。我不确定即使在现代计算机上,您也可以从RAID-5软件中获得大量CPU负载。也许您可以快速阅读。

  4. 引导HW RAID卷的配置很简单-RAID卷对操作系统是透明的。

从一级零售供应商那里购买的低端RAID控制器(如Adaptec)的零售价并不昂贵,可以从ebay上购买花生。但是请记住,如果您购买二手货,请坚持使用一级供应商,并确保您知道该型号并从他们的网站验证驱动程序的可用性。

编辑:从@psusi的评论,请确保您没有得到fakeraid(隐藏在驱动程序中的透明SW RAID)控制器,但是较大名称(Adaptec,3Ware或LSI)提供的大多数产品都不是fakeraid单元。可以采用BBU的任何东西都不会被伪造。


如果在写入过程中电源出现故障,那么您将获得一条不同步且未损坏的条带。不同步的条带仅表示奇偶校验不是最新的,因此在安装阵列时,必须更新奇偶校验。同样,那些可以用于花生的“突袭”控制者通常是假突袭。他们有BIOS ROM扩展程序和Windows驱动程序,可以在软件中进行突袭。
psusi 2011年

@psusi-几年前我买的大多数ASR-2200s控制器价格都在100美元以下,它们是pukka HW RAID控制器。我认为Adaptec根本不会制造出仿冒的控制器。您可以在ebay上以几百美元的价格轻松获得4或8端口Adaptec,3Ware或LSI SAS RAID控制器。
ConcernedOfTunbridgeWells,

我不会为不知名来源的二手产品叫几百美元。表示新产品的价格在$ 50- $ 100之间。该类别中的设备通常是fakeraid。
psusi 2011年

@psusi-您正试图拒绝我从未提出过的论点;我从来没有使用过“小猪”这个词。请不要求助于稻草人的论点-我使用的示例不是 fakeraid控制器。
ConcernedOfTunbridgeWells,

1

如果您有数据存储在缓存中但还没有存储在磁盘上,并且电源出现故障,那么数据将消失,并且您的磁盘很有可能处于不一致状态。除非您拥有一个不断编写的系统,否则该机率不会很高,但是我仍然不希望将自己的数据押在机率游戏上。

一个有趣的转折是在RAID5 / 6上创建一个主文件系统,但在常规驱动器上放一个日志,因此首先将数据转储到常规驱动器上。性能可能会受到限制,因为您将限于单个驱动器的写入速度,但是可靠性会提高。因此,我认为在您的写入性能并不重要但您的读取很重要的情况下,这可能会很好。

或者,您可以再花100美元购买带有BBU或小型UPS的卡,并完全避免所有这些麻烦;)


您如何看待快速SSD上的日记?
user773568 2011年

那样做就可以了,但是那时候您首先要花的钱不只是一个像样的控制器;)而且,速度提高了,但是可靠性却降低了,因为大多数SSD死得非常快。
Marcin

1
@Marcin你以什么为基础?他们似乎没有缩短指定的设计寿命,而我已经使用了一年以上,并且只使用了其写入周期的5%。
psusi 2011年

@MarcinWell当您说可靠性时,这是节省还是可用性?我没想到丢失期刊会威胁到整体数据。可以?无论如何,由于噪声和节能原因,我计划将OS和Swap放在较小的SSD上。RAID可以通过这种方式进入睡眠状态。
user773568 2011年

MLC SSD具有可靠性问题的记录。SLC单元更可靠,但也更昂贵。关于SSD的可靠性的白皮书,可以发现这里
ConcernedOfTunbridgeWells

1

Linux mdadm软件突袭的设计与具有电池后备缓存的硬件突袭一样可靠。除了那些同样适用于单个磁盘突然掉电的问题之外,突然掉电也没有问题。

当系统在电源故障后恢复正常运行时,该阵列将重新同步,这基本上意味着将重新计算奇偶校验以匹配电源故障之前写入的数据。这需要一些时间,但实际上没什么大不了的。通过启用写意图位图,可以大大减少重新同步时间。


1
听起来有点乐观。纯软件解决方案如何像电池后备缓存一样可靠?
user773568 2011年

1
RAID阵列可能会发生坏事,而单个磁盘上不会发生。使用单个磁盘,每个扇区都处于旧状态或新状态。对于4 + 1磁盘上的RAID-5,如果磁盘1和2的扇区42处于旧状态而磁盘3、4和5的扇区42处于新状态怎么办?旧状态和新状态均不可恢复。我不知道Linux是否采取措施避免这种情况,这就是问题所在。
吉尔(Gilles)“所以,别再邪恶了”,

@ user773568嗯...我只是解释了如何?
psusi 2011年

@Gilles您刚刚重述了与单个磁盘相同的情况。一些部门处于旧状态,而某些部门处于新状态。它们在哪个磁盘上都没有关系。在日志崩溃时,文件系统处理不完整的写入。
psusi 2011年

@psusi否:只有一个磁盘,每个扇区处于新状态或旧状态。对于多块磁盘,如果驱动程序采用天真的方法来覆盖每个磁盘上的扇区而不在其他位置存储信息,则处于临时状态(某些磁盘上的旧状态,另一些磁盘上的新状态)的扇区根本无法恢复。可以检测到错误(如果您很幸运:奇偶校验可能是偶然匹配的),但无法纠正。
吉尔(Gilles)“所以,别再邪恶了”,

1

这是一个博客,解释RAID5的问题以及ZFS RAIDZ如何解决它

它的关键点是:

RAID-5(以及其他数据/奇偶校验方案,例如RAID-4,RAID-6,奇偶校验和行对角奇偶校验)从未完全兑现RAID承诺-不能-由于已知的致命缺陷作为RAID-5写入孔。每当您更新RAID条带中的数据时,还必须更新奇偶校验,以使所有磁盘的XOR都为零-该方程式使您可以在磁盘发生故障时重建数据。问题在于无法自动更新两个或多个磁盘,因此RAID条带在崩溃或断电期间可能会损坏。

RAID-Z是类似于RAID-5的数据/奇偶校验方案,但是它使用动态条带宽度。无论块大小如何,每个块都是其自己的RAID-Z条带。这意味着每个RAID-Z写入都是全条带写入。当与ZFS的写时复制事务语义结合使用时,完全消除了RAID写漏洞。

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.