多台负载均衡的服务器上传文件后如何确定文件在哪台静态服务器上

2023-10-20 11:13:35 +08:00
 laters

现在有两台后端服务器做负载均衡,上传文件时就可能会上传到任意一台服务器,这边上传完存储了一个静态地址,访问时就不知道访问哪台服务器的静态地址。目前想了三个方案都不太可行 1.上传时把服务器地址也记录下来,但如果后期服务器 IP 变更即失效 2.通过挂载的形式统一两台服务器的静态地址,但这个只适用 linux 服务器,如果是 windows 服务器则不支持 3.文件同步的方式,这种方式有同步失败的风险,最终也被 pass 掉。

请问有没有别的合理方式或解决方案?

5412 次点击
所在节点    云计算
66 条回复
dode
2023-10-20 14:28:25 +08:00
后端文件存储独立处理出来,提供多种方式网络共享,Linux 挂载 nfs ,Windows 挂载 smb
luomao
2023-10-20 14:32:41 +08:00
部署个 nas 把 用 nfs 的方案,我们目前也是大量再用文件服务,目前这个方案没出什么问题
cheng6563
2023-10-20 14:35:01 +08:00
其实,可以全部服务器查一遍的。。
Huelse
2023-10-20 14:36:33 +08:00
原则上应该建个数据库记录的,无论是查询或是后期做容灾备份都必不可少
nothingistrue
2023-10-20 14:38:57 +08:00
请注意:常规的自动负载均衡策略下,要求多个节点完全一样,包括后期上传的文件。「上传文件时就可能会上传到任意一台服务器」,这个行为本身就是一个 BUG 。

方案上面已经给了:用其他同步措施,把多个节点的后期上传文件,做同步。这个虽然是最简单的,同时也是绝大多数情况下最合理的。

当然如果你要更合理的话,那也有稍微复杂点的方案:
首先,将上传和下载路径的前段部分(含绝对路径),都做成可配置的(而不是自动获取当前服务所在目录);
然后,不管是哪个节点,上传文件都保存到一个位置,这个位置与后端服务节点不绑定,而是与宿主服务器的文件系统和 Nginx 绑定;
最后,给 Nginx 配个映射,让上传文件能通过 Nginx 直接访问。
pigspy
2023-10-20 14:41:33 +08:00
应当有一台高性能存储主机作为文件服务器用来专门存储文件,负载均衡只针对上传文件的接口,上传文件接口需要把文件传输到这台文件服务器上,下载文件的接口应当直接指向这台负责存储文件的服务器上
Fooooo0
2023-10-20 14:46:22 +08:00
好像大家不知道 nginx 的`try_file`可以实现,

当然推荐还是用分布式文件系统。
yongp
2023-10-20 14:55:40 +08:00
上传还放在单独的服务器上,不应该搞个共享存储,或者对象存储吗?
Features
2023-10-20 14:56:14 +08:00
负载均衡一般不是每个节点数据都一样吗?
不然负载均衡有啥意义呢?
所以应该在上传的时候,同步复制到所有节点上吧
yufeng0681
2023-10-20 15:13:58 +08:00
@tomczhen #27 说得对, 上传的文件和数据库其实是一个类型,不可能跟着集群多少来走的
题主可能希望一套代码打天下了,增加新的服务,虚拟一个文件管理服务,都增加了他的研发成本,运维也复杂, 未来因为集群引发的新问题,他也没去想,见招拆招(最小成本)。

-- nfs/smaba ,不靠谱:不方便后端的集群扩展,性能也是瓶颈,单点故障,nfs 也没法弄集群
-- nginx 配套固定规则上传, 不靠谱: 扩展集群规则歇菜,后台服务器的单点故障问题
-- minio , 靠谱: 其实就是要加个文件服务器,起步 1 台,如果遇到单点故障、上传性能的痛点,就弄 minio 集群
flashBee233
2023-10-20 15:15:30 +08:00
之前我们也是遇到了这个问题,尝试了文件自动同步,最后还是上了 OSS ,这里楼主可以使用 minio
hallDrawnel
2023-10-20 15:16:27 +08:00
如果你只有两台服务器而且业务看起来不怎么增长的话,最简单的方案就是做一个中间服务取的时候两台服务器都去访问一下。
wheat0r
2023-10-20 15:17:58 +08:00
用 docker 随便跑一个单节点 minio 试试就好了
IsaacYoung
2023-10-20 15:33:00 +08:00
就两台 都查一遍问题不大
goodryb
2023-10-20 15:43:10 +08:00
内网不花钱简单啊,A 、B 两个服务器,在 A 上面启动一个 smb 服务,B 挂载这个 smb 服务, 配置 A 、B 都读写相同 smb 目录,主要不是高并发业务,自己业务用用也足够了。

总计成本 :耗费运维 30 分钟时间。
corningsun
2023-10-20 16:52:12 +08:00
看起来你们服务可用性要求很低,那直接下掉一台后端服务器不就行了。
还能节省一半的服务器成本。
yc8332
2023-10-20 16:59:47 +08:00
1. 要么分布式存储
2. 要么就是直接是带域名的地址,这样就不会有问题了
Masoud2023
2023-10-20 17:15:48 +08:00
minio 非常好的选择,不然就自己手搓一个文件服务?
hahahasnoopy
2023-10-20 17:27:48 +08:00
你都负载均衡了,文件还是分开存储的,那均衡有啥用。直接用文件服务器管理文件吧,应用服务器通过内网连接文件服务器
fionasit007
2023-10-20 18:28:56 +08:00
内网搭建一个文件管理系统吧,文件上传后再上传到这个文件系统,走内网的话也没有什么损耗的,你要是这种分开管理,记录在那个服务器倒是好说,但是不方便文件整合和管理啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/983729

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX