背景介紹:
目前咱們線上的前端服務器數量比較多,超過200多臺,每次發佈新應用的時候,都是將軟件包放在一臺專門的Push服務器上,再由全部的前端服務器經過rsync自動同步。但隨着前端服務器的數量愈來愈多,Push服務器的帶寬已經成爲了瓶頸。html
而BitTorrent Sync這種P2P方式的同步則是一種解決方案。同時它的跨平臺支持也很是好,不管是Windows,Linux,Mac OS,甚至手機端都有相應的客戶端。雖然目前還沒有開源,但能夠無償使用,仍是很不錯的。前端
下面,就是咱們在線上的純Linux測試環境中的安裝與配置步驟:linux
Servers:
Master:idc2-server1
Slave:idc2-server二、idc2-server3web
下載BitTorrent Sync,在全部服務器上
$ sudo wget http://download-lb.utorrent.com/endpoint/btsync/os/linux-x64/track/stable -O /tmp/btsync_x64.tar.gz
$ sudo mkdir /opt/btsync
$ cd /opt/btsync
$ sudo tar xzf /tmp/btsync_x64.tar.gzvim
建立服務管理腳本,在全部服務器上
$ sudo vim /etc/init.d/btsync
服務器
#!/bin/sh # # description: starts and stops the btsync client CONF=/opt/btsync/btsync.cfg PROC=/opt/btsync/btsync PIDFILE=/opt/btsync/btsync.pid start() { PID1=$(pidof btsync) if [ -z ${PID1} ]; then echo -n "Starting BitTorrent Sync: " ${PROC} --config ${CONF} else echo "BitTorrent Sync is already running at pid:${PID1}" fi return $? } stop() { echo -n "Stopping BitTorrent Sync: " PID1=$(pidof btsync) if [ ! -z ${PID1} ]; then kill -9 ${PID1} echo "OK" else echo "Failed" fi return $? } status() { PID1=$(pidof btsync) PID2=$(cat ${PIDFILE}) echo -n "Checking BitTorrent Sync: " if [ ! -z ${PID1} ] && [ "${PID1}" -eq "${PID2}" ]; then echo "OK" else echo "Failed" fi return $? } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; status) status ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 2 esac
sudo chmod +x /etc/init.d/btsyncdom
建立用於同步的目錄,在全部服務器上
sudo mkdir /opt/btsync_transfertcp
建立配置文件,在idc2-server1上
sudo vim /opt/btsync/btsync.conf
ide
{ "device_name": "idc2-server1", "listening_port" : 8889, // 0 - randomize port "check_for_updates" : false, "use_upnp" : false, "storage_path" : "/opt/btsync", "pid_file" : "/opt/btsync/btsync.pid", "download_limit" : 0, // 0 - no limit "upload_limit" : 0, "webui" : { "listen" : "0.0.0.0:8888", "login" : "admin", "password" : "btsync" } , "folder_rescan_interval" : 60, "lan_encrypt_data" : false, "lan_use_tcp" : true }
建立同步所需的密鑰,在idc2-server1上
sudo /etc/init.d/btsync start
打開Web UI:http://idc2-server1:8888
用戶名: admin
密碼: btsync測試
點擊 "Add Folder",
在 "Path" 中輸入 "/opt/btsync_transfer"
點擊 "Generate" 獲得 "Secret" 爲 "ALUORWDEWOLV354ZHPHFT4TSQO67JWQAN"
以下圖所示:
建立配置文件,在idc2-server2和idc2-server3上:
sudo vim btsync.cfg
{ #定義設備名稱,通常寫主機名或者IP "device_name": "idc2-server2", #是使用隨機端口仍是固定端口,0表示隨機 "listening_port" : 8889, // 0 - randomize port #是否檢查文件更新 "check_for_updates" : false, #使用UPnP進行端口映射 "use_upnp" : false, #storage_path包含一些運行時產生的狀態文件,若是沒有定義,則會在二進制命令運行的目錄下產生一個.sync隱藏目錄 "storage_path" : "/opt/btsync", #定義pid文件的路徑 "pid_file" : "/opt/btsync/btsync.pid", #是否對上傳/下載進行限速,0表示不限速 "download_limit" : 0, // 0 - no limit "upload_limit" : 0, "webui" : { #若是去掉listen項,則表示禁用WEB UI "listen" : "0.0.0.0:8888", "login" : "admin", #若是去掉login/password,則表示不用驗證 "password" : "btsync" } , #若是你在配置文件中設置了shared folders,則WEB UI中的會被禁止,配置文件中的會覆蓋UI中設置的。 "shared_folders" : [ { #你的secret,可使用--generate-secret參數生成 "secret" : "ALUORWDEWOLV354ZHPHFT4TSQO67JWQAN", // * required field #同步的目錄 "dir" : "/opt/btsync_transfer", // * required field #是否自動刪除文件 "use_sync_trash" : false, #是否使用中繼服務器 "use_relay_server" : true, #是否使用tracker服務器 "use_tracker" : true, "search_lan" : true, #設置不用查找就能夠直接鏈接的機器 "known_hosts" : [ "idc2-server1:8889" ] } ] , "folder_rescan_interval" : 60, "lan_encrypt_data" : false, // Encryption is very painful in terms of speed. Disabling it for LAN to increase the speed. "lan_use_tcp" : true }
sudo /etc/init.d/btsync start
idc2-server3 同 idc2-server2設置,只需更改IP、主機名便可
在/opt/btsync_transfer中放置一些文件,就能夠查看同步的狀態了
打開Web UI:http://idc2-server1:8888
#將示例配置文件保存到當前目錄下:
./btsync –dump-sample-config > sync.conf
#啓動btsync服務
./btsync –config sync.conf
注意事項
若是是選擇只讀同步(服務器->本地),在文件傳送完畢後若是不想再同步,記得在本地客戶端上刪除同步的目錄,不然容易出現服務器端刪除了文件,本地也會自動的刪除該文件的狀況。固然,讀寫同步更是如此。
參考資料: