在Amazon(AWS)上进行负载平衡并保持最新

我想为我的网站有一个负载平衡器,并使该网站是最新的。 负载均衡器将采用我select的AMI,并在处理能力达到一定水平时启动更多的实例。 问题是AMI可能不是最新的,所以我将有一些实例是最新的,其他的不是。 当我部署时,我可以毫无问题地部署到负载均衡器下的所有实例,但是我需要知道每当负载均衡器join新实例以触发此部署时。 而且,当更新发生大大降低其响应时,会有一段时间。 所以我想出了一个计划。

我的计划:

部署后:

identify one of the instances and get instance id identify volume of instance id ec2-create-snapshot vol-yyyyyyyy get snapshot volume id ec2reg -s snap-zzzzzzzz -a x86 -d Description -n imagename get image id as-delete-launch-config existinglaunchconfig as-create-launch-config mylaunchconfig --image-id IMAGEID --instance-type m1.small --key mykey --group mysecuritygroup as-update-auto-scaling-group --launch-configuration mylaunchconfig 

在我走之前,花了好几个小时试图弄清楚,编写脚本,testing和其他一切,我的问题是:这个工作吗? 有没有更好的办法? 有没有教程或文章,任何人都知道这将加快我在这个问题上的努力? 谢谢。

可以使用AWS的另一种方法是将更新后的站点/数据/configuration存储在S3之类的地方。 configurationAMI(或指定适当的用户数据脚本),以便在新实例启动时自动更新。 您可以防止将其添加到负载平衡器,因为在更新完成之前,不会对健康检查做出积极响应。

否则,如果你需要让实例更快地出现,那么你的方法似乎是合理的。 只要确保在开始更新活动实例之前暂停自动扩展,并在新启动configuration之后恢复。 您不希望它启动未更新的实例。

我也不确定是否可以删除ELB正在使用的启动configuration。 这一步可能要等到它被replace之后。 当你发现时在这里发布更新。

我遇到了和你一样的问题。 我已经有了一个自动扩展组,可以随着stream量扩展,甚至在峰值负载下也可以随时更新。 我的解决scheme比较复杂,因为我需要一个临时区域来testing我的代码更新,然后再打到活动服务器。 从最简单的层面来看,我是如何构build/更新服务器的。

构build基础AMI – 这是没有任何源代码的AMI,这个AMI可以与您需要或不需要的第三方应用程序捆绑在一起。 例如,我需要AppFabric,IIS,AWSSDK.NET和.NET 4.0的服务器之一。 我安装所有这些工具并保存ami。 我的Linux服务器我在运行时,因为它更快。

将源代码存储在S3或SVN中 – 当您的服务器启动时,它会抓取来自SVN或S3的最新代码。 要更新现有的服务器,只需逐个或分组终止它们,Auto Scaling组将使用最新的代码启动另一个服务器。

根据你的服务对于失败的容忍程度,你也可以实现一个登台服务器,就像我必须在请求开始发送之前testing新的代码一样。 我的设置需要两个自动缩放组。 第一组基本上是我使用php代码的安全和authentication层。 一旦请求被validation,它就被转发到另一个自动缩放组。

安全authentication层的更新仍然需要我自己和Eric Hammond解释的步骤。 但是,我尽量不更新这个代码,它不包含任何业务逻辑,几乎不会改变。 对此层的更改应始终向后兼容,以便如果您进行更新,则可以同时在线连接2个版本的服务器,而不会出现任何问题。

对业务层的更新是我应用所有代码更改来升级function,修复错误等。技巧是在使用自己的服务器和代码(同样来自SVN或S3)进行更新时创build另一个自动扩展组/负载平衡器。 一旦你testing了它,你就更新了本地的dns服务器(假设你有),安全authentication层自动开始使用新的服务器。

编辑:忘了添加这个链接http://www.slideshare.net/AmazonWebServices/aws-architectingjvariafinal 。 有关于解决这类问题的一些非常好的信息,以及其他一些你可能会或可能不知道的关于aws的信息。