如何减少 rsync 备份期间的 IO 等待时间?

如何减少 rsync 备份期间的 IO 等待时间?

我的情况如下:网络中有一组机器(NAS 和其他“服务器”)。还有一台额外的机器用于备份。它使用 rsync 定期从所有 4 台机器收集数据并创建增量备份。备份是拉式的,所有脚本都使用 运行ionice -c idle nice -19。为了监督整个系统的稳定性,所有 Linux 机器上都安装了监控系统 (munin)。Munin 每隔 10 分钟查看一次不同的系统变量和状态,并在出现问题/警告时发送电子邮件。

每天晚上备份结束时(特别是在对最大的机器进行长时间备份之后),munin 都会抱怨磁盘延迟过高。 Munin 图 我已经提高了可接受的限制,但此类备份结束时的 IO 等待时间仍为 10 秒或更长。在我看来,这似乎相当高。

备份脚本是我自己写的。我需要一种与程序 rsnapshot 类似的方法,但需要进行一些小的修改。因此我自己创建了它(功能少得多)。实际上,它将rsync远程计算机保存到其他备份旁边的临时文件夹中,然后相应地轮换/删除旧备份。根据我目前的研究,问题发生在写入新备份(主要是硬链接)或轮换/删除备份时。我无法确切地说出问题出在哪里,因为 munin 的粒度只有 10 分钟。

备份的目标位于抽象层链上:物理分区收集在一个大型 RAID5 阵列 (mdadm) 中。该md设备用作 LVM PV。VG 内部是一个大型分区(除其他未加密分区外),该分区使用 LUKS 加密,其中驻留着第二个 LVM,允许将存储分配给不同的分区。

网络上的任何研究主要都指向这一层引入的网络连接和延迟问题。虽然我的备份也是通过网络完成的,但这里的问题是备份服务器上的本地性能。

我目前所做的:

  • 降低脏页比例,使磁盘尽早写入数据,避免出现卡顿。
  • 由于大多数数据在运行之间保持不变,因此--bwlimit不会有帮助,因为硬链接是在接收方本地创建的。对吗?
  • 我认为分区未对齐或 RAID 块大小不匹配可能会导致此类问题。虽然我不知道如何验证。
  • 整个脚本从 运行cron。我添加了ionice/nice但没有什么大的区别。
  • atop在机器上安装了它来查看其他进程。我没有看到任何异常(除了在备份的最后阶段,大多数时间 iowait CPU 为 100%)。

现在我想问几个问题:

  • 谁能告诉我可能是什么问题?
  • 这可能只是测量的问题吗?我的意思是备份机器上没有其他负载。可能是因为没有其他进程在运行,所以该rsync进程会耗尽任何 io 操作?因此,如果有另一个进程,它将首先得到服务,但由于没有进程,磁盘使用率很高,并且对于这个rsync进程来说,写入延迟非常高(这是可以接受的)。
  • 我不知道问题出在哪里了。您能给我一些建议,告诉我如何进一步追踪问题吗?

为了清楚地表达我的观点:我非常清楚,在写入文件/创建链接时,备份会给系统(尤其是磁盘)带来相当大的负担。

如果您需要更多信息,请告诉我您的需求。

相关内容