Linux MD RAID 在电力不可预测的情况下的弹性

Linux MD RAID 在电力不可预测的情况下的弹性

如果你遇到这样的情况必须由于不可控的原因而使用 RAID,并且带有 RAID 的服务器可能没有电池备份建筑物容易断电,在电源突然中断的情况下,您可以采取哪些措施来使 RAID 更具弹性?这种情况听起来很牵强,但实际上我现在就处于这种情况,原因我无法详述。

Linux 软件 RAID 支持的任何特定 RAID 规范在处理断电方面是否比任何其他 RAID 规范更具弹性,或者是否有任何 RAID 配置参数可能有用?

例如,与基于奇偶校验的 RAID 配置(例如 RAID5 或 RAID6)相比,RAID 10 在断电后是否更容易/更不容易恢复。此外,是否有任何 RAID 配置设置尝试处理没有良好的硬件 RAID BBU 来缓存写入的现实?

答案1

但是我不记得任何 md raid 特定的选项:

禁用磁盘写入缓存

hdparm
 -W   get/set drive write-caching flag (0/1)

使用 sync/dirsync 选项挂载所有分区

来自 man mount:

dirsync  
All directory updates within the file system should be done synchronously.  This affects the   following sys-tem calls: creat, link, unlink, symlink, mkdir, rmdir, mknod and rename.

sync  
All I/O to the file system should be done synchronously. In case of media  with  limited  number   of  write cycles (e.g. some flash drives) "sync" may cause life-cycle shortening.

...也许断电后它就会同步。

答案2

有几件事你可以做,这会有所帮助,TomTom 和 Barlomiej 已经提到过。但这仍然是一个坏主意。真正的解决办法是某人的要求需要改变。因此,我将给出一系列理由来说明为什么这是一个坏主意,你可以将这些理由告诉任何认为这些要求可以接受的人。

暂且不论 RAID,服务器意外断电最终将导致以下问题:

  • 如果建筑物内经常出现断电情况,那么电源也可能不稳定——电压降低和过压情况会对硬件造成很大损害,并大大缩短其使用寿命。
  • 当服务器崩溃时,您正在处理的所有工作都会丢失。即使文件系统本身没有问题,当断电时,保存了一半的文件会怎么样?在某些情况下,您不仅会丢失刚刚保存的工作,而且整个文件都会损坏,之前的所有工作都会丢失。
  • 最终,您的文件系统将被损坏。现代文件系统通常可以很好地处理这种情况,尽管您可能需要在电源恢复时花费额外的时间来检查文件系统。对于大型磁盘,这可能需要几个小时。有时甚至几天。即使此服务器的用户可以忍受断电时重新启动,他们也不太可能容忍电源恢复后再断电 4 小时。
  • 即使禁用写入缓存,您仍会丢失一些数据。这大大降低了风险,但并不能完全避免。
  • 有一天,您的文件系统会损坏,而 fsck 无法修复它。然后您可以从备份中恢复。然后您意识到备份因相同的电源问题而损坏。

现在将 RAID 加入其中:

  • 在文件系统、RAID 和磁盘本身中添加另一层可能损坏数据的存储层。
  • 因此,当电源故障时,您的一个磁盘损坏了。没问题。这就是 RAID 的用途。将新磁盘放入服务器,它就会开始重建。在大多数系统上,重建需要数小时或数天。在重建过程中,性能会很糟糕,但至少系统仍在运行。然后电源再次断电。根据 RAID,它可能重新开始同步,也可能从中断的地方开始。但最坏的情况是断电导致第二个磁盘发生故障。或第三个。现在 RAID 阵列无法恢复。

UPS 的存在是有原因的。您不需要花哨的服务器机架大小的 UPS。如果必须的话,您可能只需要花费大约 100-200 美元购买高端消费级 UPS。您真正需要的是它能够持续足够长的时间以正确关闭服务器。连接 USB 电缆,设置 UPS 软件,并将其设置为计算机在断电 10 秒后开始关闭。现在它在短短半秒钟的断电期间保持运行(UPS 确保服务器不会遇到通常伴随此类事件的任何可怕的电源状况)。并且在较长时间的断电期间,它会正常有序地关闭,不会丢失数据,也不需要工作 20 小时来尝试让服务器恢复运行。

如果您能向我们提供更多有关这些要求存在的原因的信息,我们可以为您提供更多想法,让您了解如何在要求的精神范围内开展工作并提出可接受的解决方案。但正如现在所说,我只能说: 获取 UPS。

答案3

首先使用写入缓存 SSD - 并使用电容器来处理电力损耗。

否则,请确保禁用所有性能提示。堆栈中的任何地方(包括硬件级别)均无写回缓存。

就是这样。不确定 Linux 是否有针对此进行优化的文件系统。

相关内容