背景介绍:
目前我们线上的前端服务器数量比较多,超过200多台,每次发布新应用的时候,都是将软件包放在一台专门的Push服务器上,再由所有的前端服务器通过rsync自动同步。但随着前端服务器的数量越来越多,Push服务器的带宽已经成为了瓶颈。

而BitTorrent Sync这种P2P方式的同步则是一种解决方案。同时它的跨平台支持也非常好,无论是Windows,Linux,Mac OS,甚至手机端都有相应的客户端。虽然目前尚未开源,但可以免费使用,还是很不错的。

下面,就是我们在线上的纯Linux测试环境中的安装与配置步骤:

Servers:
Master:idc2-server1
Slave:idc2-server2、idc2-server3

  1. 下载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

  2. 创建服务管理脚本,在所有服务器上
    $ 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 - ${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
    start
    ;;
    status)
    status
    ;;
    *)
    echo $"Usage: $0 {start|stop|restart|status}"
    exit
    esac

    btsync Code

    sudo chmod +x /etc/init.d/btsync

  3. 创建用于同步的目录,在所有服务器上
    sudo mkdir /opt/btsync_transfer

  4. 创建配置文件,在idc2-server1上
    sudo vim /opt/btsync/btsync.conf

     {
    "device_name": "idc2-server1",
    "listening_port" : , // 0 - randomize port "check_for_updates" : false,
    "use_upnp" : false, "storage_path" : "/opt/btsync",
    "pid_file" : "/opt/btsync/btsync.pid", "download_limit" : , // 0 - no limit
    "upload_limit" : , "webui" :
    {
    "listen" : "0.0.0.0:8888",
    "login" : "admin",
    "password" : "btsync"
    } ,
    "folder_rescan_interval" : ,
    "lan_encrypt_data" : false,
    "lan_use_tcp" : true
    }

    btsync.conf Code

  5. 创建同步所需的密钥,在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"
    如下图所示:

  6. 创建配置文件,在idc2-server2和idc2-server3上:
    sudo vim btsync.cfg

    {
    #定义设备名称,一般写主机名或者IP
    "device_name": "idc2-server2",
    #是使用随机端口还是固定端口,0表示随机
    "listening_port" : , // 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 - no limit
    "upload_limit" : ,
    "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" : ,
    "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、主机名即可

  7. 在/opt/btsync_transfer中放置一些文件,就可以查看同步的状态了
    打开Web UI:http://idc2-server1:8888
    #将示例配置文件保存到当前目录下:
    ./btsync –dump-sample-config > sync.conf
    #启动btsync服务
    ./btsync –config sync.conf

  8. 注意事项
    如果是选择只读同步(服务器->本地),在文件传送完毕后如果不想再同步,记得在本地客户端上删除同步的目录,否则容易出现服务器端删除了文件,本地也会自动的删除该文件的情况。当然,读写同步更是如此。

    参考资料:

    http://heylinux.com/archives/2917.html

    http://my.oschina.net/guol/blog/202002

在 Linux 上安装配置 BitTorrent Sync [转]的更多相关文章

  1. linux上安装配置samba服务器

    linux上安装配置samba服务器 在linux上安装配置samba服务器 在这给大家介绍一个不错的家伙,samba服务.如果您正在犯愁,如何在Windows和Linux之间实现资源共享,就请看看这 ...

  2. Linux上安装配置Keepalived

    Linux上安装配置Keepalived 1.下载 自行去Keepalived官网进行下载,也可以通过如下链接进行下载2.0.18版本(目前的稳定版) 链接:https://pan.baidu.com ...

  3. linux 上安装配置l2tp的客户端

    有些时候我们外网linux服务器需要访问内网的服务器,这时候就需要在外网服务器上配置l2tp的客户端,连接到VPN访问内网服务器. 安装: yum -y install xl2tpd ppp 安装成功 ...

  4. Ubuntu Linux上安装配置Mysql

    一.安装: 三种安装方式: 1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt ...

  5. linux上安装配置vsftpd(转)

    转自:http://www.webarch.org/category/linux生产环境是Centos5.6,由于需要提供ftp服务,就找了一款比较小巧的ftp服务器端软件,vsftpd(vsftpd ...

  6. linux上安装配置vsftpd

    启动: /usr/sbin/vsftpd & 端口占用: lsof -i:21 位置: whereis vsftpd 默认配置下,匿名用户登录 vsftpd 服务后的根目录是 /var/ftp ...

  7. redis3.0.5在linux上安装与配置

    redis3.0.5在linux上安装与配置 rhel6/ubuntu14 1 下载 # wget http://download.redis.io/releases/redis-3.0.5.tar. ...

  8. Linux上安装jdk1.8和配置环境变量

    前言 Linux 上安装jdk1.8 和配置环境变量,参考相关文档,本人在此总结,操作归纳如下. 第一步:创建jdk安装目录(该/usr/local/src 目录是空的,最好把我们自己下载的放到这,容 ...

  9. 阿里云服务器Linux CentOS安装配置(九)shell编译、打包、部署

    阿里云服务器Linux CentOS安装配置(九)shell编译.打包.部署 1.查询当前目录以及子目录下所有的java文件,并显示查询结果 find . -name *.java -type f - ...

随机推荐

  1. Luogu P3327 [SDOI2015]约数个数和

    又是恶心的莫比乌斯反演,蒟蒻我又是一脸懵逼的被CXR dalao狂虐. 题目要求\(ans=\sum_{i=1}^n \sum_{j=1}^m d(ij)\),其中\(d(ij)\)表示数\(x\)的 ...

  2. pandas:解决groupby().apply()方法打印两次

    对于以下dataframe执行dataframe.groupby(['name', 'course']).apply(lambda x: test(x)) 操作 其中test(x)函数为: def t ...

  3. 机器学习 第五篇:分类(kNN)

    K最近邻(kNN,k-NearestNeighbor)算法是一种监督式的分类方法,但是,它并不存在单独的训练过程,在分类方法中属于惰性学习法,也就是说,当给定一个训练数据集时,惰性学习法简单地存储或稍 ...

  4. layer.conifrm 非阻塞执行 ztree删除节点 问题

    layer.confirm无法阻塞js执行,导致ztree插件的beforeRemove回调函数未等待用户确定删除便已经移除界面中的节点, 因此可能会出现前后台数据不一致情况,正常逻辑理应删除后台数据 ...

  5. 我的devops实践经验分享一二

    前言 随着系统越来越大,开发人员.站点.服务器越来越多,微服务化推进,......等等原因,实现自动化的devops越来越有必要. 当然,真实的原因是,在团队组建之初就预见到了这些问题,所以从一开始就 ...

  6. MySQL高可用架构-MMM环境部署记录

    MMM介绍MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控和管理 ...

  7. Python进阶量化交易专栏场外篇7- 装饰器计算代码时间

    欢迎大家订阅<教你用 Python 进阶量化交易>专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前已推出如下扩展篇: 在第一篇 ...

  8. Linux大棚命令记录

    查看系统支持的shell: cat  /etc/shells 查看当前系统用的shell: echo $SHELL 从bash切换到zsh: 先yum安装,然后 chsh -s /bin/zsh ,退 ...

  9. Linux常用指令【转载】

    [收藏]Linux常用指令[转载] $ 命令行提示符 粗体表示命令 斜体表示参数 filename, file1, file2 都是文件名.有时文件名有后缀,比如file.zip command 命令 ...

  10. Linux内核第八节 20135332武西垚

    第一种分类: I/O-bound:频繁进行I/O,并且需要花费很多时间等待I/O完成 CPU-bound:计算密集,需要大量的CPU时间进行运算 第二种分类: 批处理进程:不必与用户交互,常在后台进行 ...