同时运行多个scp线程

同时运行多个scp线程:

背景:

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

问题:

SCP将这些小文件一个接一个地传输,这需要很长时间,我觉得我正在浪费我拥有的美丽的networking资源。

解?:

我有一个想法, 创build一个脚本,将文件分成相等的数量,并启动5-6个scp线程,理论上可以快5到6倍,不是吗? 但我没有任何Linux脚本的经验!

问题(S):

  • 有没有更好的解决scheme来解决上述问题?
  • 有没有这样的东西已经存在?
  • 如果没有,是否有人会给我一个开始,或帮助我?
  • 如果不是2或者3,那么在哪里开始学习linux脚本是一个好的开始? 像bash或其他。

使用rsync而不是scp 。 您可以像使用scp一样方便地使用rsync ,而且它支持“文件传输的stream水线处理,以最小化延迟成本”。

一个提示:如果数据是可压缩的,启用压缩。 如果不是,请禁用它。

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

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

你也可以为ssh命令select一个CPU友好的密码(比如arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles' tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

或者将两者结合起来,但这取决于你的瓶颈。
显然,如果你正在做增量同步, rsync会快很多。

我正要build议GNO 并行 (你仍然需要一些脚本工作),但是后来我find了pscp(这是pssh的一部分)。 这可能只是适合你的需要。

可能不相关,但如果你想要更实时的东西,你可以尝试GlusterFS 。 运作良好,但需要一些调整,如果你想有效地阅读小文件。

不直接scp,但multithreading传输(即使在单个文件)的选项是bbcp – https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp

对于要传输数据的线程数使用-s选项。 非常适合高带宽但滞后的连接,因为延迟限制了每个线程的TCP窗口大小。