为了账号安全,请及时绑定邮箱和手机立即绑定

怎样通过网络在两台Linux之间倒数据

标签:
Linux

Why

在服务器之间倒腾数据是运维工作的常见场景,这个运维的同行们应该都心有戚戚焉吧,比如要把一台服务器上的服务迁移到另外一台服务器上、比如这个服务又新上一台服务器,需要把数据从老服务器上同步过来一份,类似的需求是不是感觉经常碰到呢?

How

  1. scp

  2. rsync

  3. sftp

  4. nc

  5. socat

  6. ......

以上几种方法中:

  • scpsftp其实都还是走的ssh,走这种方式服务器有加密、解密的负载,所以比较耗cpu资源,为了减轻cpu负载,可以选用轻一点的cipher比如arcfour。这种方式比较适合于一次性的拷贝不太大的单个文件。

  • rsync可以走自有协议,也可以走ssh通道。不管那种,都可以用于“同步”数据的场景。

    • 如果走自有协议的话,速度很不错。只不过需要先配置服务器和客户端

    • 如果走ssh的话,会一样碰到加解密耗cpu的问题。

  • nc(netcat)和socat在这里是类似的思路,只是socat号称是比nc(netcat)更瑞士军刀的瑞士军刀:)

总结一下:

  • 如果文件很多、数据量很大的场景下,我推荐用tar+socat的方案,代码如下:

# server A & server B上都要执行yum -y install tar socat;# server A(ip:1.1.1.1)上执行cd dest_path;
socat tcp4-listen:11111 stdout | tar xvpf -# server B上执行cd src_path;
tar cvf - files | socat stdin tcp4:1.1.1.1:11111# server B上的src_path/files==>server A的dest_path/files# 在千兆环境下,拷贝速度可以稳定达到800M以上。
  • 如果是单个的大文件,直接socat即可,代码跟上面类似

  • 如果不追求性能和速度,scp即可,代码略

思考

  • 如果网络带宽不大而且没有加密需求的话,可以给tar启用压缩,格式用性能最好的xz

# server A & server B上都要执行yum -y install tar socat xz;# server A(ip:1.1.1.1)上执行cd dest_path;
socat tcp4-listen:11111 stdout | tar xJvpf -# server B上执行cd src_path;
tar cJvf - files | socat stdin tcp4:1.1.1.1:11111# 在千兆环境下,拷贝速度只有10M(压缩后)左右。
  • 如果从命令行简洁程度来讲,还不如直接用nc呢。:)

# server A & server B上都执行yum -y install nc;# server A(ip:1.1.1.1)上执行cd dest_path;
nc -l 11111 | tar xv# server B上执行cd src_path;
tar cvf - files | nc 1.1.1.1 11111



作者:haw_haw
链接:https://www.jianshu.com/p/71f77ba50975


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消