利用BT構建簡單的CDN網路

大囚長發表於2019-01-07

種子下載源需部署到公網伺服器上,部署在內網伺服器上沒見成功下載過。

一、 伺服器上部署tracker服務 tracker伺服器建議採用OpenTracker(據說可以在生產環境下使用)。OpenTracker/BitTorrent3.4.2/BitTorrent5.0.9/BitTornado任選其一,建議OpenTracker

系統環境:

python2.7

(一) 關閉防火牆或設定允許 systemctl status firewalld systemctl stop firewalld

(二) OpenTracker yum install epel-release yum -y groupinstall “Development Tools” yum -y install openssl-devel zlib-devel

先編譯libowfat: cd libowfat make

然後再編譯opentracker: cd … cd opentracker make

如果編譯中出現__builtin_bswap16相關的錯誤,則 vi libowfat/uint16.h 加入 static inline unsigned short __builtin_bswap16(unsigned short a) { return (a<<8)|(a>>8); }

完成之後,我們將二進位制檔案移動到/usr/bin: cp opentracker /usr/bin

/usr/bin/opentracker -p 1337 -P 1337

製作種子的時候,我們新增Tracker伺服器時,可以這麼寫: http://你的伺服器公網IP:1337/announce

或者: udp://你的伺服器公網IP:1337/announce

當然也可以同時新增http和udp,這個不受影響。注意:udp的相容性不好,舊的bt客戶端不支援,如BitTorrent3.4.2

OpenTracker還有一個自帶的統計功能: http://你的伺服器公網IP:1337/stats

更詳細的統計資訊訪問: http://你的伺服器公網IP:1337/statsmode=everything

(三) BitTorrent3.4.2 參考:https://blog.csdn.net/deccmtd/article/details/5432495

1、安裝bittorrent BitTorrentg下載 tar zxvf BitTorrent-3.4.2.tar.gz cd BitTorrent-3.4.2 python setup.py install

2、啟動Tracker服務 ./bttrack.py –port 6969 –dfile dstate >>/var/log/bttrack.log #表示開啟6969並記錄log

3、製作BT釋出檔案

(四) BitTorrent5.0.9

yum install python-devel python-crypto pyOpenSSL zope

安裝python-pip https://pypi.org/project/pip/#files

升級pyopenssl

pip install pyopenssl –user –upgrade 安裝python-setuptools yum install python-setuptools

https://pypi.org/project/setuptools/

python setup.py install 安裝python-twisted yum install python-twisted (在centos6.5上可以,在centos7上不行)

https://pypi.org/project/Twisted/#files

安裝BitTorrent5.0.9 python setup.py install

啟動tracker服務 /usr/bin/bittorrent-tracker –port 6969 –dfile dstate

(五) 伺服器上部署安裝BitTornado http://www.bittornado.com/官網,2004年3月釋出初始版本,2006年釋出0.3.18後未見更新。github上有別的持續更新,但測試中發現有問題 https://github.com/effigies/BitTornado

安裝python3 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
tar xvf Python-3.6.2.tar.xz cd Python-3.6.2 ./configure –prefix=/usr/local/python3 make && make install

ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 二、 製作種子檔案.torrent 簡單通過bitComet或uTorrent製作種子後,將種子提供給他人,並不能正常下載。通過在伺服器上啟動種子源下載,才見有下載進度。製作種子可以使用BitComet、btmakemetafile.py等均可。

(一) BitTorrent3.4.2 ./btmakemetafile.py /home/media/chaoshikongtongju.mp4 http://www.yourdomain.com:1337/announce #btmakemetafile.py 目錄或者檔案 track伺服器地址和埠 (二) BitTorrent-5.0.9 某個檔案: /usr/bin/maketorrent-console http://192.168.0.7:1337/announce /home/media/sample.mp4 某個目錄: /usr/bin/maketorrent-console http://192.168.0.7:1337/announce /home/media/sample

三、 在伺服器上啟動種子下載源

(一) BitTorrent3.4.2

啟動原始下載服務(seed) nohup ./btdownloadheadless.py –max_allow_in 20 –max_upload_rate 500 –minport 6888 –maxport 6888 /home/media/chaoshikongtongju.mp4.torrent –saveas /home/media/chaoshikongtongju.mp4 >/dev/null &

–saveas 後面是下載後儲存的檔名(同原始檔名路徑,這樣這個任務即等同完成了下載後的提供源資料的下載任務)

/data/www/client/myfile.exe.torrent 釋出檔案的位置 /data/www/client/myfile.exe 實際位置 –maxallow 20 指這個種子最多可以接受20個連線 –maxupload_rate 500 指這個種子最大的可以接受下載的頻寬 500 KB(byte)/s,這樣可以控制下載頻寬。 –minport 6888 –maxport 6888 最大最小監聽埠,這樣寫就是說種子只監聽6888埠,這樣方便在防火牆上開埠。

作為BT伺服器.目標是共享更多的檔案給使用者下載,如果對於每個“種子”都要啟動一個Downloader,不但非常煩瑣,可能還會大大影響伺服器效率。

