所以首先我对 AWS 完全陌生,所以请多多包涵。
我已经有一个实例运行了几个月,现在我需要自动缩放它,因为我的流量峰值越来越大,而且有时它会过载。
所以让我回顾一下我到目前为止所做的事情,你们可以告诉我我哪里出错了,我必须做些什么不同的事情。
- 首先,我创建了一个负载均衡器,上面有我的一个主实例,称之为“实例 A”
- 接下来,我在“实例 A”上创建了两个 CloudWatch 警报,用于监控 CPU 负载。接下来我创建了“实例 A”的图像
- 接下来,我创建了一个链接到我新创建的 AMI 的启动配置。
- 接下来,我创建了一个 Auto Scaling 组并将其链接到我的负载均衡器,并设置了我之前设置的两个 Scaling 警报。
- 我将 AutoScaling 组 Min 设置为 0,Max 设置为 3,因为我只希望它在我的原始实例(实例 A)超出容量时开始启动实例。
所以基本上我希望我的原始实例始终运行。然后,当它开始超出容量时,我希望 Auto Scaling 组开始启动实例并让负载均衡器在它们之间分配负载。我在这里的想法合理吗?
其他重要问题。
当我对原始实例进行代码和数据更改时,是否必须重新制作启动配置使用的图像?
DNS 名称和 IP 需要关闭什么?我目前正在使用 Route 53,我是否将这一点指向我的负载均衡器,仅此而已?
多谢你们!
让我们来看看你的问题。
我会说是的,但我确实有一些保留意见。如果我理解正确,您已将“主”实例放置在 Auto Scaling 组之外。从理论上讲,这将确保 Auto Scaling 不会杀死您的原始实例。我想提几点:
min-size
为 1 的 Auto Scaling 组中,Auto Scaling 会自动替换失败的实例。我会说不,但这更多是设计问题。您的图像应该描述您的服务器的状态,但它不应该负责代码分发。考虑这样一种情况,由于紧急错误,您必须更新您的应用程序,但您的服务器处于高负载状态。更新您的主服务器、创建一个 AMI、更新您的启动配置并关闭您的自动扩展服务器以便它们可以使用最新的 AMI 重新生成听起来像一个有吸引力的解决方案吗?我对此的回答是不(再次)。查看源代码版本控制和部署策略(例如,我 60% 的时间是 Rails 开发人员并使用
git
andcapistrano
)。在某些情况下,您的方法也可以工作,并且这里有很多中间立场(我建议您也研究一下
Chef
脚本userdata
)。我自己实际上很少使用自定义 AMI,这要归功于Chef
.基本上,是的。您可以在创建 Auto Scaling 组时选择应附加到新实例的负载均衡器。我还没有将 GUI 用于 Auto Scaling,但我很确定它在某个地方。如果不是,CLI 仍然支持它。将您的 Route53 记录指向您的 ELB
alias
,基本上就是这样。对其他问题的回应(2014/02/23):
如果您使用 Rails 进行开发,我强烈推荐Capistrano进行部署,它可以在您首选的版本控制系统(如 git)中获取应用程序的特定版本,并将其部署到特定环境中的多个服务器上。那里有很多教程,但是 Ryan Bates 的修订版(和专业版)Railscasts 关于这个主题非常简洁,尽管你需要订阅他的网站才能观看它们。大多数其他教程也会让你继续前进。使用您的 AMI 和启动脚本启动一个新服务器,该脚本会拉取您的 git 存储库的临时克隆并运行本地 Capistrano 命令以启动您的应用程序。这确保了以后,您还可以使用 Capistrano 将新版本的应用程序部署到所有正在运行的服务器上,只需一个命令。
Capistrano 还提供了其他一些好处,包括使您能够在所有或仅一个服务器上执行特定任务并回滚部署,这很难仅使用 git 来完成。