千家信息网

P2P--大文件分发网络的搭建

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,六月份去上海参加了DockOne组织的容器大会,报了一个小项目,不小心得了一等奖,这里拿出来跟大家共享一下其中核心的P2P传输网络的搭建,也是公司已经投入使用的大文件传输方式。项目设计:初衷:1、作为
千家信息网最后更新 2024年09月21日P2P--大文件分发网络的搭建

六月份去上海参加了DockOne组织的容器大会,报了一个小项目,不小心得了一等奖,这里拿出来跟大家共享一下其中核心的P2P传输网络的搭建,也是公司已经投入使用的大文件传输方式

项目设计

初衷:

1、作为一个提供全球云计算业务的运营商来说,不管是本身海外节点业务的拓展、平台扩充还是客户定制模板业务的需求,都会涉及大文件的传输。一些普通的ISO系统镜像文件,一些客户定制的系统模板,少则十几G,多则几十G。如此庞大的文件在全球多个节点之间传输,如何保证其稳定、快速的实现,最重要的是文件的完整性的要求,是我们客观面对的问题。

2、传统的 FTP, rsync之类的文件传输无法满足大文件的传输要求。我们经常遇到,辛苦一天传输的模板到一个数据中心节点,结果告知文件已经损坏,无法部署。可靠性无法保证。

3、客户迫切需要实现全球各个节点之间的大文件快速,可靠的分发,同步

实现思路:

1、稳定快速:大文件的分发的稳定性受限于传输网络,受限于传输协议。我们的分发网络建立在公司专用GPN之上,传输网络的稳定性得到保证,传输协议采用的 P2P传输,很明显优于 FTP等相关协议。

这里其实大家通过公网和私有网络也可以实现。

2、开发: P2P(BT)相关的的软件,工具社区已经有很多成型的产品,因此我们没有必要自己研发。只需要选择适合的开源工具,进行二次开发即可。云计算时代,开发效率是最关键的。

3、部署交付:分发网络Docker容器化部署,镜像交付。基于Docker的轻量,跨平台特性,标准统一的打包方案,生成可交付的镜像产品。具有良好的 REST API,很适合自动化测试和继续集成,分发网络的动态扩展。

项目实现:

1、网络:文件分发网络构建在我们公司专有GPN 全球互联网络之上(博客里不打广告,实际在公网和自有内网里也可以实现,但注意限速!)。

2、tracker: 采用集中式的 P2P 传输模式,tracker使用peertracker。peertracker是一个简单,高效,快速的 BT Tracker。负责记录每个peer的信息;可以搭建多个tracker做冗余,防止一个tracker宕机导致集群不可用。

3、peer: 使用的是 transmission, 是一个跨平台的自由软件,自带 web 界面,支持 API 调用,可编程性好。

4、agent: 基于flask + dockerapi开发,封装了一整套dockerapi相关操作,提供认证机制, 接收中心控制节点的调度,创建 peer docker容器,执行相关任务。部署层级与transmission peer端一致。

5、控制节点:基于django + celery开发。可实现监控整个分发网络运行情况,分发任务执行情况,动态扩展分发节点,下发任务等操作。

整个原理图和流程图如下:

这里主要分享一个playbook,用于P2P网络的搭建,docker和实现代码部分等整理之后在共享出去。

github的地址:

https://github.com/xujpxm/ansible-peertracker

由于写的比较仓促,有带后期改善,经测试此脚本在ubuntu14上能够正常运行。

README:

这是一个用ansible写的自动化搭建P2P传输网络的脚本。Tracker采用谷歌2010年开源出来的peertracker,p2p种子的生成和传输采用transmission。

安装

安装peertracker:

ansible-playbook install_peertracker.yml

默认创建的数据库:peertracker,用户名:peertracker,密码:yais6Yab

脚本执行完成后,通过网页创建数据库,详见下面peertracker的安装.

安装transmission:

ansible-playbook install_transmission.yml

默认rpc_username和password: transmission/transmission

可自行修改/etc/transmission-daemon/settings.json文件自定义.

创建下载目录

ansible-playbook mk_download_dir.yml

默认下载路径是:/data/transmission-daemon/downloads可自行更改

Peertracker

P eerTracker是一个简单、高效、迅速的BitTorent Tracker。
安装要求:
1. HTTP Web Server.Apache,nginx,lighttpd等只要支持php均可。
2. PHP5+ 推荐php5.3以上版本
3. Database.支持MySQL、SQLite3、PostgreSQL8.0和txtSQL 脚本里采用的web server是apache2,数据库使用mysql。

Important Links:


Development Website: http://code.google.com/p/peertracker/
Issue Tracker: http://code.google.com/p/peertracker/issues/list
Source Code Repository: http://peertracker.googlecode.com/svn/trunk/
github respository:https://github.com/JonnyJD/peertracker

