AWS EC2 实例 Auto Scaling 混乱

Dan*_*Dan 6 amazon-ec2 amazon-web-services autoscaling amazon-route53 amazon-elb

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

我已经有一个实例运行了几个月,现在我需要自动扩展它,因为我遇到了更大的流量高峰并且它有时会超载。

所以让我回顾一下我到目前为止所做的事情,你们可以告诉我我哪里出错了,我必须做些什么不同的事情。

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

所以基本上我希望我的原始实例始终运行。然后,当它开始超出容量时,我希望 Auto Scaling 组开始启动实例,并且负载均衡器在它们之间分配负载。我的想法是正确的吗?

其他重要问题。

当我对原始实例进行代码和数据更改时,是否必须重新制作启动配置使用的映像?

DNS 名称和 IP 需要解决什么问题?我目前正在使用 Route 53,我是否将这一点指向我的负载均衡器,仅此而已?

谢谢你们!

Jaa*_*ans 8

让我们来看看你的问题。

所以基本上我希望我的原始实例始终运行。然后,当它开始超出容量时,我希望 Auto Scaling 组开始启动实例,并且负载均衡器在它们之间分配负载。我的想法是正确的吗?

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

  • 您没有充分利用 Auto Scaling 的可能性。Auto Scaling 不仅使您的设置能够扩展,而且还可以确保限制。如果,无论出于何种原因,您的“主”实例死亡,您的自动缩放策略将不会生效。如果您将实例保留在 amin-size为 1 的 Auto Scaling组中,Auto Scaling 会自动替换失败的实例。
  • 在自动扩展时,将您的实例视为“一次性”通常是最佳实践,因为这就是您构建弹性系统的方式。不要依赖一个实例始终可用。
  • 您可以为 Auto Scaling 组设置终止策略,使其始终首先终止最新的实例。这将确保您的“主要”实例将被保留(只要它是健康的)。不过,我之前的评论仍然适用。

当我对原始实例进行代码和数据更改时,是否必须重新制作启动配置使用的映像?

我说没有,但一个设计问题的这更多。您的图像应该描述您的服务器的状态,但它不应该负责代码分发。考虑这样一种情况:由于紧急错误,您必须更新您的应用程序,但您的服务器负载很高。更新您的主服务器、创建 AMI、更新您的启动配置并关闭您的自动扩展服务器,以便它们可以使用最新的 AMI 重新生成,这听起来像是一个有吸引力的解决方案吗?我对此的回答是否定的(再次)。查看源代码版本控制和部署策略(例如,我 60% 的时间是 Rails 开发人员并使用gitand capistrano)。

在有些情况下你的方法是有效的,以及情况,有很多的中间地带这里(我也建议考虑Chefuserdata脚本)。我自己实际上很少使用自定义 AMI,这要归功于Chef.

DNS 名称和 IP 需要解决什么问题?我目前正在使用 Route 53,我是否将这一点指向我的负载均衡器,仅此而已?

基本上,是的。您可以在创建 Auto Scaling 组时选择应附加到新实例的负载均衡器。我还没有将 GUI 用于 Auto Scaling,但我很确定它就在某个地方。如果没有,CLI 仍然支持它。将您的 Route53 记录指向您的 ELB alias,基本上就是这样。

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

如果您使用 Rails 进行开发,我强烈推荐使用Capistrano进行部署,它可以在您首选的版本控制系统(如 git)中获取应用程序的特定版本,并将其部署到特定环境中的多个服务器。那里有很多教程,但 Ryan Bates 修订的(和专业的)Railscast 关于这个主题非常简洁,尽管您需要订阅他的网站才能观看它们。不过,大多数其他教程也会让您继续学习。使用您的 AMI 和启动脚本启动一个新服务器,该脚本会拉取您的 git 存储库的临时克隆并运行本地 Capistrano 命令以启动您的应用程序。这确保了以后,您还可以使用 Capistrano 向所有正在运行的服务器部署新版本的应用程序,只需一个命令。

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