我正在运行一个 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
也可以表现良好。我知道您不想更改文件系统,但我发现
XFS
BackupPC 的效果非常好。(买家须知:我的硬件非常好)如果您为 BackupPC 提供足够的 RAM,它也会回报您的厚爱。您的服务器有多少 RAM?越多越好;如果服务器可以将大多数目录结构保存在内存中,BackupPC 的读取操作会快得多,因为它们不需要访问物理磁盘。
如果我是你,我会首先升级服务器 RAM,并检查 BackupPC 设置。如果这些还不够,那么我会修改文件系统和 RAID 设置。
答案4
因此,您怀疑随机读取性能是问题所在。解决方案是获取具有更好 IOPS 的存储(SSD、转速更高的 HDD 或具有更多主轴的 RAID)。如果工作集(inode 缓存)适合内存,则更多 RAM(缓存)也会有所帮助。
有一件事需要验证一下。查看 dstat 输出和 iotop 输出。还要检查 backuppc 的文件系统是否以 relatime 或 noatime 方式挂载,这样每个文件访问都不会转化为写入。