peertracker的安装

脚本a安装环境:ubuntu
1. 确认代码拷贝到网站根目录之后,浏览器访问: 2. 编辑配置文件tracker.mysql.php,这里已提前编辑好,主要更改了数据库的db_user、db_pass和db_name,默认数据库明和user是peertracker,密码:yais6Yab,也可自行修改templates里的文件。

  1. 通过help页面提供的Utilities,安装Tracker Database。安装成功后可看到,数据库结构很简单,只有两个表:pt_peers和pt_tasks,分别记录peer和任务的信息。

  2. 数据库创建成功之后实际已可以使用,tracker的url即为:http://serverip/peertracker/mysql/announce.php 如果是外网使用,可以把对应的announce和scrape.php文件移置网站的顶级目录,那么生成的tracker url即为:http://serverip/announce.php

  3. help.php的页面示例:

也可以查看peer的状态:

http://serverip/peertracker/mysql/scrape.php?stats

Transmission

Transmission是一个强大的BitTorrent开源客户端,实现了BT协议中描述的大多数功能。目前,在它的官方网站上提供了多个版本可以下载,包括:Mac、GTK+、QT版本,还有Daemon版本。
Transmission支持DHT、Magnet Link、uTP以及PEX等特性。尤其是支持Magnet Link磁力链接下载十分重要,因为目前网上很多资源都是采用这种方式来分享的,而不是传统的.torrent文件,例如TPB、BTDigg。

transmission的安装/配置

安装
安装很简单,直接apt-get安装即可,运行transmission的role,脚本会自动安装。
安装过程中会顺带把transmission-cli也安装上,安装完毕后系统会多出如下一些命令行工具。

  • transmission-cli: 独立的命令行客户端。

  • transmission-create: 用来建立.torrent种子文件的命令行工具。

  • transmission-daemon: 后台守护程序。

  • transmission-edit: 用来修改.torrent种子文件的announce URL。

  • transmission-remote: 控制daemon的程序。

  • transmission-show:查看.torrent文件的信息。
    配置
    settings.json是主要的配置文件,设置daemon的各项参数,包括RPC的用户名密码配置。它实际上是一个符号链接,指向的原始文件是/etc/transmission-daemon/settings.json。
    脚本里提供了一个模板文件,主要修改了下载路径、rpc认证和白名单、默认的rpc认证用户名/密码为:transmission/transmission
    RPC的几个配置参数:

  • rpc-authentication-required: rpc认证,建议开启

  • rpc-bind-address: String (default = "0.0.0.0") Where to listen for RPC connections

  • rpc-enabled: Boolean (default = true)

  • rpc-password: String

  • rpc-port: 默认端口9091Number (default = 9091)

  • rpc-url: String (default = /transmission/. Added in v2.2)

  • rpc-username: String

  • rpc-whitelist: 设置白名单 String (Comma-delimited list of IP addresses. Wildcards allowed using ''. Example: "127.0.0.,192.168..", Default: "127.0.0.1" )

  • rpc-whitelist-enabled: Boolean (default = true)

transmission使用web界面控制

浏览器中访问:http://serverip:9091/transmission/web/
即可在浏览器中添加种子文件,进行p2p网络传输。
种子文件的生成可以使用transmission自带的transmission-remote命令,例如:
transmission-create -c "Standard Template " -t http://192.168.1.1/announce.php -o Template.torrent StandardTemplate

下图是我自己测试的transmission实时速度,限速100M,起了五个peer基本打满带宽:

需要注意的是transmission的下载路径是/data/transmission-daemon/downloads,注意文件目录是否存在和权限,可以用mk_download_dir.yml脚本创建

transmission-create 创建的种子文件的权限是600,需要更改为644,使other可读


文件 传输 网络 数据 脚本 数据库 节点 种子 配置 客户 开发 支持 任务 全球 命令 密码 工具 模板 版本 控制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州游戏软件开发公司在哪儿 全文型数据库包括什么 修改完善软件开发计划 软件开发课程总结学习 徐州直销软件开发中心 合肥app软件开发一般要多少钱 网络安全全民有责的团学总结 慈溪财务软件开发找哪家 吉林正规软件开发标准 怎么管理千台服务器 mssql 附加数据库 命令行备份数据库 计算机软件开发工程 堡垒之夜游戏中怎么开通服务器 互联网的科技公司 互联网医院网络科技有限公司 守护网络安全图片表情包 中学生网络安全案例警示教育 软件开发公司需要什么手续 四川创益云软件开发有限公司 中国知网期刊数据库有考研资源吗 网络技术大赛btf 当前常用的两大数据库搜索工具 天津做分布式存储服务器 数字化网络安全防护措施 网络安全法2016年11月 蚌埠电商软件开发需要多少钱 魔兽pve pvp服务器差别 出现网络安全错误论文 网络安全基层行
0