rsync – 在两台远程计算机之间复制大文件 – 高效
我有一个
shell脚本,它不断在远程系统之间复制大文件(2 GB到5 GB).
基于密钥的身份验证与代理转发一起使用,一切正常. 例如:假设shell脚本在机器A上运行并将文件从机器B复制到机器C. "scp -Cp -i private-key ssh_user@source-IP:source-path ssh_user@destination-IP:destination-path" 现在问题是进程sshd不断占用CPU负载. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 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/ 这导致高负载平均值. 我相信scp因为加密/解密数据而占用了大量CPU.但我不需要加密数据传输,因为机器B和机器C都在局域网中. 我还有其他选择吗?我认为’rsync’.但是rsync手册页说: GENERAL Rsync copies files either to or from a remote host,or locally on the current host (it does not support copying files between two remote hosts). 编辑1:我已经在使用ssh cipher = arcfour128.虽然改善不大,但这并没有解决我的问题. 编辑2:在机器上运行的其他二进制文件(我的主应用程序)和高负载平均值导致它们表现不佳. 解决方法
使用rsync可以解决此问题.至少这种解决方案在性能方面应具有竞争力.
首先,可以从其中一个远程系统调用rsync,以克服无法直接在两个远程系统之间进行复制的限制. 其次,通过在守护程序访问模式而不是远程Shell访问模式下运行rsync,可以避免加密/解密. 在守护程序访问模式下,rsync不会通过ssh连接隧道传输流量.相反,它在TCP之上使用自己的协议. 通常,您从inet.d或独立运行rsync守护程序.无论如何,这需要root访问其中一个远程系统.假设根访问不可用,仍然可以启动守护程序. 将rsync守护程序作为目标计算机上的非特权用户启动 ssh -i private_key ssh_user@destination-IP "echo -e 'pid file = /tmp/rsyncd.pidnport = 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" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |