zoukankan      html  css  js  c++  java
  • 在 Linux 上安装配置 BitTorrent Sync [转]

    背景介绍:
    目前我们线上的前端服务器数量比较多,超过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 -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

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

    4. 创建配置文件,在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
    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" : 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、主机名即可

    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

  • 相关阅读:
    算法笔记codeup-Contest100000568
    算法笔记codeup-Contest100000567
    算法笔记codeup-Contest100000566
    人工智能各种知识点(大杂烩)
    人工智能基础知识复习:机器学习
    人工智能基础知识复习:神经计算 演化计算 模糊计算
    人工智能基础知识复习:问题求解与搜索
    人工智能基础知识复习:推理技术
    前端基础知识学习:概念篇
    MYSQL
  • 原文地址:https://www.cnblogs.com/Mrhuangrui/p/4570262.html
Copyright © 2011-2022 走看看