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

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

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

必须是文件系统吗,对象存储考虑吗,比如 minio

seaweedfs

juicefs

glusterfs 和 ceph ,机器装好对应的 rpm ,mount 就完了,代码应该是不需要改的

glusterFS

如果不用修改代码就真是太好了,我去看一下

我以为 minio 就是文件系统,对象存储应该也可以吧,其实我不太清楚他们的差异。主要需求两点:简单成本低,能实现高可用。

#7 minio 是对象存储,这种东西上传文件靠 cli 或者 api ,你需要改代码的。当然,glusterfs 和 cephfs 不用修改代码的前提是,你现在的文件操作是对在系统层面进行的(比如直接保存文件到本地路径),而不是像用 minio/oss/cos 这种 api 实现的。文件系统是直接作用在机器存储底层的,比如所熟知的 ntfs ,ext4 ,xfs ,但前面这些是单机系统,就是不具备网络共享的系统,如果要共享,需要依赖 nfs 、samba 协议/网络文件系统这种。glusterfs 和 cephfs 也是作用于机器存储底层的,但不同的是本身就是分布式共享存储,可以依赖 nfs ,也可以使用自己的 glusterfs 和 cephfs ,驱动由对应的 fuse 提供。===========你的第一点说 linux 文件共享不让用,我的理解是不能本机 samba 和 nfs 这种直接共享磁盘吧?不然分布式文件系统的本质也是文件共享。

#8 不让共享的意思就是不让使用 nfs 协议,好像说是不安全吧。大企业病,才不管你的具体场景,都是一刀切。上面说了好多,我消化一下。多谢!

minio

#9 猜到了,以我当前了解到的信息,建议你上 glusterfs 吧,操作简单,并且挂载的文件系统是 glusterfs ,满足对面的安全策略。FYI: docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/ docs.gluster.org/en/latest/Quick-Start-Guide/Architecture/#types-of-volumes使用 Replicated Glusterfs Volume 模式吧,类似 raid1 ,保护数据。

不建议分布式文件系统,如果网站产生的文件不复杂(比如同时读写同一份文件),不如写本地 + rsync + 定时备份原因是很多分布式存储的复杂性,可能比你的业务都高,出故障不一定能救回来如果真的需要一个存储服务,minio 有一定的高可用能力,api 丰富对于 web 场景够用了,如果真的需要一个文件系统,minio + redis/tikv + juicefs 是个不错的选择

高可用并不一定要用分布式。双机热备是成熟、稳定、有大量案例、出故障了能有很多高手帮忙救场的架构。不推荐分布式,因为无论 CephFS 、JuiceFS 、HDFS 、Zookeeper 、etcd 等等,都有一大堆坑。你们没加入用户讨论,没自己部署过,不理解里面的水有多深,就像上面的朋友说,出故障了,可能很少有人能帮你救场。这还不如传统的双机 lvm + ext4 + rsync ,简单、稳定、成熟、谁都能救场。

对象存储,fuse mount

请教如果 windows 要双机同步有什么好点方案

之前用的 rsync 多写,凑合用,

#6 使用块存储作为文件存储方案,就不需要改代码了,但是你的应用是不是分布式的呢

minio 吧 挺好用的

分布式文件系统可以养活一个团队,不说文件系统本身单单一个 fuse 的坑就够深了。计算、网络都可以从踩坑开始上线,存储可是会丢数据的,没有专门的人搞的情况下,慎重。

op 这情况,还是用 minio + 定时备份吧。分布式文件系统,一般团队驾驭不了。只不过需要改改业务代码,不过 minio 之类的对象存储 api 都挺简单的。

我之前用过一个 seaweedFs, github.com/seaweedfs/seaweedfs

freefilesync ,有命令行模式