需要跨2个负载平衡服务器上传单个文件

时间:2010-09-27 10:31:40

标签: php linux apache file-upload load-balancing

目前我公司有3台服务器设置。负载平衡器后面的2个Web框和负载平衡器后面的另一个框(用于Admin,CMS和stats)。由于目前的资金状况,我们正在寻求退役我们的单箱,而不是负荷平衡器的后面。该框上有我们的CMS,媒体子域指向该框上的/ home / web / media。问题是如果我们删除框并将所有代码(PHP)移植到负载平衡的Web框上,那么当在CMS中上载文件时,它只会将其上载到用户点击的框的媒体目录中。因此,如果用户点击web1并上传文件,该文件只能在web1的/ home / web / media目录中访问。所以我们需要以某种方式在上传文件时同步web1和web2上的/ media目录。或者做点别的。

您认为什么是实现这一目标的最佳方法?

非常感谢任何帮助。

仅供参考,我们运行的是PHP 5.2,Red Hat Enterprise Linux和Apache 2.0.52

此致

欧文

4 个答案:

答案 0 :(得分:3)

你有几个选择(有些已经提到过):

  • 将上传的文件存储在数据库中(不推荐用于需要快速随机访问的文件)。
  • 使用NFS或SMB等网络文件系统,并在其中存储上传的文件。 (您还可以将代码复制上载文件复制到通过NFS或SMB公开的其他服务器的文件系统。)
  • 使用群集文件系统,例如GFS或OCFS。

答案 1 :(得分:2)

为媒体使用网络共享不是一个想法,因此您可以随时在两台服务器上使用它吗?

答案 2 :(得分:0)


    function scp($username, $host, $port = 22, $file, $destination){

        $dirs = explode("/", $destination);
        array_pop($dirs);
        $dirs = implode("/", $dirs);

//         die("\nscp ".$file." ".$username."@".$host.":".$dirs);

         system("ssh ".$username."@".$host." mkdir -p ".$dirs);
         system("scp ".$file." ".$username."@".$host.":".$destination);
    }

当然,您需要www-data在服务器和写权限上都有公钥

答案 3 :(得分:0)

如果您希望将文件实时上传到两台服务器,请执行此操作。

  1. 用户在server1上传文件。
  2. server1处理上传并将其存储在server1/media
  3. server1server2/api/uploadFile(curl)
  4. 发出经过身份验证的请求
  5. server2处理上传并将其存储在server2/media
  6. 希望这是有道理的。