V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
codingadog
V2EX  ›  问与答

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

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

    目前基本情况是共有>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 啊
    codingadog
        2
    codingadog  
    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
    codingadog
        5
    codingadog  
    OP
       2019-01-31 10:52:40 +08:00
    codingadog
        6
    codingadog  
    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 这个分布式文件系统也可以看一下,说不定适合你们的使用场景。
    codingadog
        9
    codingadog  
    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 是按照修改时间决定谁最新的。第一次同步会把冲突都标记出来手动解决,以后就总是按照时间同步了。
    codingadog
        12
    codingadog  
    OP
       2019-01-31 11:55:31 +08:00 via Android
    @xkeyideal 好的我整理 append 一下,感谢!
    codingadog
        13
    codingadog  
    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 的方式

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

    考虑用户手动触发,就需要考虑所说的数据是否存在冗余。如果大量的数据都是更新操作,那么上述方案完全没有问题。
    codingadog
        15
    codingadog  
    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 建议先看看一些分布式的资料,据我的了解不存在你说的问题,主写成功,会自动同步给从
    coolloves
        17
    coolloves  
       2019-01-31 14:54:09 +08:00   ❤️ 1
    我咋感觉最简单的就是某机器做主,开 nfs,然后挂载到从机上.
    然后可以做个 rsync,夜间同步到某从机上.为了冗余,不考虑可不做.
    codingadog
        18
    codingadog  
    OP
       2019-01-31 15:09:38 +08:00 via Android
    @xkeyideal 不,现在的问题是所有的机器上的文件都可能发生更新,没有固定的主从关系
    codingadog
        19
    codingadog  
    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 这个就需要你和你的团队从架构和需求上酌情处理了,别人也不了解你的业务场景,只能给出一些建议,上面也有很多人提供了同步的方案,都可以考虑,适合业务的才是最好的。
    不可能别人给个方案,你目前的架构完全不需要变更就能直接使用的
    coolloves
        21
    coolloves  
       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
    codingadog
        24
    codingadog  
    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 ?
    codingadog
        26
    codingadog  
    OP
       2019-01-31 23:18:45 +08:00
    @lynskylate 内网环境,无法连接到外网🙏
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1222 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:09 · PVG 02:09 · LAX 10:09 · JFK 13:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.