其实我还是有点aws auto scale up
困惑load balancer
我想知道是否有人可以帮助我澄清我的理解逻辑是否正确,如果正确,是否可以结合使用auto-scale up
和load balancer
?
假设auto-scale up
我可以设置一个cloudalarm
,如果我的main instance
达到,cpu > 90%
那么a minute
一个新的instance
将旋转起来,新的instance
将与共享负担以main instance
降低 CPU 使用率。(旋转后,aws 将为我们完成剩下的工作)这就像我设置了旋转 1 个实例到最多 5 个实例
如果我的理解是正确的,是否new instance
需要具有与服务器完全相同的设置?如果是这样,那意味着我需要创建一个图像,main instance
并且每次更新时main instance
我都必须创建一个,new image
然后更改cloudalarm
/auto-scale up
以启动它,new image
对吗?
- 如果上述是正确的,那么有没有更好的方法可以做到这一点?否则,如果每天都发生变化,我似乎必须继续创建图像并更改设置
main instance
。
至于load balancer
,我通读了文档并尝试了一下。启动三个instances
,将它们全部注册到load balancer
。所有 3 个都运行正常,如果我重新加载页面,它会在三个 之间不断切换instances
。如果一个实例关闭,其他两个将继续运行。
如果我的理解也是正确的,那么这是否意味着我需要运行 2 个以上的相同实例,并且每次部署时都需要对所有实例执行此操作?如果我有很多服务器并且希望在服务器load balancer
突然变得不健康时使用它们,那么这难道不是很多工作吗?
如果我的理解都是正确的,那么是否可以以某种方式使用,auto-scale up
如果cloudalarm
某种方式main instance
不健康则创建实例的图像然后注册到load-balancer
?
抱歉给您带来麻烦,但我确实想知道我是否理解错了,或者是我思考太多而感到困惑。
谢谢您的建议和帮助。
答案1
当您使用 Auto Scaling 和负载平衡时,您希望所有 EC2 实例都相同。因此,它们都 (a) 植根于同一个 AMI 映像,并且 (b) 执行相同的初始化步骤,最终获得相同的代码和资产。这样,它们都会使用来自 HTTP 客户端的相同输入做出相同的响应。
为此,请勿尝试手动更新您的 EC2 实例。当您扩大和缩小规模时,您的工作将会丢失。
当您需要部署新版本的代码时,您应该执行以下一个(或多个)模式。
模式 1:
- 将您的代码部署到“黄金”EC2 实例,并且它不是您的 Auto Scaling 组的一部分。
- 创建此“黄金”实例的 AMI。
- 更新您的 Auto Scaling 组以使用这个新的 AMI 映像。
- 删除旧的 EC2 实例(使用旧的 AMI)并将其替换为新的 EC2 实例(使用新的 AMI)
模式2:
- 以“基本” AMI 映像为基础建立 Auto Scaling 组
- 当你的 EC2 实例首次启动时,它们会从某些常见位置(如 S3)下载源代码
- 部署新代码时,终止旧实例并启动新实例以获取新代码
模式3:
- 执行模式 2,但是
- 使用自动化工具将新代码部署到现有的 EC2 实例,而不是终止它们
还有其他模式,但这些是一些常见的有效模式。
如果您不熟悉 Auto Scaling 和负载平衡,我强烈建议您认真了解一下 Elastic Beanstalk。它将为您管理上述所有内容,使部署和更新变得更加容易。
一些补充说明:
- 根据您的应用程序,在负载均衡器后面使用 1 个 EC2 实例可能是有效的。您可能不需要 2 个以上的实例。随着负载的增加,您可以从 1 个实例扩展。您只是失去了高可用性。