python BitTornado P2P分发大文件
P2P分发大文件思路
1、将软件包生成种子文件
2、通过saltstack将种子文件分发至每台服务器
3、每台服务器进行种子下载
推荐使用Twitter开源的murder。Twitter用它来分发大文件完成代码更新。

下载地址: https://github.com/lg/murder
本文介绍murder的dist,它是基于python开发的。
murder dist
- murder_tracker.py 可以理解它为调度中心
- murder_make_torrent.py 生成种子,并且注册在调度中心
- murder_client.py 播种和获取文件包(上传、下载)
举例部署结构:
192.168.1.11 调度中心
192.168.1.12 种子生成、第一个播种文件服务器
192.168.1.100-200 下载文件
1、启动调度中心
python murder_tracker.py --port 8998 --dfile data --logfile urder_tracker.log
- --port 监听的端口,默认是8998
- --dfile 存储近期下载信息的文件
- --logfile 日志文件,默认是标准输出
shell启动脚本
#!/bin/bash
#
# Start/Stop murder-tracker
#
# 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="/usr/local/dist/murder_tracker.py"
murder_tracker_log="/usr/local/dist/logs/murder_tracker.log"
murder_tracker_data="/usr/local/dist/var/tracker_data"
murder_user=murder find_tracker_process () {
PID=`ps -ef | grep murder_tracker | grep python |grep -v $|grep -v grep|grep -v sh|grep -v root| awk '{ print $2 }'`
echo $PID
} 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 --dfile $murder_tracker_data --logfile $murder_tracker_log > /dev/null >& &
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 $ in
start)
start
;;
stop)
stop
exit
;;
restart)
stop
sleep
start
;;
status)
find_tracker_process
if [ "$PID" != "" ]; then
echo -e "\e[35m$name is running: $PID\e[0m"
exit
else
echo -e "\e[35m$name is not running\e[0m"
exit
fi
;;
*)
echo -e "\e[35mUsage: $0 {start|stop|restart|status}\e[0m"
RETVAL=
esac
exit
2、生成种子文件
python murder_make_torrent.py deploy.tar.gz 192.168.1.11:8998 deploy.torrent
3、创建第一个播种文件服务节点
python murder_client.py seed deploy.torrent deploy.tar.gz 192.168.1.12
- 最后一个参数是本机的IP地址
4、通过saltstack将种子文件deploy.torrent发送到每台服务器上
5、所有节点192.168.1.100-200获取文件包,这些服务器下载文件,同时也承担播种节点
python murder_client.py peer deploy.torrent deploy.tar.gz 192.168.1.xxx
- 最后一个参数是本机的IP地址
备注:这些主机分发时防火墙需要放开,程序中默认使用10000-60000之间端口,BitTornado/download_bt1.py中定义
('minport', 10000, 'minimum port to listen on, counts up if unavailable'),
('maxport', 60000, 'maximum port to listen on'),
('random_port', 1, 'whether to choose randomly inside the port range ' +
'instead of counting up linearly'),
参考博文:http://john88wang.blog.51cto.com/2165294/1793080
python BitTornado P2P分发大文件的更多相关文章
- 结合P2P软件使用Ansible分发大文件
一 应用场景描述 现在我需要向50+数量的服务器分发Logstash新版本的rpm包,大概220MB左右,直接使用Ansible的copy命令进行传输,命令如下: 1 ansible all -m ...
- Python:高效计算大文件中的最长行的长度
在操作某个很多进程都要频繁用到的大文件的时候,应该尽早释放文件资源(f.close()) 前2种方法主要用到了列表解析,性能稍差,而最后一种使用的时候生成器表达式,相比列表解析,更省内存 列表解析和生 ...
- 【Python】实现对大文件的增量读取
背景 前段时间在做一个算法测试,需要对源于日志的数据进行分析才能获取到结果:日志文件较大,所以想要获取数据的变化曲线,增量读取是最好的方式. 网上有很多人的技术博客都是写的用for循环readline ...
- python如何打开一个大文件?
with open('a.csv','r') as f: for i in f: print(i) while True: a = f.readline() if not a: break f.rea ...
- 在python中逐行读取大文件
在我们日常工作中,难免会有处理日志文件的时候,当文件小的时候,基本不用当心什么,直接用file.read()或readlines()就可以了,但是如果是将一个10G大小的日志文件读取,即文件大于内存的 ...
- Python之requests模块-大文件分片上传
最近在做接口测试时,拿到一个分片上传文件的接口,http接口请求头中的Content-Type为multipart/form-data.需要在客户端将大文件分片成数据块后,依次传给服务端,由服务端还原 ...
- python chunk 方式读取大文件——本质上还是file read自身支持
参考:https://stackoverflow.com/questions/519633/lazy-method-for-reading-big-file-in-python 最优雅方式: file ...
- python下载大文件
1. wget def download_big_file_with_wget(url, target_file_name): """ 使用wget下载大文件 Note: ...
- Python 大文件处理
非内存资源可以使用with 在python中逐行读取大文件 在我们日常工作中,难免会有处理日志文件的时候,当文件小的时候,基本不用当心什么,直接用file.read()或readlines()就可以了 ...
随机推荐
- Jenkins控制台输出乱码
一.问题详情 jenkins构建mav任务,在控制台显示乱码: 二.原因分析 1. 查看系统编码和tomcat的编码都正常 # grep encoding /usr/local/tomcat/conf ...
- 【第十三课】监控Linux系统状态
目录 1.查看系统负载命令:w.uptime 2.vmstat详解 3.top动态查看负载 4.sar命令(监控网卡流量) 5.nload命令(监控网卡流量) 6.iostat iotop(监控IO性 ...
- 【第十一课】Tomcat原理解析【转】
目录 一.Tomcat顶层架构 二.Tomcat顶层架构小结: 三.Connector和Container的微妙关系 四.Connector架构分析 五.Container架构分析 六.Contain ...
- KNN算法的R语言实现
近邻分类 简言之,就是将未标记的案例归类为与它们最近相似的.带有标记的案例所在的类. 应用领域: 1.计算机视觉:包含字符和面部识别等 2.推荐系统:推荐受众喜欢电影.美食和娱乐等 3.基因工程:识别 ...
- Python3 str去除空格
一.去除str两端空格(strip()) a.去除左端空格 lstrip() str0='abcdef' str1=' abcdef' print(str0) print(str1.lstrip() ...
- python的闭包函数
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用.这样就构成了一个闭包. #闭包函数的实例# outer是外部函数 a和b都是外函数的临时变量def o ...
- 3. Python3 基本数据类型
Python3 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型& ...
- 《口算大作战 2》DLC:算法真奇妙
211614331 王诚荣 211614354 陈斌 --第一次结对作业 DLC DLC:三年级混合运算模块现已更新!现在您可以愉快的使用三年级题库啦.同时您必须拥有本体才能使用此DLC 单击此处查看 ...
- 屏蔽系统热键钩子Hook程序
在winform时候,经常需要做屏蔽系统热键: 1.屏蔽左"WIN".右"Win" 2.屏蔽Ctrl+Esc 3.屏蔽Alt+f4 4.屏蔽Alt+Esc 5. ...
- ElasticSearch 2 (31) - 信息聚合系列之时间处理
ElasticSearch 2 (31) - 信息聚合系列之时间处理 摘要 如果说搜索是 Elasticsearch 里最受欢迎的功能,那么按时间创建直方图一定排在第二位.为什么需要使用时间直方图? ...