多可用区环境中的自动缩放实例

Auto-scaling Instances in multi-AZ environment

我计划在多可用区(AZ = 可用性区域)网络中构建一个自动缩放组 (ASG)。假设我们 运行 进行了一些诊断,发现正常负载至少需要 8 个实例,高峰时段需要 24 个实例。

这是控制台屏幕截图示例。

我很困惑这8个实例(或24个实例)是运行跨可用区还是在一个可用区中。此外,如果我必须强制 ASG 在一个 AZ 中各有 8 个实例,我该怎么做?

创建 Auto Scaling 组时,您指定应在其中启动实例的可用区。

Auto Scaling 旨在保持每个 AZ 中的实例数量平衡。例如,当启动一个新实例时,它将在 Auto Scaling 组中实例数量最少的 AZ 中启动(如果它们相等,则为随机 AZ)。终止实例时,它将select Auto Scaling 组中实例最多的AZ 中的一个实例(或随机AZ,如果它们相等)。

因此,为了确保每个 AZ 中有 8 个实例,Auto Scaling 组的实例数需要等于配置的 AZ 数量的 8 倍。

如果您希望确保 8 个实例始终 运行,并且 Auto Scaling 组正在使用 3 个可用区,则存在一个可用区失效的(小)可能性。如果发生这种情况,Auto Scaling 将在剩余可用区中启动更多实例。如果您的应用程序不能等待这些额外的实例失败,那么它将需要在 3 个可用区中的每个可用区中有 4 个实例。这样,如果一个可用区失效,仍然会有两个可用区,每个可用区有4个实例,8个实例运行.

因此:

  • 确定您的系统是否可以处理启动替换实例所涉及的延迟
  • 如果可以,则只需启动最小数量的实例
  • 如果无法处理延迟,则启动足够的实例,即使一个 AZ 失败也有足够的实例

Auto Scaling 保持(平衡)跨多个 AZ 的实例数量。

例如:


您将 8 个实例设置为最少。

如果您为弹性伸缩设置了2个可用区,则每个可用区有4个实例(4 + 4 = 8)。

如果您为弹性伸缩设置了3个可用区,则2个可用区各有3个实例,1个可用区有2个实例(3 + 3 + 2 = 8)。

总共至少有 8 个实例跨多个 AZ 保持正常负载。


您将 24 个实例设置为最大值。

如果您为弹性伸缩设置了2个可用区,则每个可用区有12个实例(12 + 12 = 24)。

如果您为弹性伸缩设置了3个可用区,则每个可用区有8个实例(8 + 8 + 8 = 24)。

在高峰时段,总共最多保留 24 个实例跨多个 AZ。


AWS 也会回答您的问题 --> Q: How does Amazon EC2 Auto Scaling balance capacity?