我对 aws 自动扩展和负载均衡器的理解是否错误?

我对 aws 自动扩展和负载均衡器的理解是否错误?

其实我还是有点aws auto scale up困惑load balancer

我想知道是否有人可以帮助我澄清我的理解逻辑是否正确,如果正确,是否可以结合使用auto-scale upload 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对吗?

  1. 如果上述是正确的,那么有没有更好的方法可以做到这一点?否则,如果每天都发生变化,我似乎必须继续创建图像并更改设置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 个实例扩展。您只是失去了高可用性。

相关内容