V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
catamaran
V2EX  ›  程序员

求推荐分布式文件系统

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

    先说一下需求,产品是个企业中实现处理业务的网站,很多客户要求实现高可用。数据库这块好弄,主要是文件处理比较麻烦。希望 v 友给些方案和建议。

    我的方案:

    1. linux 文件共享。实现简单,缺点是有些客户不让用,死规矩。
    2. nas 系统,同上,客户不保证提供部署环境。
    3. 自己写服务,同步不同服务器的文件。缺点:比较麻烦,可能坑比较多(现成的轮子也可以)
    4. 分布式文件系统。缺点:现在系统中访问文件的地方都需要改写,会损失一些性能。

    倾向方案 4 ,请 v 友推荐一下功能简单,改写代码成本低的文件系统。

    25 条回复    2024-09-26 22:23:44 +08:00
    Ayanokouji
        1
    Ayanokouji  
       53 天前   ❤️ 1
    必须是文件系统吗,对象存储考虑吗,比如 minio
    hetal
        2
    hetal  
       53 天前
    seaweedfs
    lxy42
        3
    lxy42  
       53 天前 via Android
    juicefs
    NevadaLi
        4
    NevadaLi  
       53 天前
    glusterfs 和 ceph ,机器装好对应的 rpm ,mount 就完了,代码应该是不需要改的
    defunct9
        5
    defunct9  
       53 天前
    glusterFS
    catamaran
        6
    catamaran  
    OP
       53 天前
    @NevadaLi 如果不用修改代码就真是太好了,我去看一下
    catamaran
        7
    catamaran  
    OP
       53 天前
    @Ayanokouji 我以为 minio 就是文件系统,对象存储应该也可以吧,其实我不太清楚他们的差异。主要需求两点:简单成本低,能实现高可用。
    NevadaLi
        8
    NevadaLi  
       53 天前   ❤️ 1
    @catamaran #7 minio 是对象存储,这种东西上传文件靠 cli 或者 api ,你需要改代码的。当然,glusterfs 和 cephfs 不用修改代码的前提是,你现在的文件操作是对在系统层面进行的(比如直接保存文件到本地路径),而不是像用 minio/oss/cos 这种 api 实现的。

    文件系统是直接作用在机器存储底层的,比如所熟知的 ntfs ,ext4 ,xfs ,但前面这些是单机系统,就是不具备网络共享的系统,如果要共享,需要依赖 nfs 、samba 协议/网络文件系统这种。

    glusterfs 和 cephfs 也是作用于机器存储底层的,但不同的是本身就是分布式共享存储,可以依赖 nfs ,也可以使用自己的 glusterfs 和 cephfs ,驱动由对应的 fuse 提供。

    ===========

    你的第一点说 linux 文件共享不让用,我的理解是不能本机 samba 和 nfs 这种直接共享磁盘吧?不然分布式文件系统的本质也是文件共享。
    catamaran
        9
    catamaran  
    OP
       53 天前
    @NevadaLi #8 不让共享的意思就是不让使用 nfs 协议,好像说是不安全吧。大企业病,才不管你的具体场景,都是一刀切。上面说了好多,我消化一下。多谢!
    HUNTERXHUNTER
        10
    HUNTERXHUNTER  
       53 天前
    minio
    NevadaLi
        11
    NevadaLi  
       53 天前   ❤️ 1
    @catamaran #9 猜到了,以我当前了解到的信息,建议你上 glusterfs 吧,操作简单,并且挂载的文件系统是 glusterfs ,满足对面的安全策略。

    FYI:
    https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/
    https://docs.gluster.org/en/latest/Quick-Start-Guide/Architecture/#types-of-volumes
    使用 Replicated Glusterfs Volume 模式吧,类似 raid1 ,保护数据。
    HypoChen
        12
    HypoChen  
       53 天前
    不建议分布式文件系统,如果网站产生的文件不复杂(比如同时读写同一份文件),不如写本地 + rsync + 定时备份
    原因是很多分布式存储的复杂性,可能比你的业务都高,出故障不一定能救回来

    如果真的需要一个存储服务,minio 有一定的高可用能力,api 丰富对于 web 场景够用了,如果真的需要一个文件系统,minio + redis/tikv + juicefs 是个不错的选择
    laminux29
        13
    laminux29  
       53 天前
    高可用并不一定要用分布式。双机热备是成熟、稳定、有大量案例、出故障了能有很多高手帮忙救场的架构。

    不推荐分布式,因为无论 CephFS 、JuiceFS 、HDFS 、Zookeeper 、etcd 等等,都有一大堆坑。你们没加入用户讨论,没自己部署过,不理解里面的水有多深,就像上面的朋友说,出故障了,可能很少有人能帮你救场。这还不如传统的双机 lvm + ext4 + rsync ,简单、稳定、成熟、谁都能救场。
    guo4224
        14
    guo4224  
       53 天前
    对象存储,fuse mount
    standin000
        15
    standin000  
       53 天前
    @laminux29 请教如果 windows 要双机同步有什么好点方案
    huigeer
        16
    huigeer  
       53 天前 via iPhone
    之前用的 rsync 多写,凑合用,
    tolbkni
        17
    tolbkni  
       53 天前
    @catamaran #6 使用块存储作为文件存储方案,就不需要改代码了,但是你的应用是不是分布式的呢
    wogogoing
        18
    wogogoing  
       53 天前 via iPhone
    minio 吧 挺好用的
    Reficul
        19
    Reficul  
       53 天前
    分布式文件系统可以养活一个团队,不说文件系统本身单单一个 fuse 的坑就够深了。计算、网络都可以从踩坑开始上线,存储可是会丢数据的,没有专门的人搞的情况下,慎重。
    Ayanokouji
        20
    Ayanokouji  
       52 天前
    op 这情况,还是用 minio + 定时备份吧。分布式文件系统,一般团队驾驭不了。
    只不过需要改改业务代码,不过 minio 之类的对象存储 api 都挺简单的。
    Desdemor
        21
    Desdemor  
       52 天前
    我之前用过一个 seaweedFs, https://github.com/seaweedfs/seaweedfs
    catamaran
        22
    catamaran  
    OP
       52 天前
    @standin000 freefilesync ,有命令行模式
    laminux29
        23
    laminux29  
       52 天前
    @standin000 Windows 那边各种稀奇古怪的同步工具,更多了,比如 Sync Back Pro ,这软件是企业级的,功能比 EMC 还强,百度有开心版。
    catamaran
        24
    catamaran  
    OP
       52 天前
    @HypoChen 感谢回复,文件不多,而且也不是很重要,主要是客户要求高可用。
    cc666
        25
    cc666  
       52 天前
    可以把 S3 或者 minio 等对象存储挂载为本地文件系统 https://github.com/awslabs/mountpoint-s3 ,缺点是可能不支持编辑,只支持读取和上传。

    还是觉得自己维护一个分布式文件系统坑太多了,即使不 mount 对象存储为本地文件系统,将原有的文件代码改为对象存储的 API 应该也不难,要是到处都要改基本就是原有的设计有问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1262 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:39 · PVG 01:39 · LAX 09:39 · JFK 12:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.