1. 概览
在传统的树状局域网的拓扑结构下分发超大的文件,传输速度往往受最窄的通道的影响,比如文件服务器放在一个千兆或万兆的交换机接口之后,即使其他的计算机有40Gb甚至100Gb的网口,也不能提高整体的分发速度。在现代制造业工厂里头就经常遇到这样的情况,比如文件存储服务器连接在一个千兆至多万兆接口之后,它需要通过多层的交换机结构来带动几百台甚至上千台的被测试工作服务器,传送上GB甚至几十GB的文件就非常耗时了。另外一个限制是存储服务器本身的处理器性能,传统存储服务器往往是CPU比较低端的配置,也可能成为瓶颈。<br> 矛盾的根本在于几个方面:1)网络拓扑结构的限制;2)存储服务器的性能限制。一个存在已经有超过20年的成熟的技术“端到端的比特洪流”机制恰好可以解决这个问题。<br> 本篇介绍俩个基于比特洪流的工具供大家参考:transmission,qbittorrent。
2. 使用工具transmission来做局域网内计算机之间文件的传输
2.1 安装
这一步需要所有节点都做(包括存储服务器和将要分发到的工作服务器群)。 Ubuntu下的安装
# apt update
# apt install -y transmission-cli transmission-common transmission-daemon
Ubuntu下端口的开放
# 如果ufw防火墙没有激活(使用命令"# ufw status"来检查),那就不需要额外来开放下面的端口;否则就需要下面俩步
# ufw allow -p 9091:51413/tcp
# ufw allow -p 8000/tcp
RHEL/CentOS下的安装
# dnf update
# dnf install -y transmission-cli transmission-common transmission-daemon
RHEL/CentOS下端口的开放
# 如果防火墙没有激活),那就不需要额外来开放下面的端口;否则就需要下面俩步
# firewall-cmd --zone=public --add-port=9091/tcp --add-port=51413/tcp --add-port=8000/tcp --permanent
# firewall-cmd --reload
把transmission服务运行起来 允许局域网内其他计算机的访问,并在/var/lib/transmission-daemon/info/settings.json里设置好用户名和密码。
# vim /var/lib/transmission-daemon/info/settings.json
# 请设置好一下字段 (请使用你自己的用户名和密码而不是下面的示例中的用户名和密码)
"rpc-password": "password1234",
...
"rpc-username": "transmission",
"rpc-whitelist": "127.0.0.1,192.168.*.*",
# usermod -a -G debian-transmission $(whoami)
服务的开启 <br>
# service transmission-daemon status
如果这步命令显示服务没有开启,请用命令"service transmission-daemon start"来开启它
# service transmission-daemon reload
2.2 种子的创建
这个步骤仅仅是文件服务器需要。 安装并启动跟踪器(tracker)。
# apt install -y npm
# npm install -g bittorrent-tracker
# bittorrent-tracker
创建种子并开启分享(我们假定你的文件服务器的IP是192.168.1.10)。 请使用下面的bash脚本来创建一个脚本文件seed_bigfile.sh。
#!/bin/bash
TRANSDIR=/var/lib/transmission-daemon
cp -p $1 $TRANSDIR/downloads/
transmission-create $TRANSDIR/downloads/$1 -t http://192.168.1.10:8000/announce -o $HOME/$1.torrent
transmission-remote -n transmission:password1234 --add $HOME/$1.torrent
选择一个大的待传输文件(我们假定是bigfile.iso),使用上面的脚本文件来创建一个种子文件bigfile.iso.torrent,创建好的种子文件应该在你的家目录里。
# chmod a+x seed_bigfile.sh
# /path/to/seed_bigfile.sh bigfile.iso
2.3 工作服务器端的下载
这个步骤只需要在工作服务器端(下载大文件的计算机)做。 获取种子文件并开始下载。<br>
# scp 192.168.1.10:/path/to/bigfile.iso.torrent ~/
# transmission-remote -n transmission:password1234 --add ~/bigfile.iso.torrent
检查下载状态
# transmission-remote -n transmission:password1234 -l
ID Done Have ETA Up Down Ratio Status Name
1 100% 2.46 GB Done 0.0 0.0 0.0 Idle bigfile.iso
Sum: 2.46 GB 0.0 0.0
当下载完成后,你可以选择让它不要退出来支持其他的工作服务器的下载。 可以用下面的命令来停止下载和共享。用"-t"指定的种子号应该和上面的命令"transmission-remote -l"拿到的一致。
# transmission-remote -n transmission:password1234 -t 1 -r
localhost:9091/transmission/rpc/ responded: "success"
# service transmission-daemon stop
<br>
3. 使用工具qbittorrent来做局域网内计算机之间文件的传输
3.1 安装
这一步需要所有节点都做(包括存储服务器和将要分发到的工作服务器群)。 Ubuntu下的安装 <br>
# apt update
# apt install -y qbittorrent
RHEL/CentOS下的安装 <br>
# dnf update
# dnf install -y qbittorrent
3.2 种子的创建
这个步骤仅仅是文件服务器需要。 启动qbittorrent <br>
# qbittorrent
创建种子并开启分享(我们假定你的文件服务器的IP是192.168.1.10)。 点击菜单项"Tools" -> "Torrent_Creator"。 给"Path"字段选择你的待分享的文件或目录,并选上"Start seeding immediately"和"Ignore share ratio limits for this torrent"俩个复选框,"Private torrent"复选框一定不要选,否则其他计算机就不能发现这台种子服务器了,"Tracker URLs","Web seed URLs"和"Comments"可以空着不填。点击"Create Torrent"按钮来继续。 在弹出窗口中,给种子文件(比如~/bigfile.iso.torrent)选择一个路径,并点击"Save"按钮。 关闭"Torrent Creator"弹出窗口中。 在qbittorrent的右上角子窗口中,你应该可以看到刚刚创建好的种子。
3.3 工作服务器端的下载
这个步骤只需要在工作服务器端(下载大文件的计算机)做。 获取种子文件并开始下载。
# scp 192.168.1.10:/path/to/bigfile.iso.torrent ~/
# qbittorrent
在qbittorrent窗口界面,选择菜单"File" -> "Add Torrent File...",然后选择我们刚刚拷贝过来的种子~/bigfile.iso.torrent。 当下载完成后,你可以选择让它不要退出来支持其他的工作服务器的下载。 如果要停止下载和共享。请删除种子并退出qbittorrent。
4. 综述
本文描述的端到端的比特洪流下载是私有的,不依赖外网,即使连接了外网也是对外网不可见的。 使用transmission这个工具,对集成到自动化脚本更加友好;使用qbittorrent也有一个不依赖跟踪器(tracker)的优势。
5. 安全
如果您是企业用户,请遵守贵公司的安全政策来评估使用端到端下载的工具。