有没有类似分布式的 rsync 文件同步部署方案? - V2EX
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 6651 次点击
    这是一个创建于 3656 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在做一个项目,多个客户端需要从 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 的啊。
        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     Solana     2123 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 16:08 PVG 00:08 LAX 08:08 JFK 11:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86