同时运行多个 scp 线程

同时运行多个 scp 线程

同时运行多个 scp 线程:

背景:

我经常发现自己经常镜像一组服务器文件,这些服务器文件中包括1kb-3kb 的小文件。所有服务器都连接到 1Gbps 端口,通常分布在各种数据中心。

问题:

SCP 逐个传输这些小文件,需要很长时间,我觉得我正在浪费我拥有的美好网络资源。

解决方案?:

我有个主意;创建一个脚本,将文件分成相等的部分,然后启动 5-6 个 scp 线程,理论上这样可以快 5-6 倍,不是吗?但我没有任何 Linux 脚本编写经验!

问题):

  • 对于上述问题有没有更好的解决办法?
  • 是否已经存在类似的东西?
  • 如果没有的话,有谁可以给​​我一个机会或者帮助我吗?
  • 如果不是 2 或 3,哪里是开始学习 Linux 脚本的好地方?比如 bash 或其他。

答案1

我会这样做:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

根据您传输的文件,在tar命令中启用压缩是有意义的:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

为该命令选择对 CPU 更友好的密码可能也有意义ssh(例如 arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

或者将两者结合起来,但这实际上取决于你的瓶颈是什么。如果你进行增量同步,
显然rsync会快得多。

答案2

使用rsync而不是scp。您可以像 一样轻松rsync地使用,并且它支持“文件传输的流水线化以最大限度地降低延迟成本”。sshscp

提示:如果数据可压缩,请启用压缩。如果不可压缩,请禁用压缩。

答案3

我正要建议 GNO平行线(这仍然需要你编写一些脚本),但后来我发现 pscp(它是密码)。这可能正好满足您的需要。

答案4

可能不相关,但如果你想要更实时的东西,你可以尝试集群文件系统。效果很好,但如果您想高效地读取小文件,则需要进行一些调整。

相关内容