为 RAID 中的磁盘启用 HD 磁盘缓存是否安全且有益?

为 RAID 中的磁盘启用 HD 磁盘缓存是否安全且有益?

Dell Perc RAID 卡(以及其他卡)允许您将磁盘缓存策略设置为(即各个硬盘使用其内置缓存)或离开(意思是,各个磁盘缓存被禁用)。在阅读网上的讨论时,我发现关于哪种设置最好存在矛盾的信息。有些人说要禁用磁盘缓存,因为电源故障可能会导致数据损坏;另一些人说你可以让磁盘缓存保持启用状态如果您的计算机已连接到不间断电源,并且启用缓存可以提高磁盘性能,即使在 RAID 配置中也是如此。

关于应该如何设置磁盘缓存,是否有明确的结论?

请注意,这是不是有关 RAID 卡的缓存和缓存策略 - 这是关于阵列中使用的磁盘,而不是卡缓存或卡本身的电池备份。

答案1

你自己已经回答了这个问题。如果你有 UPS,你可以让它们保持开启状态,如果没有,那么它们应该关闭,否则你将面临数据丢失的风险。

在数据中心的大多数服务器上,它们通常使用 OEM 固件,该固件以只读模式使用缓存。(相当于关闭)写入将由带有电池供电内存的 RAID 卡缓存。

答案2

这不仅取决于个人喜好,还取决于所讨论的 RAID 控制器。3ware 卡通常在“正常”条件下自行启用磁盘缓存,这对于断电而言是安全的。Perc 控制器通常也会启用 pdcache,但对于基本上所有 SATA 驱动器,这很可能会在断电时导致数据丢失。

权衡停电造成的容量损失可能性与恢复/修复成本并不是一个可以明确回答的问题,因为它取决于许多因地而异的因素。

当然,如果更多的控制器能够自行启用磁盘缓存并保证其安全,那就太好了,这将使这个问题变得毫无意义。

答案3

您应该考虑单点故障,该故障可能不发生在服务器外部,也可能发生在服务器内部。例如,如果服务器只有一个电源,UPS 在发生故障时将无济于事,并且所有驱动器的缓存将立即被清除。

我个人会遵循供应商的建议,因为开发这些控制器的工程师确实知道他们所说的内容。

此外,您可能还想检查您是否能够满足 DRP RTO,并测试性能以了解风险是否值得。

答案4

所有这些缓存切换/电池/PLP SSD 存在的全部原因是为了确保操作系统具有完全控制知识什么时候数据已写入永久到磁盘。

例如,如果你有一个电池供电的 RAID。那么从理论上讲,一旦数据被写入缓存,就可以认为永久写入非易失性介质。这是因为:如果电源故障,电池将启动并确保数据(最终)写入磁盘。

消费级驱动器缓存的问题在于它们没有电池支持(与 RAID 不同)。假设您没有 RAID,只有一个普通的消费级 SATA SSD。如果操作系统向其中写入一些数据(这些数据首先会进入缓存),然后在缓存数据写入磁盘之前电源发生故障,会发生什么情况?数据很可能会丢失,具体取决于事情发生的时间。

为了防止出现此问题,存在基于软件的技术来确保此类驱动器的数据一致性。例如,写入屏障和日志文件系统。本质上,当操作系统想要绝对确保写入磁盘的数据保存在其非易失性介质上时,它将发出一个特殊的刷新命令。刷新(又名 fsync)命令会将缓存中的所有内容写入磁盘,然后返回成功完成。应用程序和操作系统使用这些 fsync 作为“写入屏障”。将其与日志等其他技术相结合,它们可以在断电的情况下安全地将您的文件系统或数据库恢复到 100% 已知的良好状态即使您没有 UPS或电池供电的驱动器。执行所有这些操作都会增加性能开销,但这对于确保非 RAID 消费驱动器的数据完整性是 100% 必要的。

现在我们了解了驱动器在没有 RAID 的情况下如何工作,让我们考虑一下当我们将此消费级驱动器插入具有自己的缓存和电池备份(除了驱动器上的缓存)的 RAID 时会发生什么。首先要考虑的是,当操作系统和应用程序看到这样的 RAID 时会做什么?设计合理的系统会识别出无易失性缓存存在于此虚拟 RAID 磁盘上。因此,无需执行刷新(即它们将禁用写屏障),因为写入驱动器的每个字节在到达控制器后都被视为持久的。因此,运行数据库系统(尤其是日志记录操作)的性能开销现在更小,并且您的文件系统也会更快。

但是组成电池供电 RAID 的实际磁盘呢?我们需要担心它们的写入缓存吗?当然!确保当控制器将数据写入实际磁盘时,它是保存到非挥发性介质中如果不是,那么控制器给予操作系统的整个保证(写入其缓存的位是安全且持久的)就会失效!这意味着您的存储子系统无法正常运行,并且您的数据处于危险之中。

简而言之:

如果您有电池供电的 RAID:

  • 如果 RAID 的驱动器部分是消费者驱动并且有缓存(大多数都有)。磁盘缓存绝对必须被禁用
  • 如果驱动器企业采用 PLP 驱动(断电保护),然后可以启用缓存因为驱动器将确保写入驱动器缓存的任何数据都将保存到非易失性介质中。

我不想在这里介绍 UPS 的概念,因为:从我的角度来看,UPS 的工作不是确保磁盘上数据位的完整性。它的作用是为您的应用程序提供一些额外的时间来执行一些工作,然后再安全关闭。当然,它还可以在配置错误的情况下保护您的磁盘。但我认为依靠 UPS 来取代专门为此目的设计的其他技术(例如写入屏障、日志记录、FBWC、PLP 驱动器等)是不正确的……

这是我所了解的整个系统如何运作的最佳方式。

相关内容