我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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开发。可实现监控整个分发网络运行情况,分发任务执行情况,动态扩展分发节点,下发任务等操作。

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

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

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

这里主要分享一个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. 确认代码拷贝到网站根目录之后,浏览器访问: <http://serverip/peertracker/help.php
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可读


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

网络文件服务器怎么搭建

搭建网络文件服务器需要以下步骤:1. 选择合适的操作系统和文件服务器软件。常用的操作系统有Windows、Linux等,常用的文件服务器软件有Samba、FTP、NFS等。2. 安装操作系统和文件服务器软件。根据选择的操作系统和文件服务器软
2023-05-25

网络文件服务器搭建需要哪些配置

网络文件服务器搭建需要以下配置:1. 一台服务器:需要一台专门的服务器用于存储和管理文件。2. 操作系统:需要选择一个适合的操作系统,如Windows Server、Linux等。3. 网络连接:需要一个可靠的网络连接,以便用户可以远程访问
2023-06-12

大数据-HDFS 集群搭建的配置文件

1.HDFS简单版集群搭建相关配置文件  1.core-site.xml文件1 2 fs.defaultFS3 hdfs://hadoop2:90004 5 6 7 hadoop.tmp.dir8 /usr/hadoop-
大数据-HDFS 集群搭建的配置文件
2018-04-22

Java+Springboot怎么搭建在线网盘文件分享系统

这篇文章主要介绍“Java+Springboot怎么搭建在线网盘文件分享系统”,在日常操作中,相信很多人在Java+Springboot怎么搭建在线网盘文件分享系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
2023-06-21

云服务器怎么搭建python环境配置系统网络文件

要搭建Python环境,你需要一个Python虚拟机(VM)或者虚拟环境(VL)来安装、配置和管理系统和网络文件。下面是使用Dockerfile和Python虚拟机搭建云服务器的步骤:在Docker镜像中安装Dockerfile.sh文件。这将包含你在虚拟机或者云服务提供商的安装路径。在VM镜像中安装Python虚拟机(VM)。VM是运行云服务器的Python虚拟机。你需要将该VM镜像安
2023-10-26

云服务器怎么搭建python环境配置系统网络文件夹

以下是一个基本的Python搭建云服务器的步骤:首先,需要准备一个域名和URL。域名建议使用Apache和BigName.com,建议使用简短的域名,而不是长域名。URL建议使用"https://example.com"。将Apache镜像安装在本地服务器上:在本地环境中创建虚拟目录,并将Apache文件夹放在本地服务器的根目录下。添加虚拟主机:可以在Apache的主机上创建虚拟主机,并
2023-10-26

云服务器怎么搭建python环境配置系统网络文件权限

要搭建Python环境,并为系统添加网络文件权限,可以按照以下步骤进行:安装Python和Python标准库:可以使用官方的Python环境包管理器(pyenv)或者第三方工具来安装并配置Python和Python标准库。这里推荐使用PyCharm,它是一款功能强大的终端Python环境配置工具。配置共享目录和远程主机:在安装Python之后,可以在命令行中输入“pip”并按照提示配置所需
2023-10-26

Redhat网络相关配置文件的示例分析

这篇文章将为大家详细讲解有关Redhat网络相关配置文件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在linux系统中,TCP/IP网络是通过若干个文本文件进行配置的,需要编辑这些文件来完成联
2023-06-04

【IoT开发工具箱 | 03】搭建可外网访问的内网穿透http文件服务器

这是机器未来的第56篇文章 原文地址:https://robotsfutures.blog.csdn.net/article/details/127046100 《Python数据科学快速入门系列》快速导航: 【IoT开发工具箱 |
2023-08-23

怎么搭建云服务器网页访问记录文件夹里的文件

下面,我将对如何管理和维护云服务器中的文件访问记录文件夹进行详细说明。添加访问记录文件夹在创建一个新的云服务器文件访问记录文件夹时,可以在根目录下创建一个名为“access_log”的文件夹,并在其中创建一个新的文件夹。在这个文件夹中,将包含用户的登录信息、操作记录等文件。例如,可以将以下内容复制到这个文件夹中:acc
2023-10-27

云服务器怎么搭建python环境配置系统网络文件权限管理

选择云服务器提供商选择一家提供云服务器的云服务器提供商是非常重要的,这将影响我们使用云服务器的体验和安全性。可以通过查看其他用户的评价、了解该云服务器提供商的产品线、服务质量等方式来进行选择。在选择云服务器提供商时,可以考虑以下几个因素:提供的云服务器版本类型是否丰富,是否支持多种操作系统;云服务器的性能如何,是否稳定
云服务器怎么搭建python环境配置系统网络文件权限管理
2023-10-28

计算机网络的发展过程大致可以分为几个阶段

计算机网络的发展过程可以大致分为以下几个阶段:1. 单点连接阶段:在计算机网络出现之前,计算机只能通过专用连接(例如串行线路)进行通信。这种通信方式只能实现一对一的连接,无法实现多个计算机之间的互联。2. 局域网(LAN)阶段:局域网是指在
2023-08-24

Pytorch搭建简单的卷积神经网络(CNN)实现MNIST数据集分类任务

这篇文章主要介绍了Pytorch搭建简单的卷积神经网络(CNN)实现MNIST数据集分类任务,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-23

webuploader在springMVC+jquery+Java开发环境下的大文件分片上传的实例代码

注意:1,webuploader上传组件会和jQuery自带的上传组件冲突,所以不要使用
标签中添加上传文件的属性;enctype="multipart/form-data"
2023-05-31

编程热搜

目录