V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
shepherd
V2EX  ›  云计算

有没有类似分布式的 rsync 文件同步部署方案?

  •  
  •   shepherd · 2015-12-30 00:05:22 +08:00 · 6080 次点击
    这是一个创建于 3034 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在做一个项目,多个客户端需要从 rsync 服务器上获取文件,不同客户机需要获取的文件不一定相同(而且相同的概率很小),目前只使用了一台 rsync 服务器,这样一来,当多个客户端同时启动时, rsync 服务器的网络带宽和 IO 瞬间被占满。所以需要考虑使用分布式或者其他的方式来提高文件分发效率。
    目前想过几个方案,但是都不算完美:
    1.手动布设多个 rsync 服务器,通过控制客户端的配置信息来为其指定 rsync 服务器。这种方案无法最大化发挥多个 rsync 服务器的性能,因为不同客户端需要同步的文件的大小也是有很大差异的( 2G~10G 不等),可能会导致资源的分配不均。
    2.btsync ,其设计的思想基本能吻合需求,但是首先不开源,其次客户端只能在命令行下进行自动化的操作,配置和使用起来比较麻烦,不同客户端同步的文件不同,因此可能需要为每个客户端都生成一个种子。
    项目对数据传输加密或不加密并没有严格要求,最主要是性能。

    第 1 条附言  ·  2015-12-30 11:47:09 +08:00
    刚才在本地搭建 syncthing 测试了一下,环境如下:
    使用两个节点作为源(文件夹内容完全相同,约 10 个文件,其中有一个 2G 大小的单文件),向第三个节点下发文件夹。发现以下问题:
    1.速度并没有更快。在客户端上直接用 rsync 从单台服务器上同步文件时,速度能达到 4MB/s 左右;在本环境下测试时,速度只有 2.5MB/s 左右。
    2.syncthing 的部署和配置相对较繁琐。大部分参数都是在 web gui 上进行配置的,客户端为了能获得多源支持,需要将所有源设备都添加到本地的 syncthing 配置中。

    由于生产环境中,客户端的数量、客户端需要同步的文件内容都是不固定的,所以移植 syncthing 的开销不小,实际上,只需要 syncthing 文件同步核心部分的功能即可,数据块的加密功能都可以去掉。不过 syncthing 确实可以从多个源上获取数据,特别是在同步大文件的时候,效果明显,预计增加文件源的数量即可提高传输效率。准备把 syncthing 的源码看一下。
    12 条回复    2015-12-30 09:12:20 +08:00
    kozora
        1
    kozora  
       2015-12-30 00:08:26 +08:00
    刚好部署了几台,我是都是在同一个区域的机器,走内网的话,其实还是很快的
    shepherd
        2
    shepherd  
    OP
       2015-12-30 00:18:01 +08:00 via Android
    @kozora 我这也是走内网,一个 B 类网,中间有一些网络设备。
    murusu
        3
    murusu  
       2015-12-30 00:22:03 +08:00
    syncthing
    lecher
        4
    lecher  
       2015-12-30 00:25:27 +08:00   ❤️ 1
    既然不同客户机获取的文件相同的概率很低,不管哪种方案,不同客户机要同步的文件还是要有独立的配置,这个问题还是回到了手动配置多个权限的事情上面。
    所以只要一个同步配置是存在 3 台以上的跨地域服务器,我觉得 btsync 是一个不错的临时解决方案,因为用 rsync 更容易让主服务器出现带宽瓶颈。
    毕竟 rsync 和 btsync 都依赖定时任务去唤醒同步检测, rsync 如果同步数据过大,定时间隔设置不好会出现重复任务占用带宽, btsync 至少没有这个同步时间过长会重新发起新任务的问题。
    likuku
        5
    likuku  
       2015-12-30 00:27:17 +08:00
    看着需求,目前也只有 btsync 可以做到了。

    btsync 客户端有 GUI 的啊。
    likuku
        6
    likuku  
       2015-12-30 00:31:01 +08:00
    或者自建磁力链系统,通过 openvpn 自有网络来磁力传输,设计客户端可以定期去抓最新磁链 + 给客户端推最新磁链
    shepherd
        7
    shepherd  
    OP
       2015-12-30 00:55:04 +08:00 via Android
    @lecher 这里的同步是不需要定期执行的,一般只在客户端启动的时候执行。
    @likuku 哦哦,刚才没描述清楚,客户端是需要在命令行下调用 btsync 。
    另外,这些机器都是不连接互联网的。
    willis
        8
    willis  
       2015-12-30 02:35:46 +08:00 via iPhone
    提醒下楼主, rsync 支持限速的,自己按实际带宽和客户端数量限制一下速度,就解决了带宽和 io 占满的问题了
    shepherd
        9
    shepherd  
    OP
       2015-12-30 06:59:29 +08:00 via Android
    @willis 嗯,其实最需要解决的问题是:客户端太多导致每个客户端同步的时候速度很慢。所以才相当能不能不服务器做成类似 CDN 的效果
    julor
        10
    julor  
       2015-12-30 07:50:10 +08:00 via Android   ❤️ 1
    试试 syncthing ,就是 btsync 的开源版
    Yamade
        11
    Yamade  
       2015-12-30 08:52:59 +08:00   ❤️ 2
    shepherd
        12
    shepherd  
    OP
       2015-12-30 09:12:20 +08:00 via Android
    @julor @Yamade 嗯,正在测试 syncthing 的部署效果
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2628 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:55 · PVG 09:55 · LAX 18:55 · JFK 21:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.