我有一个shell脚本不断复制远程系统之间的大文件(2 GB到5 GB)。 基于密钥的身份validation与代理转发一起使用,一切正常。 例如:假设shell脚本正在machine-A上运行,并将文件从machine-B复制到machine-C。
“scp -Cp -i私钥ssh_user @ source-IP:源pathssh_user @ destination-IP:目的path”
现在的问题是sshd正在不断的加载CPU。
例如:目标机器上的顶级-c(即machine-C)显示
PID用户PR NI VIRT RES SHR S%CPU%MEM时间+命令 14580 ssh_user 20 0 99336 3064 772 R 85.8 0.0 0:05.39 sshd:ssh_user @ notty 14581 ssh_user 20 0 55164 1984 1460 S 6.0 0.0 0:00.51 scp -p -d -t / home / binary / instances / instance-1 / user-2993 /
这导致高负荷平均值。
我相信因为它的encryption/解密数据,scp需要这么多的CPU。 但是我不需要encryption的数据传输,因为机器B和机器C都在局域网中。
我还有什么其他的select? 我认为'rsync'。 但是rsync手册页说:
一般
Rsync将文件复制到远程主机,或从当前主机本地复制文件(它不支持在两者之间复制文件
远程主机)。
编辑1:我已经使用ssh cipher = arcfour128。 没有什么改善,但这并不能解决我的问题。
编辑2:还有其他的二进制文件(我的主要应用程序)在机器上运行,高负载平均导致它们performance不佳。
这个问题可以用rsync解决。 至less这个解决scheme应该在性能方面具有竞争力。
首先,可以从一个远程系统调用rsync来克服无法在两个远程系统之间直接复制的限制。
其次,通过在守护进程访问模式而不是远程Shell访问模式下运行rsync ,可以避免encryption/解密。
在守护进入模式下, rsync不会通过ssh连接传输stream量。 而是在TCP之上使用自己的协议。
通常你从inet.d或者独立运行rsync守护进程。 无论如何,这需要根访问到其中一个远程系统。 假设根访问不可用,仍然可以启动守护进程。
作为目标机器上的非特权用户启动rsync守护程序
ssh -i private_key ssh_user@destination-IP \ "echo -e 'pid file = /tmp/rsyncd.pid\nport = 1873' > /tmp/rsyncd.conf ssh -i private_key ssh_user@destination-IP \ rsync --config=/tmp/rsyncd.conf --daemon
其实复制文件
ssh -i private_key ssh_user@source_ip \ "rsync [OPTIONS] source-path \ rsync://ssh_user@destination-IP:1873:destination-path"
最less的解决scheme是使用netcat:
destination$ nc -l -p 12345 > /path/destinationfile source$ cat /path/sourcfile | nc desti.nation.ip.address 12345
(某些netcat版本不需要端口的“-p”标志)
所有这一切都是发送未encryption的数据,未经身份validation通过networking从一台电脑到另一台。 当然,这不是最“舒适”的做法。
其他的替代方法是尝试改变SSH密码(ssh -c)或使用FTP。
PS: rsync与远程机器正常工作,但它主要与ssh结合使用,所以在这里没有加速。
如果encryption不是问题,请在C上抛出一个NFS守护进程,并将目录挂载到B 。 使用rsync在B运行,但指定本地目录path。
忽略涉及到A用例,只要在命令前加上ssh user@B rsync...即可。
传输数据不encryption开销,只传输不同的文件。
此外,FTP是使用第三方服务器到服务器传输作为协议function构build的。
您可以使用低encryption方法:您可以使用rsync --rsh="ssh -c arcfour"来提高速度。 我的testing,我正在等磁盘,没有更多的networking连接。 而使用rsync,这是好的!
尝试一致。 是同步文件的最佳select。
也许你会发现这个有趣的http://rightsock.com/~kjw/Ramblings/tar_v_cpio.html 。
它并行化两台主机之间的数据传输。 要特别注意点nr。 5,并根据您的需要进行相应调整。
我知道这需要一点点工作,但DRDB会为你工作吗? 就像一个基于networking的RAID,如果情况和你的情况类似,至less如果你只需要服务器A复制到服务器B,而不是从B复制到A,那么保持两台服务器同步就容易多了。