ansible 使用bt协议分发大文件

简介:

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 D4D2`

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||useraddrs/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||useraddrs/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,如需转载请自行联系原作者

目录
打赏
0
0
0
0
265
分享
相关文章
「译文」如何在 Ansible 中复制多个文件和目录
「译文」如何在 Ansible 中复制多个文件和目录
Ansible自动化运维工具之主机管理与自定义配置文件(2)
Ansible自动化运维工具之主机管理与自定义配置文件(2)
175 0
Ansible 文件从远程取文件fetch和传文件到远程copy(学习笔记四)
fetch模块: copy模块: 1、从远程主机获取文件:ansible all -m fetch -a "src=/root/test.sh dest=/root/test" image.
5147 0
LXJ
ansible-playbook脚本-从被管理机收集指定日期标识的文件
从被管理机收集指定日期标识的文件
LXJ
385 0
Ansible yaml的语法、playbook文件例子(学习笔记十七)
1、ansible有两种调用方式,一种是临时语句,一种是yml文件调用,语法格式分别为: ansible all -m ping ansible-playbook  test.yml 2、test.yml为yaml文件,yaml使用空白、缩进、分行组织数据。
1430 0
Ansible 获取主机信息模块setup、获取文件详细信息模块stat(学习笔记十)
setup 1、获取setup的所有信息,获取的信息有上百条: ansible all -m setup "ansible_facts": { "ansible_all_ipv4_addresses": [ "172.
2655 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等