AWS EC2实例Auto Scaling混乱

所以,首先我对AWS完全陌生,所以请耐心等待。

我有一个实例运行了几个月,现在我需要自动调整它,因为我越来越大的交通高峰,它有时会超载。

所以,让我看看迄今为止我所做的事情,然后你们可以告诉我哪里出了问题,而且我还有什么不同。

  • 首先,我创build了一个负载均衡器,其上有一个主实例,称之为“实例A”
  • 接下来,我在监视CPU负载的“实例A”上创build了两个CloudWatch警报。 接下来我创build了一个“实例A”的图像
  • 接下来,我创build了一个启动configuration链接到我新创build的AMI。
  • 接下来,我创build了一个Auto Scaling组,并将其链接到我的Load Balancer,并设置了之前设置的两个Scaling Alarms。
  • 我将AutoScaling组Min设置为0,将Max设置为3,因为我只希望当我的原始实例(实例A)超出容量时启动实例。

所以基本上我想我的原始实例在任何时候都在运行。 然后,当它开始超过容量时,我希望Auto Scaling组启动启动实例,并通过Load Balancer来分配负载。 我的想法在这里吗?

其他重要问题。

当我将代码和数据更改为原始实例时,是否必须重新启动“启动configuration”使用的映像?

什么需要与DNS名称和IP下来? 我目前正在使用Route 53,请问我的负载平衡器,这是什么?

多谢你们!

让我们来回顾一下你的问题。

所以基本上我想我的原始实例在任何时候都在运行。 然后,当它开始超过容量时,我希望Auto Scaling组启动启动实例,并通过Load Balancer来分配负载。 我的想法在这里吗?

我会说是的 ,但我有一些保留。 如果我理解正确,那么您已将“主”实例置于自动缩放组之外。 从理论上讲,这将确保自动缩放不会消除您的原始实例。 有几件事我想提一下:

  • 您没有充分利用Auto Scaling的可能性。 Auto Scaling不仅可以使您的设置进行缩放,而且还可以确保极限。 如果无论出于何种原因,您的“主要”实例死亡,您的自动扩展策略将不会生效。 如果将实例保留在min-size为1的自动缩放组中,Auto Scaling会自动replace失败的实例。
  • 当自动扩展时,通常最好的做法是将您的实例视为“一次性”的,因为这是您构build弹性系统的方式。 不要依靠一个实例始终可用。
  • 您可以为自动扩展组设置终止策略,以便始终先终止最新的实例。 这将确保您的“主要”实例将被保留(只要它是健康的)。 我以前的评论仍然适用。

当我将代码和数据更改为原始实例时,是否必须重新启动“启动configuration”使用的映像?

我会说不,但这是更多的devise问题。 你的图片应该描述你的服务器的状态 ,但它不应该负责代码分发。 考虑一种情况,即由于紧急错误而必须更新您的应用程序,但是您的服务器处于高负载状态。 更新你的主服务器,创build一个AMI,更新你的启动configuration,并消灭你的自动缩放服务器,使他们可以重新激活最新的AMI听起来像一个有吸引力的解决scheme? 我的答案不会 (再次)。 查看源代码版本控制和部署策略(例如,我是Rails开发人员的60%,使用gitcapistrano )。

有些情况下,你的方法也可以工作,这里有很多中间的地方(我build议也考虑Chefuserdata脚本)。 Chef ,我自己实际上很less使用定制的AMIs。

什么需要与DNS名称和IP下来? 我目前正在使用Route 53,请问我的负载平衡器,这是什么?

基本上, 是的 。 创build自动缩放组时,您可以select应该附加到新实例的负载均衡器。 我还没有使用AutoScaling的GUI,但我很确定它在那里的地方。 如果没有,CLI仍然支持。 将您的Route53logging指向您的ELB alias ,基本上就是这样。

对其他问题的回复(2014/02/23):

如果您使用Rails进行开发,那么我可以强烈推荐Capistrano进行部署,这可以在您的首选版本控制系统(如git)中将特定版本的应用程序部署到特定环境中的许多服务器上。 这里有很多教程,但是Ryan Bates对这个主题的修改(和专业版)Railscasts非常简洁,虽然你需要订阅他的网站来观看他们。 大多数其他教程也会让你去。 启动一个新的服务器与您的AMI和一个启动脚本,拉动您的git仓库的临时克隆,并运行本地Capistrano命令,让您的应用程序。 这可以确保在稍后您还可以使用Capistrano将新版本的应用程序部署到所有正在运行的服务器上。

Capistrano还提供了其他一些好处,包括使您可以在所有服务器上执行特定的任务,或者只在您的一台服务器上执行特定的任务,并回滚部署,这很难用git完成。