multithreadingRsync传输

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

rsync -v –progress -e ssh /backup/mysqldata/mysql-bin.000199 [email protected]:/secondary/mysqldata/mysqldata/mysql-bin.000199

我有超过800 GB的数据传输拆分500个左右的文件所有开始:

的mysql-bin.000 *

我发现,从独立的SSH窗口同时运行25-30 rsync使我获得了25 MB /秒以上的速度,但是需要几个小时才能手动运行这些。

无论如何,从单个rsync命令获得25 MB /秒?

OpenSSH的窗口大小限制对于高延迟连接并不是非常友好,因而臭名昭着。 要确定所需吞吐量的最小窗口大小(让我们暂时忽略其他开销):

Window size = throughput * latency 

因此,如果您希望在25毫秒的延迟(0.025秒)内达到25MB /秒(200,000,000比特/秒):

 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进行了修复的),或者安装了修补HPN-SSH ,以解决这些问题。
  • 尝试使用较轻的SSH选项(例如arcfour)

根据压缩是否打开,SSH的性能可能会有很大的不同。