请教各位,没有分布式文件系统的前提下,如何实现多台 Linux 机器上的文件夹级别同步呢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Duolingo
V2EX    问与答

请教各位,没有分布式文件系统的前提下,如何实现多台 Linux 机器上的件夹级别同步呢

  •  
  •   Duolingo 2019-01-31 10:24:53 +08:00 2941 次点击
    这是一个创建于 2448 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前基本情况是共有>2 台的机器跑分布式服务,每日往磁盘上固化数据,需要在机器之间同步文件夹。对于文件夹下的同名文件,将更新时间最新的版本同步到其它机器上。

    请教各位有什么现成的方案能实现这个功能吗?

    非常感谢。

    第 1 条附言    2019-01-31 12:08:42 +08:00
    1. 每天自动同步一次,但如果是用户手动触发操作,可能任意次数,但一般不会超过 10 次
    2. 自动同步数据量大约 500MB,平均单个文件大小 100MB 左右,如果是用户手动触发,总量可能增加到 10GB,极端情况下甚至可能达到 150GB,机器之间均为不低于千兆的专网互联
    3. 一般情况下,同步需要在 5 分钟内完成,暂不考虑极端情况
    4. 目前在有宕机的情况下,所有文件将生成在在线机器上,因此需要在机器恢复后能够恢复同步(可以在下次数据固化时恢复)
    26 条回复    2019-01-31 23:18:45 +08:00
    Rosanta
        1
    Rosanta  
       2019-01-31 10:38:04 +08:00   1
    rsync 啊
    Duolingo
        2
    Duolingo  
    OP
       2019-01-31 10:39:24 +08:00
    @Rosanta rsync 能实现同名文件根据文件时间同步最新的版本吗?
    hexinxucxy
        3
    hexinxucxy  
       2019-01-31 10:39:47 +08:00   1
    nas
    triptipstop
        4
    triptipstop  
       2019-01-31 10:39:48 +08:00   1
    EFS
    Duolingo
        5
    Duolingo  
    OP
       2019-01-31 10:52:40 +08:00
    Duolingo
        6
    Duolingo  
    OP
       2019-01-31 10:53:21 +08:00
    感谢,没有额外的机器了,同时同步的文件后续需要使用,因此应该不能通过这两种方式。
    msg7086
        7
    msg7086  
       2019-01-31 11:11:22 +08:00   1
    听上去就是个很普通的 Syncthing 的应用场景。
    msg7086
        8
    msg7086  
       2019-01-31 11:12:18 +08:00   1
    不过说实话,GlusterFS 这个分布式文件系统也可以看一下,说不定适合你们的使用场景。
    Duolingo
        9
    Duolingo  
    OP
       2019-01-31 11:20:39 +08:00 via Android
    @msg7086 年后上线来不及改了,主要是可能出现同名文件,同步最新的不知道怎么做
    xkeyideal
        10
    xkeyideal  
       2019-01-31 11:22:38 +08:00   1
    1、每日同步几次
    2、每次同步数据的大小
    3、对同步延迟的要求
    4、是否容忍一台或多台宕机

    把这四点好好介绍一下,别人能更好的给你方案
    msg7086
        11
    msg7086  
       2019-01-31 11:28:03 +08:00   1
    Syncthing 是按照修改时间决定谁最新的。第一次同步会把冲突都标记出来手动解决,以后就总是按照时间同步了。
    Duolingo
        12
    Duolingo  
    OP
       2019-01-31 11:55:31 +08:00 via Android
    @xkeyideal 好的我整理 append 一下,感谢!
    Duolingo
        13
    Duolingo  
    OP
       2019-01-31 11:56:20 +08:00 via Android
    @msg7086 好像能满足,我了解一下,谢谢
    xkeyideal
        14
    xkeyideal  
       2019-01-31 13:36:41 +08:00   2
    暂不考虑用户手动更新,推测一下,楼主的同步数据应该可以理解为更新数据,数据应该是逐条更新的,此种情况数据量并不大,可以考虑两种方案:
    1、采用 raft 协议,毕竟数据同步完之后还需要使用,此方案使用数据也一并解决了
    2、可以采用类似 mysql binlog 的方式

    上述两种方案核心都是主从同步,一主多从。

    考虑用户手动触发,就需要考虑所说的数据是否存在冗余。如果大量的数据都是更新操作,那么上述方案完全没有问题。
    Duolingo
        15
    Duolingo  
    OP
       2019-01-31 14:45:51 +08:00 via Android
    @xkeyideal 好的我看下这两种方案,如果主从方式的话,可能无法满足从机文件更新了,需要反向同步到主机上的问题,我去了解下这种反向同步能否满足
    xkeyideal
        16
    xkeyideal  
       2019-01-31 14:50:05 +08:00   1
    @codingadog 建议先看看一些分布式的资料,据我的了解不存在你说的问题,主写成功,会自动同步给从
    sparkssssssss
        17
    sparkssssssss  
       2019-01-31 14:54:09 +08:00   1
    我咋感觉最简单的就是某机器做主,开 nfs,然后挂载到从机上.
    然后可以做个 rsync,夜间同步到某从机上.为了冗余,不考虑可不做.
    Duolingo
        18
    Duolingo  
    OP
       2019-01-31 15:09:38 +08:00 via Android
    @xkeyideal 不,现在的问题是所有的机器上的文件都可能发生更新,没有固定的主从关系
    Duolingo
        19
    Duolingo  
    OP
       2019-01-31 15:10:12 +08:00 via Android
    @coolloves 没有固定的主从,任何一台机器上的文件都可能发生更新
    xkeyideal
        20
    xkeyideal  
       2019-01-31 15:21:59 +08:00   1
    @codingadog 这个就需要你和你的团队从架构和需求上酌情处理了,别人也不了解你的业务场景,只能给出一些建议,上面也有很多人提供了同步的方案,都可以考虑,适合业务的才是最好的。
    不可能别人给个方案,你目前的架构完全不需要变更就能直接使用的
    sparkssssssss
        21
    sparkssssssss  
       2019-01-31 15:45:06 +08:00   1
    @codingadog nfs 就是共用一个存储啊,把指定的存储挂载到剩下的 n-1 台机器上,一台更新,即所有都使用最新的.
    对性能方面会受到网络的影响,然后没有冗余.
    胜在简单.高级点,可以考虑 gfs
    swulling
        22
    swulling  
       2019-01-31 15:49:38 +08:00   1
    NFS 应该是可以的
    jelen0101
        23
    jelen0101  
       2019-01-31 17:03:54 +08:00   1
    lsyncd
    Duolingo
        24
    Duolingo  
    OP
       2019-01-31 17:44:17 +08:00 via Android
    初步了解了一下各位的方案,正在尝试解决中非常感谢各位!
    lynskylate
        25
    lynskylate  
       2019-01-31 22:28:35 +08:00 via Android   1
    ...为啥不直接用 oss ?
    Duolingo
        26
    Duolingo  
    OP
       2019-01-31 23:18:45 +08:00
    @lynskylate 内网环境,无法连接到外网
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4430 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 10:10 PVG 18:10 LAX 03:10 JFK 06:10
    Do have faith in what you're doing.
    ubao 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