【问题标题】:Auto-scaling Instances in multi-AZ environment多可用区环境下的实例自动伸缩
【发布时间】:2021-01-27 10:23:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: amazon-web-services amazon-ec2 aws-auto-scaling availability-zone multi-az


    【解决方案1】:

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

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

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

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

    因此:

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

    【讨论】:

    • 谢谢约翰。我从你详细的回复中学到了很多东西,我想真诚地感谢你帮助像我这样的新手。从您的帖子中学习后,我无法用语言解释我的感觉有多好。如果我理解正确,我认为要点是,如果我们知道最小实例数,并且如果我们不能吸收任何延迟,那么我们应该设置 minimum instance count = min count * # of AZs 以便它们自动平衡。
    • 不完全。它应该启动足够的实例,以便一个 AZ 的故障仍能提供足够的实例。所以公式类似于Number to launch = (min_required / (Number_of_AZs - 1) ) * Number_of_AZs
    • 谢谢约翰。如果你不介意的话,我还有一个 Q。在上面的示例中,我们确定(从负载测试)我们需要最小值。 8(常规负载)和最大。 24 个(峰值负载)实例。假设有 2 个可用区。在这种情况下,参数(我相信)将是 min = 8,max = 24,desired = 16(根据上面的公式)。我对吗?如果是,我担心在峰值负载期间,如果一个 AZ 崩溃,我将平均有 12 个实例。为了解决这个问题,我可以将 min/max/desired 乘以 2(即 min:16 等)。然而,这并不划算。我读了stackoverflow.com/a/39406170/14369982。你能指导我吗?
    • 如果您不想等待其他实例启动,那么您将需要Minimum = 16,因为这将在 2 个 AZ 中的每个 AZ 中提供 8 个实例,以防 AZ 发生故障。跨 3 个 AZ 运行成本会更低,因为它需要 Minimum = 12(每个 AZ 中 4 个)。坦率地说,AZ 失败的可能性非常低,因此需要在您的风险偏好和运行额外实例的成本之间进行权衡。您说您至少需要 8 个,但在 Auto Scaling 启动更多实例时发生 AZ 故障的罕见事件中,您可能愿意在几分钟内使用较小的数字。
    • 所需容量 = “你现在想要多少”。 Auto Scaling 将尝试通过启动/终止实例来为您提供那么多实例,直到达到该数量。 实际 实例数永远不会低于最小值或高于最大值,即使 Desired Capacity 请求的数量超出了这些范围。 |您可以将最大设置为您想要的任何值 - 它只是设置 Auto Scaling 不会超过的限制。
    【解决方案2】:

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

    例如:


    您至少设置了 8 个实例。

    如果您为 Auto Scaling 设置 2 个 AZ,则每个 AZ 有 4 个实例 (4 + 4 = 8)。

    如果您为 Auto Scaling 设置 3 个 AZ,则 2 个 AZ 将有 3 个实例,1 个 AZ 将有 2 个实例 (3 + 3 + 2 = 8)。

    总共至少有 8 个实例跨多个 AZ 保留以用于正常负载。


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

    如果您为 Auto Scaling 设置 2 个 AZ,则每个 AZ 有 12 个实例 (12 + 12 = 24)。

    如果您为 Auto Scaling 设置 3 个 AZ,则每个 AZ 有 8 个实例 (8 + 8 + 8 = 24)。

    在高峰期,总共最多保留 24 个实例跨多个可用区。


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

    【讨论】:

      猜你喜欢
      • 2017-12-19
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 2017-07-24
      相关资源
      最近更新 更多