背景介绍:
目前我们线上的前端服务器数量比较多,超过200多台,每次发布新应用的时候,都是将软件包放在一台专门的Push服务器上,再由所有的前端服务器通过rsync自动同步。但随着前端服务器的数量越来越多,Push服务器的带宽已经成为了瓶颈。
而BitTorrent Sync这种P2P方式的同步则是一种解决方案。同时它的跨平台支持也非常好,无论是Windows,Linux,Mac OS,甚至手机端都有相应的客户端。虽然目前尚未开源,但可以免费使用,还是很不错的。
下面,就是我们在线上的纯Linux测试环境中的安装与配置步骤:
Servers:
Master:idc2-server1
Slave:idc2-server2、idc2-server3
- 下载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.gz - 创建服务管理脚本,在所有服务器上
$ 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
btsync Code
sudo chmod +x /etc/init.d/btsync
- 创建用于同步的目录,在所有服务器上
sudo mkdir /opt/btsync_transfer - 创建配置文件,在idc2-server1上
sudo vim /opt/btsync/btsync.conf{ "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 }
btsync.conf Code
- 创建同步所需的密钥,在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 }
btsync.cfg Code
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 - 注意事项
如果是选择只读同步(服务器->本地),在文件传送完毕后如果不想再同步,记得在本地客户端上删除同步的目录,否则容易出现服务器端删除了文件,本地也会自动的删除该文件的情况。当然,读写同步更是如此。参考资料:
时间: 2024-11-08 09:07:03