Think before you speak, read before you think.

同时向多个目标主机高效传输文件

转自

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

这样这条链上的所有主机几乎同时接收,就达到了我们的目的,节省了时间。


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *