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

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

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

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

5411 次点击
所在节点    云计算
66 条回复
victimsss
2023-10-20 11:41:36 +08:00
现成方案就 minio ,楼上也说了。
Achilless
2023-10-20 11:42:28 +08:00
简单点 NFS 或 SMB 就行了,可靠性强点的话就 Minio
wyhooo
2023-10-20 11:47:47 +08:00
@Livid 19 楼 GPT ,给的方案贼蠢,还用图片发代码,忍不了了 :)
laters
2023-10-20 11:50:07 +08:00
@Morii 大佬,你好!你说的是 nginx 上面配置 ip_hash 么,这种不是只固定访问一台后端服务器了么,失去了负载均衡的意义。能具体说下这个方案么,不是很清楚
laters
2023-10-20 11:53:33 +08:00
@dongfangyihaolan 大佬,你说的不分布式的方案我这边也想过,记录当时上传的具体节点,但是如果服务器 Ip 变了就访问不了了
yuanfa
2023-10-20 12:04:37 +08:00
1 方案,用 DNS 服务器,上传的时候,记录服务器的域名,不要用 IP 。
tomczhen
2023-10-20 12:23:34 +08:00
@laters 这就搞笑了。就算改变负载策略,记录了上传的服务器又怎么样?当一个节点挂掉,上面的文件始终都是无法访问到的。既然基于负载的方案都能接受风险,同步文件怎么就不行了?
aru
2023-10-20 12:24:34 +08:00
内网共享存储就行了
在其中一台机器开一个 nfs 或 samba 共享,两台机器都加载这个共享,往里面写文件
仅有 linux 就 nfs 共享,既有 windows 又有 linux 就用 samba
当然,你搞个 minio 也行
ryd994
2023-10-20 12:32:04 +08:00
@wuwukai007 首先,proxy_pass 是这么用的吗?这么个四不像的 cgi ,还用 GPT ?
然后,你这样碰到不存在的文件不就死循环了吗?


@laters 路径 hash 配合 proxy pass 就好了
hash 值可以对半分,分到 1 或者 2 上
如果 1 服务器拿到 hash 1 的请求,那就本地处理,有就有,没有就是 404.
如果拿到 hash 2 的请求,那就 proxy pass 给 2 ,2 说有就是有。

缺点就是只有一半的请求可以本地处理。

-----

但是,按这个思路再进一步,说明你用的负载均衡错了。你用 4 层负载均衡当然就是随机分配。但是如果你用 7 层的负载均衡,比如 Nginx 或者 haproxy 之类的,本来就支持根据 URL hash 分流,也就不存在以上问题。
nuII
2023-10-20 12:38:48 +08:00
现在的问题是每个负载服务器都有各自的存文件的地方,那你把他们都存在一个地方不就可以了吗,每个服务器去连接这个存储地址。这就是分布式文件系统,多节点读写模式,楼上提到的传统方案 nfs 、smb 都支持,linux 上直接用包管理器安装就行,windows 开一下 feature 就有了,很简单
dongfangyihaolan
2023-10-20 13:11:11 +08:00
@laters 首先,minio 好像是免费的吧?
kingme
2023-10-20 13:12:40 +08:00
fastdfs ,简单好用
Livid
2023-10-20 13:13:41 +08:00
@wyhooo 谢谢,那个账号已经被彻底 ban 。
dongfangyihaolan
2023-10-20 13:13:53 +08:00
@laters 变了也没关系,返回的资源地址里只追加节点编号,不放 ip 。编号和 ip 的对应关系,你在 nginx 里体现好就行,如果节点的 ip 变了,只要编号没变就行。
不过折腾这干嘛,直接就用 minio 呗,随着业务发展,到后面很可能还是得上。
dddd1919
2023-10-20 13:19:49 +08:00
简单的 搞个 ftp
paranoiagu
2023-10-20 13:43:29 +08:00
nfs 之类的同时挂载到不同服务器最简单。也可以用其他的 oss 之类的。
n0bin0bita
2023-10-20 13:46:11 +08:00
两边存放上传文件的服务器都挂载同一个 NFS 或类似的共享存储,就不用管他发到那台机器了
zx9481
2023-10-20 14:03:38 +08:00
挂载一下不久可以了嘛
gxm44
2023-10-20 14:07:41 +08:00
minio, 或挂载 NFS 之类的
dzdh
2023-10-20 14:18:05 +08:00
最简单的 go-fastdfs 搞定

https://www.oschina.net/p/go-fastdfs

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

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

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

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

© 2021 V2EX