需要较慢/缓存的 Linux 文件系统

需要较慢/缓存的 Linux 文件系统

我知道这听起来很奇怪但我需要一个更慢或缓存的文件系统。

我有很多防火墙,它们将其数据系统记录到一对 Linux VM 中,这些 VM 将这些文件写入其“本地”(实际上是连接的 FC SAN)ext3 格式的磁盘,并将消息转发到我们的 Splunk 服务器。

问题在于,系统日志服务器正在将这些系统日志消息以数百个(有时是数千个)每秒约 4k 的微小写入形式写回我们的 FC SAN - 它现在可以处理这个工作负载,但我们的 FW 流量将在未来几个月内至少增长 5000%(真的),这对 SAN 来说将是一个痛点,我想在问题出现之前解决根本原因。

因此,我需要一些帮助,找出一种方法来将这些写入缓存或以某种方式从“物理”磁盘中阻止,以便虚拟机可以触发更大但频率更低的写入 - 没有办法避免这些写入,但没有必要做那么多小写入。

我查看了各种 ext3 选项,设置了 noatime 和 nodiratime,但这对解决问题没有多大帮助。显然,我正在研究其他文件系统,但我想放弃这个,以防将来其他人遇到同样的问题。

哦,我不能直接将这些消息转发给 Splunk,我们的防火墙团队坚持要求它们采用原始格式以便进行诊断。

答案1

也许commitext3 挂载选项会对您有所帮助?例如,commit=60每分钟仅刷新一次所有数据和元数据。

强制警告:这可能会导致最多一分钟的数据丢失(如果您传递了 commit=60 值)。

答案2

文件系统:如果您的设备正在使用写入屏障,请禁用写入屏障,并全面禁用 atime 更新。

但是,您也有可能在发生故障事件(电源等)时以更大的数据丢失为代价来调整系统日志。

示例指令来自syslog-ng(可能不是您正在使用的):

  • flush_lines()指定一次向目标刷新多少行。Syslog-ng 会等待此行数累积,然后以单个批次的形式发送它们。

  • flush_timeout()指定 syslog-ng 等待行在其输出缓冲区中累积的时间。有关更多信息,请参阅 flush_lines 选项。

在这种情况下,目标是磁盘文件。

相关内容