存储和备份2亿个小文件

存储和备份2亿个小文件

我的磁盘是 10x1TB SAS 7200 RPM,采用 RAID 10,配有 MegaRaid 9260 硬件控制器和缓存/BBU。这会产生 4.6TB 的 RAID 10 卷。hdparm -t(当设备为空时)速度为 500MB/s。

RAID 块大小为 64KB,文件系统块大小为 2KB(我将把它更改为最小块大小和 4KB 块大小)。

目录模式为 /data/x/yz/zyxabc.gz

我正在使用 EXT4,计划迁移到 XFS。操作系统是 RHEL 6。


到目前为止,它运行良好。工作负载为 99% 的读取,在正常情况下每秒最多可读取 300 个文件。问题在于备份。使用 scp 备份需要 6 天时间。rsync 甚至更慢。DD 的速度约为 2MB/s。如果我拍摄快照、备份然后删除它,LVM 快照可能是一种选择。数据一致性对我来说非常重要。

每个文件大约 0.5-4KB。如果我将所有文件都存储在数据库中,备份性能是否会提高?我还有哪些其他选择可以解决在合理时间内备份​​这么多小文件的问题?

答案1

我计划转向 XFS

在这种情况下,您最好预订大量的百忧解。:-) 唉,XFS 在这种模式下表现很糟糕(有很多小文件)。

如果你正在考虑 FS 变更瑞泽3在我看来,这是唯一值得尝试的选项。这样notail可以减少 CPU 开销,同时notail减少磁盘空间开销。

64 K 的 RAID 块也超出了合理范围 — 为什么用这么小的模式会溢出磁盘 I/O 队列?增加它而不是减少它!如果有大量同时 I/O,它不会造成影响。

现在说到备份,可以提到 COW FS。例如 Btrfs 或 Nilfs。LVM-2 快照可能也不错,因此您可以尝试将其与迁移到 Reiser3 相结合。但我想 COW FS 更有可能为您提供所需的东西。

答案2

您是否考虑过以下解决方案阿曼达或者巴库拉

答案3

要么使用支持增量备份的备份解决方案(例如已经提到的那些),要么使用遍历树并仅复制具有特定修改时间的文件的脚本?

不过,我不确定你说的“我需要一致性”是什么意思。你的意思是所有文件都需要在同一时间点备份(即快照)吗?在这种情况下,我不确定任何类型的 tar、copy、rsync 或类似工具是否有效 - 你必须使用可以创建文件系统快照的东西,或者首先暂停创建这些文件的任何进程。

答案4

“DD 的速度约为 2MB/s”

我很困惑,dd 不是对设备进行顺序读取(或尝试读取)吗?它是否与这些文件的在线使用存在竞争?如果是这样,我认为需要更多磁盘/更快的磁盘。如果我没记错的话,1TB SAS 仍然是 7,200 RPM,您可以选择 600GB 15K SAS,这将大大减少您的寻道次数。

您是否将其转储到 RAMDisk?这样您的目标位置就不会成为 DD 测试的瓶颈(并且您不会将其直接转储回本地磁盘,从而再次导致高寻道)。

如果您希望以 2MB/s 的速度获得最快的读取模式,那么您需要更快的磁盘。

然而,如果不与其他内容结合,dd 将无法获得一致的快照。

相关内容