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

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

  •  
  •   codingadog · 227 天前 · 1193 次点击
    这是一个创建于 227 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    非常感谢。

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

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

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

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