linux p2p共享文件,秋明 | linux下利用P2P软件(Murder)分发大文件实验

Murder 组件介绍

Murder 是基于 BitTornado 来实现的。有以下几个主要组件:

torrent tracker :tracker 使用 murder_tracker.py 运行,tracker 实际上是运行中一台服务器上的单个服务,其他任何成员都要依赖它。Murder为了保持简单,并没有实现tracker-less distribution(DHT)功能。tracker 实际上是个迷你的 httpd 服务,存放着BitTorrent客户端需要更新状态的路径。

seeder :sender 是存放要分发到其他主机的文件的服务器。这些文件存放在 seeder 的一个目录中,Murder 会将这个目录打包成 tgz 格式并创建一个 .torrent 文件(非常小的文件,包含有关这个tgz文件的基本hash信息)。这个 .torrent 文件让各个 peer 节点知道他们下载的是什么文件。同时,tracker 会保持跟踪有哪些 .torrent 文件正在被分发。一旦 Murder 开始传输文件,seeder 服务器将是各个 peer 节点获取种子的地方。

peers :peer 是成百上千需要接收文件的服务器,并且它们之间可以相互传输文件(下载、上传)。一旦一个peer节点下载完整个 tgz 文件,还将继续 seeding 一段时间,防止蜜罐效应。

环境介绍

tracker:192.168.12.254

seeder:192.168.12.254

peers:192.168.12.1-12,192.168.13.1-12共24台

服务器在同机房两个节点

系统都是CentOS_7.7-x86-64

软件安装

tracker服务器下安装[在192.168.12.254上操作]:也可以通过跳板机,把tracker和peers一起推送下去

编写安装脚本:/usr/local/src/murder.sh

#/bin/bash

cd /usr/local/src

curl https://codeload.github.com/lg/murder/zip/master -vo murder.zip

unzip murder.zip

mv murder-master /usr/local/murder

1

2

3

4

5

#/bin/bash

cd /usr/local/src

curl https://codeload.github.com/lg/murder/zip/master -vo murder.zip

unzip murder.zip

mv murder-master /usr/local/murder

使用ansible将软件分发到客户端[在192.168.12.254上操作,推送到所有的客户端]:

ansible -i murdertest all -m copy -a "src=/usr/local/src/murder.sh dest=~ mode=0755"

ansible -i murdertest all -m shell -a "~/murder.sh"

1

2

ansible -i murdertest all -m copy -a "src=/usr/local/src/murder.sh dest=~ mode=0755"

ansible -i murdertest all -m shell -a "~/murder.sh"

启动tracker服务

启动tracker服务,[在192.168.12.254上操作]:实际上是调用 BitTornado/BT1/track.py 这个文件,track.py 有很多参数,如果需要添加参数,可以修改 murder_tracker.py。

几个重要参数:

port :tracker 监听的端口,默认 8998

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

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

python /usr/local/murder/dist/murder_tracker.py > /var/log/murder_tracker.log 2>&1 &

1

python /usr/local/murder/dist/murder_tracker.py > /var/log/murder_tracker.log 2>&1 &

seeder创建并分发种子

创建种子是在seeder服务器上进行操作[在192.168.12.254这台seeder上操作],我这边是要分发serf:

生成种子【按照如下脚本方式生成即可】:/root/software/murder-torrent/serf.sh

#!/bin/bash

# 定义变量

deploy_file=/root/software/serf_0.8.2_linux_amd64.zip

Seeder_IP=192.168.12.254

make_torrent_command=/usr/local/murder/dist/murder_make_torrent.py

# 生成种子

python ${make_torrent_command} ${deploy_file} ${Seeder_IP}:8998 ${deploy_file}.torrent

1

2

3

4

5

6

7

#!/bin/bash

# 定义变量

deploy_file=/root/software/serf_0.8.2_linux_amd64.zip

Seeder_IP=192.168.12.254

make_torrent_command=/usr/local/murder/dist/murder_make_torrent.py

# 生成种子

python ${make_torrent_command} ${deploy_file} ${Seeder_IP}:8998 ${deploy_file}.torrent

将种子文件推到客户端[在192.168.12.254这台seeder上操作]:

注意,为了防止同步过程中出错,所以这里不用ansible的copy模块了,我们这里使用ansible的synchronize模块[这个模块可以无差异的进行同步,实际使用的是rsync命令]

ansible -i murdertest all -m shell -a "yum install rsync -y"

ansible -i murdertest all -m synchronize -a "src=/root/software/serf_0.8.2_linux_amd64.zip.torrent dest=~"

1

2

ansible -i murdertest all -m shell -a "yum install rsync -y"

ansible -i murdertest all -m synchronize -a "src=/root/software/serf_0.8.2_linux_amd64.zip.torrent dest=~"

然后启动seeder服务,启动脚本:/root/software/seeder.sh

#!/bin/bash

#分发的文件

deploy_file=/root/software/serf_0.8.2_linux_amd64.zip

start_ip=192.168.12.254

make_torrent_command=/usr/local/murder/dist/murder_client.py

# 后台运行启动seeder

python ${make_torrent_command} seed ${deploy_file}.torrent ${deploy_file} ${start_ip} &

1

2

3

4

5

6

7

#!/bin/bash

#分发的文件

deploy_file=/root/software/serf_0.8.2_linux_amd64.zip

start_ip=192.168.12.254

make_torrent_command=/usr/local/murder/dist/murder_client.py

# 后台运行启动seeder

python ${make_torrent_command} seed ${deploy_file}.torrent ${deploy_file} ${start_ip} &

执行脚本启动seeder,通过ps -ef|grep torrent查看到对应的python进程即可。

peer节点下载软件

在ansible的管理设备上创建下载脚本(用于推送到peer节点进行下载:~/software/serf_download.sh)

#!/bin/bash

# 用于各个 peer 节点根据种子文件信息,执行下载任务

# 定义下载的软件种子

torrent_file=~/serf_0.8.2_linux_amd64.zip.torrent

download_file=/usr/local/src/serf_0.8.2_linux_amd64.zip

# 这里获取各个 peer 节点自己的内网IP,这里要根据自己设备的情况修改一下

local_ip=$(hostname -I|awk '{print $1}')

murder_client_bin=/usr/local/murder/dist/murder_client.py

# 在各个 peer 节点执行 P2P 下载

python  $murder_client_bin peer $torrent_file $download_file $local_ip

1

2

3

4

5

6

7

8

9

10

#!/bin/bash

# 用于各个 peer 节点根据种子文件信息,执行下载任务

# 定义下载的软件种子

torrent_file=~/serf_0.8.2_linux_amd64.zip.torrent

download_file=/usr/local/src/serf_0.8.2_linux_amd64.zip

# 这里获取各个 peer 节点自己的内网IP,这里要根据自己设备的情况修改一下

local_ip=$(hostname -I|awk '{print $1}')

murder_client_bin=/usr/local/murder/dist/murder_client.py

# 在各个 peer 节点执行 P2P 下载

python  $murder_client_bin peer $torrent_file $download_file $local_ip

在ansible的管理设备上面推送peer的下载脚本并执行下载任务:

ansible -i murdertest all -m script -a "~/software/serf_download.sh"

1

ansible-imurdertestall-mscript-a"~/software/serf_download.sh"

很快就执行完了。如果不使用script模块的话还可以把脚本推动到客户端,然后在客户端把脚本启动起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值