1

我们有两个使用 squid 页面缓存代理负载平衡的 apache/php Web 服务器。squid 缓存在图像提交页面上未激活。我们有一个表单,用户可以在其中提交图像。

这是一个两步的过程。他们首先上传图片。第二步,他们可以输入有关图像的详细信息,然后在提交图像详细信息后将图像移至正确的文件夹。

问题是,当流量很高时,第二步可能由另一台服务器提供服务,然后是上传图像的服务器。所以第二步可能找不到上传的图片,上传失败。

我们在这些服务器上有数千个图像文件,因此它们之间的同步很慢。无论如何,我们是否可以强制始终从特定服务器提供特定页面?基本上绕过负载均衡功能。

4

2 回答 2

1

有几个解决方案。

  1. 切换到 nginx 作为反向代理,您可以将客户端粘贴到主机
  2. 使上传目录成为安装在两台主机上的 NFS 共享
  3. 将文件上传到 mysql 表中(最好使用哈希表),以便两台服务器都可以访问它。

就我个人而言,我会选择选项 1,因为您仍然可以获得循环负载平衡,但是每个连接都停留在它最初连接的主机上。

选项 2 的好处是仍然平等地平衡请求,但缺点是 NFS 共享是单点故障。

如果您使用哈希表,如果数据库服务器上没有足够的内存,选项 3 可能会导致问题。

于 2011-05-28T10:19:30.467 回答
0

我可以看到接近 Geoffrey 答案的两个选项。
1. 上传图片到通过rsync同步的上传目录。
然后图像的数量会小得多,它们会同步得更快。
完成整个过程后,您可以将图像移动到正确的文件夹。
2. DB:存储的不是图像本身,而是图像的 url,所以你总是会知道哪个服务器持有它,可以访问它。
只有两个选项可以阅读 Geogrey 的答案并寻找与该主题相关的信息。

于 2012-04-23T19:04:35.350 回答