转自
http://engineering.tumblr.com/post/7658008285/efficiently-copying-files-to-multiple-destinations
需求:从一个源主机local-server拷贝out-1.ogv到两个目的地(或多个),remote-1.jpuyy.com和remote-2.jpuyy.com。不需要安全加密传输。
平常的操作是从local-server先拷到remote-1,再拷到remote-2,需要两倍时间。如果同时拷,因为local-server的上传带宽要分给两个上传用,所以还是需要两倍的时间。如果你的文件是好几百GB,几TB,那么将等的非常痛苦。
现在的方法是将local-server与remote-1和remote-2串接起来,形成一个链,由local-server发送最大带宽到remote-1,remote-1接到后不仅自己存,也同时最大带宽传给remote-2,如果还有更多的主机可继续接上。
首先在最后一台主机(这里是remote-2)上运行
nc -l 1234 | pigz -d | tar xvf -
然后在链上的点(这里是remote-1)上执行
mkfifo myfifo nc remote-2.jpuyy.com 1234 <myfifo & nc -l 1234 | tee myfifo | pigz -d | tar xvf -
现在链接打通了,只需要在local-server上向第一台机传送
tar cv out-1.ogv | pigz | nc remote-1.jpuyy.com 1234
这样这条链上的所有主机几乎同时接收,就达到了我们的目的,节省了时间。
Leave a Reply