更有效的复制一个文件到多台机器

从tumblr那儿发现的,原文:
http://engineering.tumblr.com/post/7658008285/efficiently-copying-files-to-multiple-destinations

从原服务器拷贝一个文件到多个服务器,串行方式浪费时间,并行则会受限于自己网络流量上限。
解决思路是将所有目标服务器形成一个“链”,每个节点向下一个节点传递数据。将单个服务器网卡流量限制问题,分摊到了每个节点上。

在最后一台服务器上:

$ nc -l 1234 | pigz -d | tar xvf -

在之前的服务器上:
1) 建立有名管道:

$ mkfifo myfifo 

2) 将有名管道中的数据传到后续的节点

$ nc hostname_of_next_box 1234 <myfifo & 

3) 用过nc接受数据,并用tee同时传递给有名管道

$ nc -l 1234 | tee myfifo | pigz -d | tar xvf - 

对源文件进行压缩传输:

$ tar cv some_files | pigz | nc hostname_of_first_box 1234 

注释:
pigz命令,用来替代gzip的多线程版本,在多核机器上会更充分利用CPU
eg:

$ pigz -kK a.jpg 

(大K表示压缩,小k表示保留原始文件,否则处理完原始文件将被删除)

发表评论

电子邮件地址不会被公开。 必填项已用*标注