设为首页 收藏本站
查看: 1034|回复: 0

[经验分享] ansible 使用bt协议分发大文件

[复制链接]

尚未签到

发表于 2018-7-29 12:24:43 | 显示全部楼层 |阅读模式
  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 $1}')
  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  $murder_client_bin peer $torrent_file $download_file $local_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 '{print $1}')
  murder_client_bin=/opt/app/murder/dist/murder_client.py
  python  $murder_client_bin peer $torrent_file $download_file $local_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 '{ print $2 }'`
  }
  start () {
  getent passwd $murder_user  >/dev/null || useradd -r  -s /sbin/nologin $murder_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 $murder_user:$murder_user $DATA_DIR  $LOG_DIR
  find_tracker_process
  if [ "$PID" != "" ]; then
  echo -e  "\e[35m$name is already running!\e[0m"
  else
  daemon --user $murder_user  nohup  python $murder_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[35m$name is running: $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/{print $2}' /opt/app/murder/dist/seeder.conf)
  torrent_file=$(awk -F= '/torrent_file/{print $2}' /opt/app/murder/dist/seeder.conf)
  tracker_ip=$(awk -F= '/tracker_ip/{print $2}' /opt/app/murder/dist/seeder.conf)
  local_ip=$(awk -F= '/local_ip/{print $2}' /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 '{ print $2 }'`
  #PID=`ps -ef | grep murder_client|grep seed | grep python |grep -v $0|grep -v grep|grep -v sh|grep -v root| awk '{ print $2 }'`
  }
  start () {
  getent passwd $murder_user  >/dev/null || useradd -r  -s /sbin/nologin $murder_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 $murder_make_torrent_bin $deploy_file $tracker_ip $torrent_file
  #######
  chown -R $murder_user:$murder_user $DATA_DIR  $LOG_DIR
  find_seeder_process
  if [ "$PID" != "" ]; then
  echo -e  "\e[35m$name is already running!\e[0m"
  else
  nohup  python $murder_seeder_bin  seed  $torrent_file $deploy_file $local_ip     > $murder_seeder_log 2>&1 &
  #daemon --user $murder_user  nohup  python $murder_seeder_bin  seed  $torrent_file $deploy_file $local_ip     > $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[35m$name is running: $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命令

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543037-1-1.html 上篇帖子: ansible部署mongoDB 下篇帖子: 运维自动化之ansible使用详解(包括常用模块与playbook使用)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表