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

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

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

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

5411 次点击
所在节点    云计算
66 条回复
m3ops2021
2023-10-20 11:18:42 +08:00
看看 fastdfs ?
laters
2023-10-20 11:20:03 +08:00
@m3ops2021 支持内网吗, 目前我们都是内网
28Sv0ngQfIE7Yloe
2023-10-20 11:20:55 +08:00
感觉是不是需要一个分布式文件系统
laters
2023-10-20 11:22:18 +08:00
@Morii 有好的工具或解决方案吗 ?
zkl2333
2023-10-20 11:23:04 +08:00
oss
seers
2023-10-20 11:24:04 +08:00
你需要一个分布式文件系统+1 ,win 可以挂载 nfs 或者 smb
GoRoad
2023-10-20 11:24:16 +08:00
minio 可破
laters
2023-10-20 11:24:29 +08:00
目前只能是内网,如何能做到
28Sv0ngQfIE7Yloe
2023-10-20 11:27:31 +08:00
@laters #4 我想了下,简单的话 你直接 hash 文件名 决定进哪台服务器,取的时候再 hash 下判断文件再哪台服务器上,拼接下静态地址就行了吧?

分布式的话上个 minio 就差不多了
opengps
2023-10-20 11:29:15 +08:00
回话类,文件类服务不适合使用负载均衡。你们为啥会把文件服务器放在负载均衡后面?即使要用也得用服务去唯一关联起来。直接买 oss 这种服务就可以
Worldispow
2023-10-20 11:29:43 +08:00
我们是专门弄个文件服务器,开个 ftp 、sftp 就行。
mightybruce
2023-10-20 11:30:11 +08:00
各种分布式文件系统自己部署一下就好了,fastdfs 完全可以。fastdfs 大致分成两部分
Tracker Server
Storage Server
Tracker server 跟踪服务器,负责文件访问的调度和负载均衡,负责管理所有的 Storage Server 和 group 组/卷,

Storage Server
存储服务器,负责文件存储,文件同步/备份,提供文件访问接口,文件元数据管理。以 group 为单位,每个 group 内可以有多台 Storage Server ,数据互为备份,达到容灾的目的。每个 Storage 在启动以后会主动连接 Tracker ,告知自己所属 group 等存储相关信息,并保持周期性心跳。
dongfangyihaolan
2023-10-20 11:30:46 +08:00
最好的方案肯定是分布式文件系统,oss 对象存储服务,用阿里腾讯都可以,或者自建 minio 也行。
如果不想用分布式,就想用题中描述的,以下方案或许可破:
返回静态地址前,给地址拼一个参数,表明上传的是节点 1 还是 2, 然后 nginx 利用地址中的这个参数做转发,导向正确的节点。
laters
2023-10-20 11:34:34 +08:00
@opengps 只能内网 而且最好不花钱 -.-
tomczhen
2023-10-20 11:34:42 +08:00
最简单的办法是用同步软件把文件同步一下完事。

又不是不能用.jpg
laters
2023-10-20 11:35:11 +08:00
@dongfangyihaolan OSS 不得花钱吗。。。 只能内网 而且最好不花钱 -.- 公司内网自己用
laters
2023-10-20 11:35:40 +08:00
@tomczhen 想稳定点。。怕同步软件不太行
coderxy
2023-10-20 11:36:08 +08:00
多台机器之间做文件同步。 一般也不需要多台,两台互备就行了
wuwukai007
2023-10-20 11:40:05 +08:00
自定义 404 错误处理:
首先,为 404 错误配置一个自定义处理程序。这个处理程序会检查其他后端服务器,以查看它们是否有请求的文件。

编写脚本进行检查:
当触发自定义 404 错误处理时,该脚本会遍历所有其他的后端服务器以检查文件是否存在。你可以使用如 curl 或其他 HTTP 客户端来进行这个检查。

重定向到正确的服务器:
如果脚本发现文件存在于其他服务器上,它可以返回一个 302 重定向响应给客户端,指向正确的服务器和文件位置。

以 Nginx 和一个简单的 Bash 脚本为例:

在你的 Nginx 配置中,为 404 错误添加自定义处理:
gwbw
2023-10-20 11:41:18 +08:00
正式方案还是需要分布式文件系统或对象存储服务。想一切从简的话有个野路子,直接尝试取从本地取,取不到就把 get 文件请求带上[本次请求为内部转发]参数转发到另一台服务器,再取不到就报错

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

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

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

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

© 2021 V2EX