為了解決這個問題,BitTorrent提供了另外兩個Downloader程式btlaunchmany.py和btlaunchmanycurses.py。這兩個程式會定時檢查指定目錄,對其中的所有“種子”啟動Downloader,並根據目錄內容增加和刪除Downloader。 btlaunchmanycurses.py是一個圖形控制檯介面,而btlaunchmany.py則更適合於後臺執行程式。 btlaunchmanycurses.py需要圖形介面.還需要給下載頻道負責人伺服器的許可權.所以我們使用btlaunchmany.py後臺執行程式. 用法如下:

#/usr/bin/btlaunchmany.py –data_dir /源目錄 –torrent_dir /種子目錄
啟動後.btlaunchmany.py使用6881埠.預設每隔120秒到種子目錄探測一次.

(二) BitTorrent-5.0.9 ./bittorrent-console.py /home/media/chaoshikongtongju.mp4.torrent –save_as /home/media/chaoshikongtongju.mp4

/usr/bin/launchmany-console /home/media

四、 在http上部署torrent檔案下載源 需要配置Web伺服器,將.torrent檔案和application/x-bittorrent相關聯。編輯Apache的配置檔案httpd.conf,新增如下內容:

AddType application/x-bittorrent .torrent

然後重新啟動Web伺服器,並將剛剛製作的“種子”放置在Web伺服器的提供下載的目錄中,讓使用者可以訪問

五、 linux上部署bt客戶端

yum install python-devel cmake

cd boost. ./bootstrap.sh ./b2 ./b2 install

cd /tmp/libtorrent-rasterbar-1.1.10 ./configure make && make install

cd examples cmake . make

./client_test 檔案.torrent

即可看到下載過程。

六、 Windows上的bt客戶端

BitComet會出現一直無法下載的問題,估計因為被官方詬病後,禁止其連線有關。 使用μTorrent正常。

七、 利用bt構建點播節目分發系統 節目分發伺服器採用centos、ubuntu等大規模應用安裝的系統,方便部署。 基於內網的伺服器採用iso封裝的形式,安裝系統更簡便。

(一) 節目分發服務 MovieSource 1. 上傳方式/節目入庫 一部電影一個目錄,目錄下包含海報圖片,一個或多個電影檔案(連續劇); 電影檔案上傳採用SFTP方式、上傳完畢後,通過http觸發一鍵入庫,入庫同時生成torrent檔案。入庫的電影預設以主檔名做為電影名,(電影名、入庫時間、電影檔名、torrent)其他資訊為空,需完善後才能上架。初期可通過phpMyAdmin來操作。 2. Bt Server 使用launchmany-console.py對某一目錄下所有torrent檔案進行監視,提供bt下載更新服務。

資料庫 電影資訊表 包含電影名、評分、上映日期、型別、導演、主演、片長、國家地區、簡介、檔名、入庫時間、torrent檔案下載地址、FTP下載地址、上架狀態、海報圖等資訊; 客戶端點播次數和付費次數應能更新進電影資訊資料庫,以用於優化分發; vod伺服器資訊表 數字id,機器碼,是否分發,
Http Server 提供電影資訊查詢介面,用於更新電影

為避免電影資源被非法盜用,此查詢介面需要加認證,避免非法使用者和同一帳號同時登陸,應保證一個帳號只能在一臺機器上使用。 電影優先更新熱播電影Top100、付費率高電影、新入庫電影,以加快分發效率;

(二) 管理伺服器 VodManager 對所有內網點播伺服器進行管理 設定點播伺服器在雲朵上對應的組織號 接收訂單回撥

(三) 內網點播伺服器 VodServer MovieUpdate 連線MovieSource,執行Login,認證通過則獲取到待更新的節目列表,將節目資料儲存到本地資料庫中。

MovieDownload 讀取本地資料庫中的待更新節目資料,啟動下載任務,將電影下載到本地硬碟中,下載完成後,將相應的節目記錄上架。 電影更新程式,預設設定2臺“節目分發伺服器”地址 可指定將電影更新到哪個目錄下。

HTTP服務:給點播終端apk提供電影點播服務、及節目清單查詢介面。 供apk查詢電影節目列表的資料介面 最簡的登陸管理後臺,可控制下架哪個節目;(可選)

BT分發服務 是否開啟種子下載源服務,在雲端可開關。 使用launchmany-console.py對某一目錄下所有torrent檔案進行監視,提供bt下載更新服務。

FRP服務 連線管理伺服器VodManager

八、 為BT增加認證 由於bt客戶端在下載torrent檔案後,會連線tracker伺服器獲取相關資訊,因此可通過修改libtorrent客戶端和opentracker程式碼,在http的url中加入相關認證

對libtorrent客戶端的修改主要在src\http_tracker_connection.cpp中, 對opentracker的修改應該在ot_http.c中http_handle_announce方法

對BitTorrent-5.0.9的種子源服務(也是opentracker的客戶端之一)的BitTorrent\Rerequester.py的def _announce方法進行修改。

相關文章