1

我正在寻找一种可用于替换AWS 扩展组中特定实例的程序,同时保持 AZ“平衡”,并且在等待新实例预置时不减少容量。

有时,我们可能有理由终止规模组中的特定 EC2 实例,并且一直在努力制定有效的流程来执行此操作。我知道我可以直接终止实例并将其替换,但这会在等待新实例供应时暂时降低扩展组的整体容量。在我们的例子中,这需要几十分钟,因为我们必须在 ALB 发送请求之前设置和部署我们的软件

如果我们将desired_capacity1 增加,我们可以提前准备一个新实例 - 但不能保证它会在与我们希望终止的实例相同的 AZ 中创建。另外,如果我终止有问题的实例,并立即减少desired_capacityscalegroup 是否会终止另一个实例?

那么管理此程序的最佳方法是什么?

4

2 回答 2

3

您可以暂时暂停和恢复特定的扩展过程。使用此功能,您可以通过多种方式实现所需的结果,我在下面描述了其中两种:

A:使用 Auto Scaling Group 的重新平衡功能

  1. 将 Auto Scaling Group 的所需实例计数增加 1 并等待新实例可用
  2. 暂时暂停Launch扩展过程(这可以防止在下一步中自动启动新实例)
  3. 终止故障实例
  4. 将 Auto Scaling 组的所需实例数减少 1(所需实例数和实际实例数现在应该再次同步)
  5. 恢复Launch缩放过程。如果剩余的实例不平衡,Auto Scaling 组的AZRebalance进程将处理此问题并逐渐在 AZ 之间重新平衡。

B:在所需AZ显式启动一个新实例:

  1. 在所需的 AZ 中启动一个单独的实例
  2. 暂时暂停Terminate扩展过程](这可以防止在下一步中自动终止附加实例)
  3. 将 (1.) 中的实例附加到 Auto Scaling 组
  4. 终止原始实例(所需实例数和实际实例数现在应该再次同步)
  5. 恢复Terminate缩放过程
于 2020-05-15T17:05:49.143 回答
3

Auto Scaling 提供以下功能:

在分离、终止或置于待机状态时,Auto Scaling 组的Desired Capacity可以自动递减,因此不会启动替换实例,也可以保持不变,以便启动替换实例。

让 Auto Scaling 启动任何新实例通常是一个好主意,这样所有实例都是相同的。因此,如果您担心容量下降,则应增加所需容量以启动新实例,然后从容量减少的 Auto Scaling 组中终止不需要的实例,以使组恢复到以前的所需容量。

您是正确的,启动的实例不能保证与被删除的实例位于同一可用区。Auto Scaling 旨在平衡可用区。它将在实例数量最少的 AZ 中启动一个实例。假设有两个 AZ 的实例数量相同,并且您希望从 AZ A 中删除一个实例。增加所需容量可能会在 AZ B 中启动一个实例。一旦删除不需要的实例,这将意味着 AZ B比 AZ A 多两个实例。这是否是一个问题取决于 Auto Scaling 组中的实例总数。

使用多个 AZ 的建议是为了处理一个 AZ 可能出现故障的情况。此类故障将导致实例暂时丢失,同时 Auto Scaling 在剩余 AZ 中启动新实例。如果担心这种下降,建议运行额外的实例来处理临时容量下降。因此,回到您的问题,您的 Auto Scaling 组应该有足够的容量来处理一个实例被删除和替换. 如果容量暂时下降会影响您的系统,那么最好启动额外的实例,假设实例可能/将偶尔失败。这也有助于解决 AZ 发生故障的罕见情况,因为拥有额外容量意味着系统不会立即失去所需最小容量的 50%。

底线:有足够的容量,以便临时更换坏实例不会对系统产生重大影响。与仅持续部署最小容量的情况下在 AZ 中断中损失 50% 容量的影响相比,对 AZ 不平衡的担忧将很小(AZ 之间最多 2 个实例不同)。

归根结底,这实际上归结为成本与风险。使用超过 2 个 AZ可以减少 AZ 中断的影响。

于 2020-05-15T23:59:12.610 回答