优化 RAID 5 以供 BackupPC 使用(小型随机读取)

优化 RAID 5 以供 BackupPC 使用(小型随机读取)

我正在运行一个 BackupPC 服务器,该服务器使用硬件 RAID 5 作为备份的主存储。由于这台机器的预算非常有限,因此控制器是 3Ware 9500S-4LP,用于 PCI 端口,驱动器是速度较慢的 200 GB SATA 类型。

但是,即使有这样的硬件,我发现性能也比预期差很多。客户端和备份服务器使用 rsync 通过千兆网络传输数据,而千兆网络从未达到饱和状态。备份大约 5 GB 的普通 Linux 安装需要三个多小时。

因此我使用进程监视器来监视服务器atop。结果表明,处理器和内存的使用都不是关键问题,但对 RAID 的读取访问才是瓶颈。

当我构建服务器时,我选择了 RAID 5,因为根据此 RAID 特性的表格概述它似乎是 4 端口控制器上的读取性能和空间效率之间的最佳折衷。

顺便说一句,虽然这是一个备份服务器,但使用 rsync 意味着这里的读取次数远多于写入次数——目前大约是 1000 倍。我认为在 BackupPC 的旧备份层次结构中移动和链接旧文件也对此有很大影响。

那么,如何优化这台机器的性能呢?我有以下可调参数:

  • 使用 BackupPC 的其他传输方式(tar 是另一种选择)
  • 将阵列的文件系统从 ext4(noatime)更改为其他文件系统
  • 更改 RAID 级别(最好不要,因为会丢失数据)
  • 重新创建具有不同条带大小的阵列(最好不要,因为可能会丢失数据)
  • 添加更多内存作为缓冲区缓存使用
  • 添加第二个控制器和更多驱动器(是的,我有这些)
  • 更换控制器(最好不要,因为财务限制)
  • 更换所有驱动器(最好不要,因为财务限制)

答案1

以下是一个简短的随机 IO 入门知识:7200RPM 磁盘驱动器大约可达到 100 IOPS。15k RPM 驱动器可达到该值的两倍,约为 200 IOPS。使用 RAID-5 阵列,可达到的最佳 IOPS 是数据驱动器数量乘以单个驱动器性能;由于您有 3 个数据驱动器,因此您能获得的最佳持续值是 300 IOPS。

在备份运行时使用iostat -mx 5。如果您看到读取或写入操作的数量(第三列和第四列)在 300 范围内,则说明您的设置已经达到极限。

注意:大多数现代 SSD 驱动器可实现 20000 IOPS。RAID-1 中的一对 SSD 可以让满是旋转锈迹的机架黯然失色。SSD 改变了一切。当遇到 IOPS 问题时,99% 的时间解决方案被称为“SSD”。

如果您目前没有最大化 RAID 阵列输出,那么您可以做以下几件事:

  • 增强队列深度。标准内核队列深度适用于具有较小缓存的旧式单个驱动器,但不适用于现代驱动器或 RAID 阵列:

    回显 512 > /sys/block/sda/queue/nr_requests

  • 尝试不同的 IO 调度程序。CFQ(现代内核的默认调度程序)通常不适合服务器操作:

    回显‘noop’> /sys/block/sda/queue/scheduler

  • 尝试 RAID-10。RAID-10 不需要将写入合并在一起,并且在单线程操作中比 RAID-5 表现更好。

  • 或者,尝试运行与数据驱动器数量相同的线程。这可能会提高整体性能。

答案2

首先尝试在本地对 RAID 性能进行基准测试,看看是否真的是 RAID 问题。您甚至可以使用:

dd if=/dev/zero of=/your/raid/zerofile bs=16M

然后约10秒后

killall -SIGUSR1 dd

在另一个终端中查看本地写入速度。如果速度足够快,则尝试其他网络方法(首先尝试使用 netcat(查看第一个命令的手册页,某些发行版不需要“-p”标志)

pc 1: nc -l -p 12345 > /your/raid/file
pc 2: cat /some/big/file | nc ip.of.pc.1 12345

我在使用 ssh 进行 rsync 时遇到了速度很慢的问题(千兆链路上的速度为 12-15MBps,但 PC 的速度相对较慢)。

当您知道问题出在磁盘还是 rsync/ssh 速度上时,您就可以继续调试。

答案3

BackupPC 是 I/O 密集型程序,会导致大量磁盘寻道。对于低端硬件,您能做的事情有限,但请尝试以下操作:

优化 BackupPC 本身

  • 最大并发备份和管理操作数对 BackupPC 性能影响巨大。设置过高,您的低端硬件(甚至是昂贵的硬件...)就会停滞不前。设置过低,您的硬件功能就无法发挥到极致。对于商用硬件,尝试 2 到 6 个并发备份,看看哪种方法适合您。

  • 如果不需要,请禁用 BackupPC 池压缩。

  • 即使 BackupPC Perl rsync 库没有充分利用 rsync v3.x,也请确保您正在使用 rsync v3.x。

优化服务器

  • 确保选择正确的 I/O 提升器。对于 RAID 和大量并发,默认设置cfq可能是一个糟糕的选择;大多数时候 RAID 控制器更了解情况,并且noop表现良好。对于某些工作负载和廉价的 RAID 控制器deadline也可以表现良好。

  • 我知道您不想更改文件系统,但我发现XFSBackupPC 的效果非常好。(买家须知:我的硬件非常好)

  • 如果您为 BackupPC 提供足够的 RAM,它也会回报您的厚爱。您的服务器有多少 RAM?越多越好;如果服务器可以将大多数目录结构保存在内存中,BackupPC 的读取操作会快得多,因为它们不需要访问物理磁盘。

如果我是你,我会首先升级服务器 RAM,并检查 BackupPC 设置。如果这些还不够,那么我会修改文件系统和 RAID 设置。

答案4

因此,您怀疑随机读取性能是问题所在。解决方案是获取具有更好 IOPS 的存储(SSD、转速更高的 HDD 或具有更多主轴的 RAID)。如果工作集(inode 缓存)适合内存,则更多 RAM(缓存)也会有所帮助。

有一件事需要验证一下。查看 dstat 输出和 iotop 输出。还要检查 backuppc 的文件系统是否以 relatime 或 noatime 方式挂载,这样每个文件访问都不会转化为写入。

相关内容