This topic created in 3276 days ago, the information mentioned may be changed or developed.
筒子们好,
我搞了两台机器,nginx 做简单的负载,有个简单的文件上传下载功能。
问题来了
上传没问题,文件会大概平均上传到两台机器上;
下载有问题,由于 ng 做了 proxy,如果文件在机器 1 上,请求落到机器 2 上,就请求不到了。
解决方法:
1、上传、下载 ur 都指到同一台,ng 配下就好了
2、记录上传的机器 ip,请求时获取 ip 信息,指定请求 ip
请问:
方法 2 可行么,或者有没有其他方法?
17 replies • 2017-07-10 09:28:09 +08:00
 |
|
2
derek80 Jul 7, 2017 via Android
用类似 aws s3 服务
|
 |
|
3
notgod Jul 7, 2017 via iPhone
以前弄过 最简单的方案 下载 尝试访问 1 的 如果文件存在 返回 不存在 反向代理到 2。反之亦然 因为使用内网 不存在带宽流量消耗
另外一个解决方案 就是 sersync 做实时同步即可
一般 lb 结构 后端提供 n 个 VIP 共同一个 san 存储 便于扩展 这样才是最佳的 主要将运算和存储分离
如果流量不大 业务规模小 没必要弄 lb 没瓶颈的
|
 |
|
4
salmon5 Jul 7, 2017
一般瓶颈在带宽,不在 nginx,两种方法: 1,换成一台 nginx ; 2,两台 nginx 读写文件通过一个 nfs 盘实现。 最简单的两种方法,别造大轮子了。
|
 |
|
5
ryd994 Jul 7, 2017
所以为啥你需要两台 nginx ?
|
 |
|
6
D3EP Jul 7, 2017 via Android
@ ryd994 楼主用了一个 nginx 对两台机器做了负载均衡,他应该是这个意思。
|
 |
|
8
lightening Jul 7, 2017
Load balancer 后面的系统一定要是 stateless 的。你的文件储存是 stateful 的,显然要单独拉出来集中处理。如果一台机器不够,就要上分布式储存,那就不是简单的 load balancing 问题了。一旦进入分布式系统的领域,就必须放弃 CAP ( consistency, availability, partition tolerance ) 中的一个。如果你的文件储存压力不是那么大,建议这部分不要没事找事搞分布式。
|
 |
|
10
gogohigh Jul 7, 2017
每个文件对等 replication 吧,最简单的方案
|
 |
|
12
akira Jul 7, 2017
本来想说根据文件名做哈希算法,确定后端服务器地址什么的,想想,还是 3 楼的方案就好了,简单。
|
 |
|
14
billlee Jul 7, 2017
可以用 s3, 或者自建 GridFS
|
 |
|
15
loopio Jul 7, 2017 via Android
这不叫分布式存储吧,只能说是通过 nginx 把请求转发到不同的服务器而已。还谈什么 CAP ? 采用分布式存储文件系统 ceph 或者 hdfs 等。才疏学浅个人瞎猜,欢迎来喷。
|
 |
|
16
bfbd Jul 8, 2017
nginx 配置两种路由,一种通用的,后台自动负载均衡,一种特定的,指定从哪台服务器获取。 通用的那条检查下返回状态,404 就转向特定的,指定从另一台服务器获取文件。
|
 |
|
17
banksiae Jul 10, 2017
多谢各位回复,我参考下。以前文件存储都是直接扔给七牛的,没搞过文件存储
|