我即将用 Linux 软件 RAID1 阵列替换旧的硬件 RAID5 阵列。我正在和一位朋友交谈,他声称 RAID5 比 RAID1 更强大。
他声称,使用 RAID5,读取奇偶校验数据以确保所有驱动器都返回正确的数据。他进一步声称,在驱动器上发生的 RAID1 错误将被忽视,因为没有对 RAID1 进行此类检查。
我可以看到这怎么可能是真的,但也可以看到这完全取决于所讨论的 RAID 系统是如何实现的。当然,RAID5 系统不必在读取时读取和检查奇偶校验数据,而 RAID1 系统可以轻松地从读取时读取所有驱动器,以检查它们是否都保存相同的数据,从而实现相同级别的稳健性(相应的性能损失)。
所以问题是,现实世界中的 RAID5/RAID1 系统实际上是做什么的?RAID5 系统是否在读取时检查奇偶校验数据?是否有 RAID1 系统可以从所有驱动器读取并比较读取的数据?
RAID-5 是一种容错解决方案,而不是数据完整性解决方案。
请记住,RAID 代表廉价磁盘冗余阵列。磁盘是冗余的原子单元——RAID 并不真正关心数据。您购买的解决方案使用WAFL 或 ZFS 等文件系统来解决数据冗余和完整性问题。
RAID 控制器(硬件或软件)不会在读取时验证块的奇偶性。这是运行 RAID-5 的主要风险——如果您在驱动器上遇到部分介质故障(坏块未标记为“坏”的情况),您现在处于数据被静默保存的情况损坏。
Sun 的 RAID-Z/ZFS实际上提供了端到端的数据完整性,我怀疑其他文件系统和 RAID 系统将来会提供此功能,因为 CPU 上可用的内核数量不断增加。
在我看来,如果您使用的是 RAID-5,那么您会很便宜。RAID 1 性能更好,提供更好的保护,并且在驱动器发生故障时不会影响生产——成本差异很小。
我相信答案取决于控制器/软件,例如,镜像系统通常只能从一对光盘中读取一个光盘,因此能够提供错误的数据。我注意到,如果您的结果取决于该数据,那么当数据写入两张光盘时,它会在两张光盘上损坏.....
来自 SATAssure(tm) Plus 下的 pdf:
“革命性的 SATAssure 技术使用大容量、廉价的 SATA 磁盘驱动器提供企业级数据保护和可靠性。SATAssure 对所有读取操作进行操作,确保数据完整性并实时自动纠正问题——所有这些都没有传统的性能或容量损失存储系统。通过重新启动单个驱动器的新功能来减少驱动器 RMA。”
有趣的是,一些制造商对他们总是计算奇偶校验这一事实大惊小怪,这让我认为这在硬件控制器上相对不常见。还值得注意的是,ZFS 和 WAFL (netapp) 等系统对每次读取进行奇偶校验计算。
使用 RAID-5,奇偶校验通常只在阵列重建时读取,而不是在一般读取时读取。这样读取可以更加随机和更快(因为您不必在每次需要数组中的 1K 数据时读取和计算整个条带的奇偶校验)。
使用 RAID-1,通常会尽可能跨驱动器进行读取,以提高读取性能。如您所述,如果 RAID 子系统尝试读取两个驱动器并且它们不同,则子系统无法知道哪个驱动器出错。
大多数 RAID 子系统依赖于驱动器在出现故障时通知控制器或计算机。
那么RAID-5“更强大”吗?答案是,这取决于。对于给定数量的磁盘,RAID-5 比 RAID-1 可以让您获得更有效的存储;尽管要在一个磁盘之外提供有效的存储,但 RAID-1 需要与 RAID-0 组合,或者作为 RAID-1 阵列的条带,或者跨两个 RAID-0 条带的 RAID-1。
(我更喜欢前者,因为单个驱动器故障将取出单个 RAID-1 元素,这意味着只有单个驱动器需要重建。对于后者,单个驱动器故障会杀死 RAID-0 元素,这意味着一半更换驱动器时,磁盘将参与重建。)
这也导致了对“幻像写入”的讨论,其中驱动电子设备报告写入成功,但无论出于何种原因,写入都不会写入磁盘。这确实发生了。考虑到对于 RAID-5 阵列,当您发生驱动器故障时,阵列必须完全读取所有幸存驱动器上的所有扇区才能恢复。NetApp 声称,大容量的驱动器加上大容量的 RAID 组意味着在某些情况下,您在重建过程中失败的几率可能高达十分之一。因此,他们建议大型 RAID 组中的大型磁盘使用双奇偶校验(我认为这与 RAID-6 有关)。
我在他们的几位工程师进行的 NetApp 技术讨论中了解到这一点。
没有常见的 RAID 实施通常会检查数据访问的奇偶性。我从来没有见过一个。一些 RAID5 实现为流式读取读取奇偶校验数据,以防止不必要的查找(丢弃每个第 n 个块比让驱动器查找每个第 n 个块更便宜)。RAID1 实现无法检查,因为它们从两个磁盘读取性能(嗯,在绝大多数 RAID1 实现中。少数让您选择,如果一个磁盘比另一个磁盘慢得多并且它不是写密集型的,这可能很有用加载。)
有些确实会检查背景“擦洗”。在这种情况下,RAID6 胜出,因为它可以恢复数据,而 RAID5 和 RAID1 情况相同,可以识别但不能修复。(这并不完全正确,因为驱动器可能会检测到错误的 CRC,返回错误,并让您从奇偶校验重写块。这种情况很常见)。
如果您想要数据完整性,请在应用程序层为每个块(或记录,或者无论如何划分)存储一个散列。Sybase 和 Oracle 会这样做(我相信是在页面级别),我曾多次看到它保存了一个巨大的数据库。(例如,控制器开始返回错误数据,sybase 崩溃并出现明显错误,因此当数据库在状态不一致的故障硬件上运行时没有进行任何写入)。
为您执行此操作的唯一文件系统解决方案和唯一 RAID 解决方案是 ZFS。
您的朋友是在谈论某些RAID 级别中涉及的奇偶校验位,还是写入磁盘的数据的校验和?
如果它们是关于奇偶校验的,那么 RAID1 没有奇偶校验位 - 您有两个相同数据的副本。磁盘应该执行校验和,以确保写入磁盘的内容与线路上的内容匹配
RAID5 确实有一个奇偶校验位。这意味着您可能会丢失 RAID 集中的磁盘,然后继续进行,就好像什么都没发生一样。尽管如此,应该对写入磁盘的数据执行校验和,以确保它与线路上的数据相匹配
在这种情况下,校验和完全独立于 RAID,RAID 可能会也可能不会用一堆磁盘执行
编辑添加:您提到从硬件 RAID 迁移到软件 RAID。首选始终是硬件 RAID 而不是软件 RAID。如果您可以购买提供您想要实施的 RAID 级别所需的硬件,我建议您去购买。这将使所有奇偶校验计算都由 RAID 卡而不是主机执行。因此释放主机上的资源。毫无疑问,还有其他好处,但他们现在逃跑了
这将取决于raid 实现类型(硬件/软件)、磁盘、raid 控制器(如果有)以及它的功能。
它确实有点意义,但不是真的:) 发生的事情是 - 如果写入错误的数据,在镜像上它将被发送到两个驱动器,并且在 raid5 奇偶校验上将生成并传播到驱动器。数据读/写检查由磁盘和控制器固件完成,与raid级别无关。
正如我所说,检查不是raid算法的一部分,尽管一些控制器可能有一些额外的实现。
阵列的稳健性取决于驱动器的质量(由于 RV 速率降低,2.5" 驱动器的寿命往往比 3.5" 长;根据我的经验,永远不要购买 maxtor SCSI/SAS 驱动器 - 它们有可怕的固件故障)、环境(温度和湿度控制),控制器本身(它有BBU吗?固件是最新的吗?是真的raid还是fakeraid?),服务器中的PSU数量,UPS质量等。
我不知道,但在我看来不太可能。请记住,为了计算奇偶校验,它必须从 RAID 集中的所有驱动器读取块,然后进行数学运算以确定正确性,而如果没有,它只是读取一个驱动器。
此外,如果您的读取少于一个块,则奇偶校验读取必须将其扩展为一个完整块,而常规读取则不会。(当然,假设 RAID 块大于磁盘的块。我认为从磁盘读取的数据必须是完整的块。如果不是,我的观点更有效。)
所以,从我的角度来看,是的,它可以做到这一点,但如果它做到了,那将是低效的,我怀疑是否以这种方式实施。
不过,我个人对实际实现一无所知。
这样做真的没有意义。当你发现奇偶校验不匹配时你会怎么做?(你怎么知道哪个块是错的?)
对于随机读取,检查奇偶校验会很昂贵。通常,您只需查看单个磁盘即可进行随机读取,但如果您想检查奇偶校验,则需要在每次读取时读取所有磁盘。(如果您可以对此做任何事情,那可能仍然有意义!)
请注意,RAID-1 也有这个问题——当您将 RAID-1 视为两个磁盘的 RAID-5 时,这是有道理的。
我一直在思考这个说法,即 RAID-1 的读取速度应该比 RAID-5 快,因为它同时读取两个驱动器。
现在,因为除非阵列需要重建,否则不会在 RAID-5 上读取奇偶校验,因此在读取方面它实际上等于 RAID-0 阵列,对吗?
RAID-0 通常被认为是最快的级别(尽管它应该被命名为“AID”,因为没有任何冗余)。:-D
说到 Linux 软件 RAID,一个简单的测试——使用 hdparm——证实了这个理论:我的 RAID-5 阵列总是显示出比我的 RAID-1 阵列更高的读取速度。
但是:看起来,退化的阵列比正常运行的阵列要慢得多!我刚刚使用 Fedora 9 进行了测试,它在 4 个 WD 1 TB 驱动器上运行,具有不同的 RAID 级别。结果如下:
降级 RAID-5:读取速度 43 MB/秒 正常 RAID-5:读取速度 240 MB/秒 (!) RAID-1:读取速度 88 MB/秒
由于允许的磁盘丢失在 RAID-1 和 RAID-5(即一个)中是相同的,我认为 RAID-5 在各个方面都应该优于 RAID-1 - 提供与阵列中使用的磁盘数量相关的更多容量并且相同容错性。这导致了一个结论,即 RAID-6 优于所有其他 RAID 级别,因为它在正常读取时与 RAID-0 一样快(没有从两个奇偶校验磁盘读取奇偶校验),并且在丢失的情况下仍然可以容错数组成员。;-)
就个人而言,我认为 RAID 系统的最终测试是它能否承受故障。在这种情况下,RAID5 和 RAID1 都可以处理单个驱动器故障,但两者都无法生存。
至于您对奇偶校验位的问题,我认为它取决于 RAID 驱动程序。它肯定会在重建期间被读取,但在正常使用时,这样做没有多大意义,因为带宽会浪费在它上面。