多线程 Rsync 传输

多线程 Rsync 传输

出于某种原因,当运行单个 rsync 命令时,即使我连接 2 台都连接到 1 Gbps 端口的服务器,速度也会达到 1 MB/秒到 2 MB/秒。

rsync -v --progress -e ssh /backup/mysqldata/mysql-bin.000199 [电子邮件保护]:/secondary/mysqldata/mysqldata/mysql-bin.000199

我有超过 800 GB 的数据需要传输,分为 500 个左右的文件,所有文件均以以下内容开头:

mysql-bin.000*

我发现从单独的 SSH 窗口同时运行 25-30 个 rsync 可以使我的速度达到 25 MB/秒以上,但手动运行这些操作需要几个小时。

有没有办法通过一个 rsync 命令获得 25 MB/秒的速度?

答案1

OpenSSH 因窗口大小限制而臭名昭著,这对于高延迟连接来说不太友好。要确定所需吞吐量的最小窗口大小(暂时忽略其他开销):

Window size = throughput * latency

因此,如果您想要 25MB/秒(200,000,000 位/秒)的速度,并且等待时间为 25 毫秒(0.025 秒):

Window size = 200,000,000 * 0.025 = 5000000.0 bits

除以 8,大约是 625KB 窗口。让我们翻转一下,看看您的延迟的 64KB 窗口(许多版本的 OpenSSH 中的内部上限):

throughput = 512000 bits / 0.025s latency = 20480000.0 bits/sec = ~2.5MB/sec

这与您看到的非常接近(您可能还有一些其他开销。)

因此,我将按以下顺序检查:

  • 确保你的操作系统有TCP 窗口大小设置合理,并启用自动缩放
  • 确保你使用的 SSH 版本没有固定的内部窗口大小(我相信这个问题在 OpenSSH 4.7 左右已经修复)或者安装抗凝血酶,已对这些问题进行了修补。
  • 尝试使用更轻量的 SSH 选项(例如 arcfour)

答案2

根据是否启用压缩,SSH 性能可能会有很大差异。

相关内容