python源代码
http://www.361way.com/python-p2p/4737.html
ansible 使用bt协议分发大文件
http://john88wang.blog.51cto.com/2165294/1793080
# ansible 172.168.2.171 -m service -a "name=murder-tracker state=started"
# ansible 172.168.2.179 -m service -a "name=murder-seeder state=started"
# ansible 172.168.2.179 -m synchronize -a "mode=pull src=/opt/software/download/deploy.torrent dest=/opt/software/download"
# ansible all -m synchronize -a "src=/opt/software/download/deploy.torrent dest=/opt/software/download"
# ansible all -m shell -a "sh /opt/app/murder/dist/peer_download.sh"
/etc/init.d/murder-tracker
/etc/init.d/murder-seeder
tracker seeder peers 172.168.2.171
手动
python /opt/app/murder/dist/murder_make_torrent.py deploy.tar.gz 172.168.2.171:8998 deploy.torrent
python /opt/app/murder/dist/murder_client.py seed deploy.torrent deploy.tar.gz 172.168.2.171
python /opt/app/murder/dist/murder_client.py peer deploy.torrent deploy.tar.gz 客户ip
单台机器80M,8s
ansible自动
ansible -i hostsbt all -m shell -a "mkdir -p /opt/software/download"
ansible -i hostsbt all -m copy -a "src=/opt/software/download/deploy.torrent dest=/opt/software/download/"
ansible -i hostsbt all -m copy -a "src=/opt/app/murder dest=/opt/software/download/"
(时间 5M 1min41s)
ansible -i hostsbt all -m copy -a "src=/opt/software/download/peer_download.sh dest=/opt/software/download/"
ansible -i hostsbt all -m shell -a "sh /opt/software/download/peer_download.sh"
6台机器1m24.260s
cat peer_download.sh
#!/bin/bash
#this file is used to download bt files
torrent_file=/opt/software/download/deploy.torrent
download_file=/opt/software/download/deploy.tar.gz
#local_ip=(hostname -I|awk '{print(hostname -I|awk '{print1}')
local_ip='172.168.2.171'
#murder_client_bin=/opt/software/download/murder_client.py
murder_client_bin=/opt/software/download/murder/dist/murder_client.py
python murderclientbinpeertorrent_file downloadfilelocal_ip
多台
tracker 172.168.2.171
seeder 172.168.2.179
peers 172.168.2.180~200
1.在tracker服务器上启动tracker
ansible 172.168.2.171 -m service -a "name=murder-tracker state=started"
2.注意数据目录/opt/data/murder
将需要的分发的文件打包成deploy.tar.gz
在seeder服务器上制作torrent文件并启动seeder
手动:python /opt/app/murder/dist/murder_make_torrent.py deploy.tar.gz 172.168.2.171:8998 deploy.torrent
自动:/etc/init.d/murder-seeder restart
启动脚本依赖一个配置文件seeder.conf
# cat /opt/app/murder/dist/seeder.conf (注意不能注释,切记)
deploy_file=/opt/data/murder/deploy.tar.gz
torrent_file=/opt/data/murder/deploy.torrent
tracker_ip=172.168.2.171:8998
local_ip=172.168.2.179
3.从seeder获取种子文件,然后分发到peers
4.在各个peers端执行下载任务
ansible all -m shell -a "sh /opt/app/murder/dist/peer_download.sh"
peer_download.sh
#!/bin/bash
#this file is used to download bt files
torrent_file=/opt/software/download/deploy.torrent
download_file=/opt/software/download/deploy.tar.gz
local_ip=(hostname -I|awk '{print1}')
murder_client_bin=/opt/app/murder/dist/murder_client.py
python murderclientbinpeertorrent_file downloadfilelocal_ip
时间 对比 发一个374M的文件
bt
+ intr=85
+ echo 85/60
+ bc
直接copy
+ intr=137
+ echo 137/60
+ bc
cat test.sh
D1=`date +"%Y-%m-%d %H:%M:%S"`
D2=`date +%s -d "$D1"`
cd /etc/ansible
ansible -i hostsbt all -m copy -a "src=/opt/software/download/deploy.tar.gz dest=/opt/software/download/deploy.tar.gz"
D3=`date +"%Y-%m-%d %H:%M:%S"`
D4=`date +%s -d "$D3"`
intr=`expr D4−D2`
echo ${intr}/60 | bc
cat murder-tracker
#! /bin/sh
#
# Start/Stop murder-tracker
#
# chkconfig: 345 99 99
# description: murder-tracker
# processname: murder-tracker
if [ -f /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
fi
name="murder-tracker"
murder_tracker_bin="/opt/app/murder/dist/murder_tracker.py"
murder_tracker_log="/opt/logs/murder/murder_tracker.log"
murder_tracker_data="/opt/data/murder/tracker_data"
murder_user=murder
find_tracker_process () {
PID=`ps -ef | grep murder_tracker | grep python |grep -v 0|grep -v grep|grep -v sh|grep -v root| awk '{ print2 }'`
}
start () {
getent passwd murderuser>/dev/null||useradd−r−s/sbin/nologinmurder_user
LOG_DIR=`dirname ${murder_tracker_log}`
DATA_DIR=`dirname ${murder_tracker_data}`
if [ ! -d $LOG_DIR ]; then
echo -e "\e[35mLog dir ${LOG_DIR} doesn't exist. Creating\e[0m"
mkdir -p $LOG_DIR
fi
if [ ! -d $DATA_DIR ]; then
echo -e "\e[35mLog dir ${DATA_DIR} doesn't exist. Creating\e[0m"
mkdir -p $DATA_DIR
fi
chown -R murderuser:murder_user DATADIRLOG_DIR
find_tracker_process
if [ "$PID" != "" ]; then
echo -e "\e[35m$name is already running!\e[0m"
else
daemon --user murderusernohuppythonmurder_tracker_bin > /dev/null 2>&1 &
echo -e "\e[35mStarting $name Done\e[0m"
fi
}
stop () {
find_tracker_process
if [ "$PID" != "" ]; then
echo -e "\e[35mStopping $name\e[0m"
kill $PID
else
echo -e "\e[35m$name is not running yet\e[0m"
fi
}
case $1 in
start)
start
;;
stop)
stop
exit 0
;;
reload)
stop
sleep 2
start
;;
restart)
stop
sleep 2
start
;;
status)
find_tracker_process
if [ "$PID" != "" ]; then
echo -e "\e[35mnameisrunning:PID\e[0m"
exit 0
else
echo -e "\e[35m$name is not running\e[0m"
exit 1
fi
;;
*)
echo -e "\e[35mUsage: $0 {start|stop|restart|reload|status|configtest}\e[0m"
RETVAL=1
esac
exit 0
cat murder-seeder
#! /bin/sh
#
# Start/Stop murder-seeder
#
# chkconfig: 345 98 98
# description: murder-seeder
# processname: murder-seeder
if [ -f /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
fi
name="murder-seeder"
murder_seeder_data="/opt/data/murder/tracker_data"
murder_seeder_log="/opt/logs/murder/murder_seeder.log"
murder_seeder_bin="/opt/app/murder/dist/murder_client.py"
murder_make_torrent_bin="/opt/app/murder/dist/murder_make_torrent.py"
murder_seeder_conf="/opt/app/murder/dist/seeder.conf"
deploy_file=(awk -F= '/deploy_file/{print2}' /opt/app/murder/dist/seeder.conf)
torrent_file=(awk -F= '/torrent_file/{print2}' /opt/app/murder/dist/seeder.conf)
tracker_ip=(awk -F= '/tracker_ip/{print2}' /opt/app/murder/dist/seeder.conf)
local_ip=(awk -F= '/local_ip/{print2}' /opt/app/murder/dist/seeder.conf)
murder_user=murder
find_seeder_process () {
PID=`ps -ef | grep murder_client|grep seed | grep python |grep -v 0|grep -v grep| awk '{ print2 }'`
#PID=`ps -ef | grep murder_client|grep seed | grep python |grep -v 0|grep -v grep|grep -v sh|grep -v root| awk '{ print2 }'`
}
start () {
getent passwd murderuser>/dev/null||useradd−r−s/sbin/nologinmurder_user
LOG_DIR=`dirname ${murder_seeder_log}`
DATA_DIR=${murder_seeder_data}
if [ ! -d $LOG_DIR ]; then
echo -e "\e[35mLog dir ${LOG_DIR} doesn't exist. Creating\e[0m"
mkdir -p $LOG_DIR
fi
if [ ! -d $DATA_DIR ]; then
echo -e "\e[35mLog dir ${DATA_DIR} doesn't exist. Creating\e[0m"
mkdir -p $DATA_DIR
fi
####### make torrent
python murdermaketorrentbindeploy_file trackeriptorrent_file
#######
chown -R murderuser:murder_user DATADIRLOG_DIR
find_seeder_process
if [ "$PID" != "" ]; then
echo -e "\e[35m$name is already running!\e[0m"
else
nohup python murderseederbinseedtorrent_file deployfilelocal_ip > $murder_seeder_log 2>&1 &
#daemon --user murderusernohuppythonmurder_seeder_bin seed torrentfiledeploy_file localip>murder_seeder_log 2>&1 &
echo -e "\e[35mStarting $name Done\e[0m"
fi
}
stop () {
find_seeder_process
if [ "$PID" != "" ]; then
echo -e "\e[35mStopping $name\e[0m"
kill $PID
else
echo -e "\e[35m$name is not running yet\e[0m"
fi
}
case $1 in
start)
start
;;
stop)
stop
exit 0
;;
reload)
stop
sleep 2
start
;;
restart)
stop
sleep 2
start
;;
status)
find_seeder_process
if [ "$PID" != "" ]; then
echo -e "\e[35mnameisrunning:PID\e[0m"
exit 0
else
echo -e "\e[35m$name is not running\e[0m"
exit 1
fi
;;
*)
echo -e "\e[35mUsage: $0 {start|stop|restart|reload|status|configtest}\e[0m"
RETVAL=1
esac
exit 0
可以将这些步骤写成Ansible playbooks
1.copy部分
copy种子文件,脚本文件
2.shell命令
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1920011,如需转载请自行联系原作者