酷徒LOGO

如何使远程服务器的~2M 文件的rsync对定期备份具有性能


问题:

我们在远程服务器上有大量的文件,我想为本地系统设置常规备份,以备额外的冗余。 一些细节:

  • 远程系统不在我的控制中。 我只有 ssh/rsync或者FTP访问
  • 远程系统运行 rsync 2.6.6,无法升级
  • 远程系统允许最大 25个并发连接和 5为生产需要保留( 因此,20可用)
  • 远程系统包含 2M 个文件,其中大多数文件大小为 100 -200K
  • 文件存储在层次结构中

类似于:


0123456789/


 0123456


 abc/


 1.fff


 2.fff


 3.fff


 xyz/


 9.fff


 8.fff


 7.fff


9877656578/


 5674563


 abc/


 1.fff


 2.fff


 3.fff


 xyz/


 9.fff


 8.fff


 7.fff



有 10个以上的root 文件夹,只包含一些内部文件夹/文件结构- 但所有 root 文件夹仅数字( 0 -9 )。

我第一次用一条直线来运行它,它took了。 由于远程服务器位于 rsync 2.6.6上,因此不能使用 3. x. x 中的增量文件功能,这是一部分原因。 编译文件列表需要 12小时的时间- 每 10秒运行大约 500个文件。 因为初始运行需要重新下载,所以我预计后续运行不会花费太长时间- 但是,即使是文件清单太长了,也要重新下载。

文件夹命名被分解为:


$ ls | grep"^[^67]" | wc -l


295


$ ls | grep"^6" | wc -l


14167


$ ls | grep"^7" | wc -l


14414



通过使用来运行这个 rsync -aWP --delete-during,我已经测试了它,我同时运行了2 个并发 0* 1* 2* 3* 4* 5* 8* 9* 对于 6和 7我使用 60* - 69*70*-79*,因为层次结构中的文件夹首当其冲以 6 或者 7 ( 每个 6?* 或者 7?* 大约 1400 ) 开始。

这不是一个 6或者 7,需要大约 5分钟的时间,总的。 6/7 目录( 在 1/10ths) 中分解为 15分钟)。

除了运行这个作业,我必须运行 28个并发 rsync,这将消耗可以用的连接计数。

有人推荐另一种类型的rsync 或者我可以添加的它的他选项,以防止这不在 rsync 2.6.6的界限中使用?

在这个外部提供程序中,我们只需要付出的代价,所以我们只需要发送一些需要发送的东西,无需再发送任何信息。


回答 1:

经过初始同步时间 40小时下载并同步所有数据,随后的扫描和同步相同数据( 只是为了 in ) 只需要 6.5小时。 用于运行 rsync的命令是:


rsync -a --quiet USER@REMOTE_SERVER:ROOT/FOLDER/PATH//LOCAL/DESTINATION



我认为下载的最初时间是双重的:

  • 初始数据集是 270GB 和 ~2M 文件,这是很大的扫描和下载( 在我们的例子中,我们有 100mbit 个同步连接。

  • 我在初始同步上启用了-P选项和-v选项,这导致大量本地控制台聊天显示同步和进度信息。

  • 所以,这里的答案:只使用没有太多详细选项( 理想的--quiet )的rsync,它是非常有效的。


回答 2:

这是我个人所做的- 有两种不同的解决方案。

变化 1 - 简单的bruteforce选项:

2M * 200KB 大约为 400,因此每次可能都不可能使用完整快照。 如果可能,简单解决方案将是执行以下操作:

ssh <remote host> 'tar -c/directory/to/backup | <gzip/xz/lz4>'> backup.tar.<gz/xz/lz4>

如何将所有这些文件转换成一个跨管道的单个流,而不是枚举数百万的文件。

从那里,我将使用borg来对沥青球进行 deduplicate,以便有效地存储多个版本。 这是一个很常见的小文件管道的常见技巧。 缺点是你不能执行RSync所执行的重复数据删除。

如果 400GB 间隔太大,我将考虑以下事项:

变化 2 - 明智的选择。

除了为每个顶级目录创建tarball并对备份服务器上的现有文件进行比较外,你可以执行以下操作。 如果是不同的,转移它,否则不要做任何事情。


回答 3:

2M文件意味着大量的元数据,因此,由于本地和远程需要遍历所有元数据,所以 rsync 运行速度很慢。

你应该最大化 RAM,并且理想运行 rsync 版本> 3.x,不能在远程端更新 rsync,但是不能更新 RAM。

最后一个尝试是对metadata本地和远程的元数据缓存进行优先级设置。 在修改上参数之后,可以尝试设置 vfs_cache_pressure=10,至少运行2 次,然后比较第二次运行性能。






Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备17041772号-2  |  如果智培  |  酷兔英语  |  帮酷