2011-10-09 101 views
6

我一直在使用基于(AWS EC2)PHP Web应用程序云,和我同一个问题挣扎,当涉及到多个服务器的工作(全部属于一个AWS弹性负载平衡器)。在一台服务器上,当我上传最新的文件时,它们即将在整个应用程序中生产。但是,当使用多台服务器时,这不是真的 - 每次提交更改时都必须将文件上传到每台服务器。如果您不经常更新任何内容,或者您​​只有一台或两台服务器,这可能会正常工作。但是如果你在一周之内多次更新系统,跨十台服务器呢?内容部署到多台服务器(EC2)

什么我要找的是“提交”从我们的开发或测试服务器更改,并立即“推”出来给我们所有的生产服务器的方式。理想情况下,更新将在同一时间(即使它只是需要一两秒钟每个服务器)被应用到只有一个服务器,以便当文件被改变,从而不破坏任何生产业务,可能是ELB不会流量发送到它流向ELB。 这样做的最好方法是什么?我的想法之一是在开发服务器上使用SVN,但这并不真正“推”到服务器上。我正在寻找一个只需几秒钟就可以提交更新并随后开始将其应用于服务器的进程。另外,对于那些熟悉AWS的人员,使用最新更新更新AMI的最佳方式是什么,以便自动缩放器始终使用最新版本的软件启动新实例?

要做到这一点,必须有很好的方法......不可能像Facebook,谷歌,苹果,亚马逊,Twitter等网站一样,通过手动和逐一更新数百或数千台服务器做出改变。

在此先感谢您的帮助。我希望我们能够找到解决这个问题的一些方法......在最后一天,我和我的业务合作伙伴至少要进行100次Google搜索,这在大多数情况下都没有成功解决这个问题。

亚历

+0

这是和这里相同的问题:http://stackoverflow.com/questions/6730360/best-way-to-load-php-classes-in-ec2-instancestore-ebs-or-s3 – andig

回答

0

有在KwateeSDCM好好看看。它使您能够在任意数量的服务器上部署文件和软件,并在需要时随时自定义服务器特定的参数。有多个Tomcat实例后约deploying a web application但它的语言无关,并会为PHP工作一样,只要和你有你的AWS服务器上启用SSH。

1

我们使用scalr.net来管理我们的Web服务器和负载均衡器实例。直到现在,它工作得很好。我们为每个环境(2个生产农场,分段,沙箱)都有一个服务器场。我们为Web服务器预先配置了角色,因此在需要时打开新实例并进行扩展非常容易。 web服务器在启动时从github提取代码。

我们还没有完成我们想做的所有部署的变化,但基本上这里是我们如何部署新的版本到我们的生产环境:

  1. 我们使用phing更新每个网页上的源代码和部署服务。我们创建了一个执行git pull并运行数据库更改的任务(dbdeploy phing任务)。 http://www.phing.info/trac/
  2. 我们写的执行phing一个shell脚本,我们添加它scalr为脚本。 Scalr有一个很好的界面来管理脚本。

    #!/bin/sh 
    
    cd /var/www 
    phing -f /var/www/build.xml -Denvironment=production deploy 
    
  3. scalr必须在特定的场中的所有实例执行脚本的选项,所以每个版本中,我们只是推到GitHub上的主分支和执行scalr脚本。

我们要创建一个GitHub的钩子,当我们推到主分支自动部署。 Scalr有可以执行脚本的API,所以这是可能的。

相关问题