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

Php 需要跨2台负载平衡服务器上载单个文件,php,linux,apache,file-upload,load-balancing,Php,Linux,Apache,File Upload,Load Balancing,目前我的公司有3台服务器。负载平衡器后面有两个web框,负载平衡器后面没有另一个web框(用于管理、CMS和统计)。由于目前的资金状况,我们正在考虑取消不在负载平衡器后面的单个机箱。盒子上有我们的CMS,媒体子域指向盒子上的/home/web/media。问题是,如果我们删除该框并将所有代码(PHP)移植到负载平衡的web框中,那么当在CMS中上载文件时,它只会将其上载到用户点击的框的媒体目录中。因此,如果用户点击web1并上载文件,则该文件将只能在web1的/home/web/media目录中

目前我的公司有3台服务器。负载平衡器后面有两个web框,负载平衡器后面没有另一个web框(用于管理、CMS和统计)。由于目前的资金状况,我们正在考虑取消不在负载平衡器后面的单个机箱。盒子上有我们的CMS,媒体子域指向盒子上的/home/web/media。问题是,如果我们删除该框并将所有代码(PHP)移植到负载平衡的web框中,那么当在CMS中上载文件时,它只会将其上载到用户点击的框的媒体目录中。因此,如果用户点击web1并上载文件,则该文件将只能在web1的/home/web/media目录中访问。因此,当上传文件时,我们需要以某种方式重新同步web1和web2上的/media目录。或者做点别的

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

任何帮助都将不胜感激

仅供参考,我们正在运行PHP5.2、Red Hat Enterprise Linux和Apache2.0.52

问候,


Owen

对媒体使用网络共享不是一个好主意吗,这样你就可以在两台服务器上随时使用它了

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); } 函数scp($username、$host、$port=22、$file、$destination){ $dirs=explode(“/”,$destination); 数组_pop($dirs); $dirs=内爆(“/”,$dirs); //死(“\nscp.$file.”“$username.”@“$host.”:“$dirs”); 系统(“ssh”。$username.@”。$host..mkdir-p.。$dirs); 系统(“scp”。$file.”“$username.”@“$host.”:“$destination”); } 当然,您需要www数据在两台服务器上都具有公钥和写入权限

您有一些选择(有些已经提到):

  • 将上载的文件存储在数据库中(对于需要快速随机访问的文件,不建议这样做)
  • 使用网络文件系统,如NFS或SMB,并将上载的文件存储在那里。(您还可以通过NFS或SMB将代码副本上载到其他服务器的文件系统)
  • 使用群集文件系统,如GFS或OCFS

如果您想将文件实时上传到两台服务器,只需这样做即可

  • 用户在
    服务器1
    上上载文件
  • server1
    处理上载并将其存储在
    server1/media
  • server1
    server2/api/uploadFile
    (curl)发出经过身份验证的请求
  • server2
    处理上载并将其存储在
    server2/media

  • 希望这是有意义的。

    Rsync可以工作,但它需要一个cron或某种触发器,而且它不是真正的“pretts”,请考虑使用SMB()或NFS挂载点()。不管你怎么做,都没有简单的解决方案,直到最近,我们有很多服务器是通过cron触发的rsync来实现的。这对我们来说也是一个问题,因此出于这个原因(以及其他一些原因),我们转向了在服务器之间共享的SAN文件系统。问题结束了。。。。虽然相当昂贵,但如果没有缓存的方式,速度会非常慢。另外,它打破了拥有两台机器的界限,以防其中一台dies@Quamis如果您让网络存储远离这两台机器,并与计划的异地备份分开,那么您已经前进了一步。至于缓存,您可以使用具有(短)缓存时间的CDN。良好的磁盘和网络连接也有帮助。可能还有很多其他不同的选择。。这只是我想象中的其中一个问题。空闲的问题是如何将文件上传到服务器1。当从PHP文件上传时,我们不知道该文件将被正确上传到哪个服务器?另一个问题是,一台服务器最终将失败。上载不会在失败的服务器上进行。再次启动时,该文件在服务器上将不可用。