我想有一个负载平衡器为我的网站和有最新的网站。负载均衡器将采用我选择的AMI,并在处理能力达到某一级别时旋转更多的这些实例。问题是AMI可能不是最新的,所以我将有一些实例是最新的,而另一些则不是。当我部署时,我可以毫无问题地部署到负载均衡器下的所有实例,但我需要知道负载均衡器何时提取一个新实例以触发此部署。还有一段时间,更新的发生大大降低了它的响应能力。所以我想出了一个计划。
我的计划:
部署后:
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在我花了多少个小时来尝试解决这个问题并对其进行脚本化、测试和其他一切之前,我的问题是:这能成功吗?有更好的办法吗?是否有任何人知道的教程或帖子会加快我在这个问题上的努力?谢谢。
发布于 2012-03-03 05:10:36
可以使用AWS的另一种方法是存储更新后的站点/data/config,类似于S3。配置AMI (或指定适当的用户数据脚本),以便当一个新实例被旋转时,它会更新自己。您可以通过在更新完成之前不对健康检查作出积极响应来防止它添加到负载均衡器中。
否则,如果您需要让实例更快地出现,那么您的方法似乎是合理的。只需确保在开始更新活动实例之前挂起自动缩放,并在新的启动配置之后恢复。您不希望它启动未更新的实例。
我也不确定你是否可以删除一个ELB正在使用的启动配置。这一步可能要等到它被替换后才能完成。当你发现的时候,在这里发布一个更新。
发布于 2012-03-03 19:41:26
我遇到了和你一样的问题。我有一个自动缩放组,它缩小了流量,我一直在推送更新,即使在高峰负载下也是如此。我的解决方案涉及得更多,因为我需要一个临时区域,以便能够在代码更新到达活动服务器之前对它们进行测试。在最简单的层次上,这里是我如何构建/更新我的服务器。
构建基本AMI -这是AMI没有任何源代码,这个AMI可以捆绑与第三方应用程序,您需要与否。例如,我需要的服务器之一是AppFabric、IIS、AWSSDK.NET和.NET 4.0。我安装了所有这些工具并保存了ami。我的linux服务器在运行时执行此操作,因为它要快得多。
将源代码存储在S3或SVN中--当服务器启动时,它会从SVN或S3获取最新的代码。要更新现有服务器,只需每次或分组终止它们,自动缩放组将使用最新的代码启动另一个服务器。
根据您的服务对失败的容忍度,您还可以实现一个临时服务器,就像我必须在开始发送请求之前测试新代码一样。我的设置需要两个自动缩放组。第一组基本上是我的安全和身份验证层,它使用php代码。一旦该请求被验证,它将被转发到另一个自动缩放组。
对安全身份验证层的更新仍然需要我和Eric解释的步骤。但是,我尽量不更新这段代码,它不包含任何业务逻辑,而且几乎从不更改。对该层的更改应该始终向后兼容,这样如果您确实进行了更新,您就可以一次在线拥有两个版本的服务器,而不会出现任何问题。
对业务层的更新是我将所有代码更改应用于升级特性、修复bug等的地方。诀窍是在使用自己的服务器和代码(同样来自SVN或S3 )进行更新时,创建另一个自动缩放组/负载均衡器。一旦您测试了它,您将更新本地dns服务器(假设您有一个),并且安全身份验证层自动开始使用新的服务器。
编辑:忘记添加这个链接http://www.slideshare.net/AmazonWebServices/aws-architectingjvariafinal。有一些关于解决这类问题的非常好的信息,以及一些您可能知道或不知道的关于aws的其他事情。
https://serverfault.com/questions/365925
复制相似问题