• 欢迎访问蜷缩的蜗牛博客 蜷缩的蜗牛
  • 微信搜索: 蜷缩的蜗牛 | 联系站长 kbsonlong@qq.com
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

大规模集群下使用P2P技术软件(Murder)分发大文件

大数据 lxw1234@qq.com 2个月前 (07-22) 18次浏览 已收录

一般情况下,在运维多台服务器的时候,使用 Ansible 来完成文件的分发和命令的执行。但如果运维的机器数量多,而且内网带宽有限的情况下,比如,需要向 500 台机器分发一个 1G 大小的升级包,这时候如果使用 Ansible 直接分发,那么肯定会引起带宽占满,导致 SSH 链接超时,Ansible 执行卡死,分发任务执行失败。

那么对于这种大文件的大规模分发,能想到的好的解决方案就是利用 P2P 网络实现,节省带宽,提高效率。关于 p2p 网络,大家可以自行搜索,典型的代表就是 BitTorrent(BT 下载)。

这里介绍的 P2P 文件分发的软件是 Twitter 开源的 Murder。早期 Twitter 每次版本更新,需要向上万台服务器分发代码,从中央服务器向那么多台服务器上分发文件,服务器越多,分发时间越长。后来 Twitter 研发了 Murder,用来解决这个问题,以前需要 40-60 分钟完成的代码发布任务,使用 Murder 之后,只需要几十秒就可以完成。

大规模集群下使用 P2P 技术软件(Murder)分发大文件

murder

大规模集群下使用 P2P 技术软件(Murder)分发大文件

murder

大规模集群下使用 P2P 技术软件(Murder)分发大文件

murder

Murder 的架构

大规模集群下使用 P2P 技术软件(Murder)分发大文件

murder

整个 Murder 由三个组件构成:

  • Tracker

它是运行在一台服务器上的单个服务,用来根据哪些 torrent 文件正在被分发,以及管理和维护 Peer 节点的信息和状态。

  • Seeder

存放需要向其他主机分发的文件的服务器。Seeder 将要分发的真实文件制作成 torrent,这个 torrent 文件很小,只存放关于真实文件的基本 Hash 信息,torrent 文件需要先分发到要下载文件的服务器(peer)上。

  • Peer

就是要接收文件的服务器,他们之间可以互相传输文件。

Murder 的使用示例

我这里有 4 台服务器,角色分别如下:

tracker  192.168.1.220

seeder  192.168.1.220

peers   192.168.1.222、192.168.1.228、192.168.1.229

Tracker 和 Seeder 在同一服务器上。

1.    下载和部署 Murder

https://github.com/lg/murder下载 zip 包,并解压到/opt 目录下;

在所有的服务器(Tracker、Seeder、Peers)上,将 Murder 部署在/opt 目录下,部署后的目录为:/opt/murder-master

2.    启动 Tracker 服务

在 Tracker 服务器上执行:

cd /opt/murder-master/dist

nohup python murder_tracker.py –port 8998 –dfile data –logfile urder_tracker.log &

 

–port tracker 监听的端口,默认是 8998

–dfile  存储近期下载信息的文件

–logfile  tracker 日志文件,默认是标准输出

3.    在 Seeder 服务器上准备好要分发的文件,并创建种子

Seeder服务器上,要分发的文件:

[liuxiaowen@test04v ~/lxw]$ du -h /home/liuxiaowen/lxw/test.tar.gz

3.1G    /home/liuxiaowen/lxw/test.tar.gz

制作种子:

cd /opt/murder-master/dist/

python murder_make_torrent.py /home/liuxiaowen/lxw/test.tar.gz 192.168.1.220:8998 /tmp/test.tar.gz.torrent

其中,第一个参数为要分发的文件;第二个参数为 Tracker 服务器的地址和端口;第三个参数为 torrent 文件路径。

将种子文件分发至Peers

用 Ansible 将很小的 torrent 文件,分发至所有 peers 节点,关于 Ansible 的使用,请自行搜索,你也可以使用 SCP。

ansible myhosts -m synchronize -a “src=/tmp/test.tar.gz.torrent dest=/tmp/”

启动Seeder服务:

cd /opt/murder-master/dist/

python murder_client.py seed /tmp/test.tar.gz.torrent /home/liuxiaowen/lxw/test.tar.gz 192.168.1.220

最后一个 IP 是 Seeder 服务器本机 IP。

4.    在 peer 节点执行下载

单个节点下载:在 peer 节点上,

cd /opt/murder-master/dist/

python murder_client.py peer /tmp/test.tar.gz.torrent /tmp/test.tar.gz 192.168.1.220

单台当然不能体现 Murder 的优势了,使用 Ansible 命令,在多台 Peer 节点上同时下载:

ansible myhosts -m shell -a “python /opt/murder-master/dist/murder_client.py peer /tmp/test.tar.gz.torrent /tmp/test.tar.gz 192.168.1.220″

 

PS:这种 P2P 分发,在大规模服务器环境下才能体现出优势,节点越多,分发任务消耗的整体时间越短。。

 

 

如果觉得本博客对您有帮助,请 赞助作者

转载请注明:lxw 的大数据田地 » 大规模集群下使用 P2P 技术软件(Murder)分发大文件


蜷缩的蜗牛 , 版权所有丨如未注明 , 均为原创丨 转载请注明大规模集群下使用 P2P 技术软件(Murder)分发大文件
喜欢 (0)
[]
分享 (0)