优化RAID 5的BackupPC使用(小随机读取)

我正在运行一个备份主存储器的硬件​​RAID 5的BackupPC服务器。 由于该机器的预算很小,所以控制器是用于PCI端口的3Ware 9500S-4LP,驱动器是200GB SATAtypes。

但是,即使使用这个硬件,我的性能也比预期的差得多。 客户端和备份服务器使用rsync作为通过千兆networking的传输,甚至不会接近饱和。 备份大约5 GB的正常Linux安装需要三个多小时。

所以我使用atop进程监视器来监视服务器。 这表明处理器和内存的使用都不重要,但是对RAID的读访问是瓶颈。

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

顺便说一下,虽然这是一个备份服务器,但使用rsync意味着读取的数量要比写入数量多得多,大约是目前的1000倍。 我想在BackupPC的旧备份层次结构中移动和链接较旧的文件也会对此产生很大的影响。

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

  • 与BackupPC使用不同的传输(tar是一种替代scheme)
  • 将数组的文件系统从ext4(noatime)更改为其他内容
  • 更改RAID级别(最好不要,由于数据丢失)
  • 用不同的条带大小重新创buildarrays(最好不要,由于数据丢失)
  • 增加更多的内存用作缓冲区caching
  • 增加第二个控制器和更多的驱动器(是的,我有那些)
  • 更改控制器(最好不要,由于财务限制)
  • 更改所有驱动器(最好不要,由于财务限制)

这里有一个小小的随机IO引子:7200RPM的磁盘驱动器可以做大约100个IOPS。 15k RPM的驱动器提高了一倍,大约为200 IOPS。 使用RAID-5arrays时,可达到的最佳IOPS是驱动单个驱动器性能的数据驱动器数量; 因为您拥有3个数据驱动器,您将获得的最佳可持续价值是300 IOPS。

备份运行时使用iostat -mx 5 。 如果在300范围内看到许多读取或写入操作(第三和第四列),则基本上已经超出了您的设置。

注意:大多数现代SSD驱动器达到20000 IOPS。 RAID-1中的一对SSD可以把一个装满旋转锈的机架弄丢。 SSD改变了一切。 在面临IOPS问题时,99%的解决scheme称为“SSD”。

如果您目前没有将您的RAIDarrays输出最大化,那么您可以执行以下几项操作:

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

    echo 512> / sys / block / sda / queue / nr_requests

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

    echo'noop'> / sys / block / sda / queue / scheduler

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

  • 或者,尝试运行与数据驱动器一样多的线程。 这可能会提高整体performance。

首先尝试在本地searchRAID性能,看看它是否真的是突袭问题。 你甚至可以使用:

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

然后〜10秒后

 killall -SIGUSR1 dd 

在另一个terminal上查看本地写入速度。 如果速度够好的话,可以尝试其他的networking方法(先用netcat试试(查看第一个命令的man page,有些distos不需要'-p'标志)

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

我用rsync通过ssh的速度很慢(在千兆链路上是12-15MBps,但是在相对较慢的PC上)。

在知道问题出在磁盘上还是与rsync / ssh速度相同后,您可以继续debugging。

BackupPC是非常I / O密集型程序,可能会导致大量的磁盘search。 对于低端硬件,只有这么多才能做到,但请尝试以下方法:

优化BackupPC本身

  • 并发备份和pipe理操作的最大数量是BackupPC性能的一个重要因素。 设置太高,你的低端硬件(或者甚至是昂贵的硬件)嘎然而止。 设置太低,你没有最大化你的硬件function。 随着商品硬件尝试2到6个并发备份之间的任何事情,看看什么适合你。

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

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

优化服务器

  • 确保你select了一个正确的I / O电梯。 有了RAID和大量的同意,默认的cfq可能是一个糟糕的select; 大多数情况下,RAID控制器更好地了解事情,而noop可以很好。 有了一定的工作负载和RAID控制器的deadline也可以。

  • 我知道你不想改变文件系统,但是我发现XFS在BackupPC方面performance出色。 (注意:硬件在我的情况是相当不错的)

  • BackupPC爱你回来,如果你给它足够的内存。 你的服务器有多lessRAM? 越多越好; 如果服务器可以将大部分的目录结构保存在内存中,BackupPC所做的读取操作要快得多,如果不需要打开物理盘片。

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

所以你怀疑随机读取性能是问题。 解决scheme是获得更好的IOPS(SSD,更高转速的HDD或更多主轴的RAID)的存储。 如果工作集(inodecaching)适合内存,则更多RAM(caching)也可以提供帮助。

有一件事将是validation这是事实。 看看dstat输出和iotop输出。 还要检查backuppc的文件系统是否安装了relatime或noatime,以便每个文件访问都不会转换为写入。