如何替换 AWS Auto Scaling 组中的特定实例?
How can I replace a specific instance in an AWS Auto Scaling Group?
我正在寻找可用于 替换 AWS 规模组中特定实例的过程,同时保持 AZ "balance" 并且不减少容量在等待配置新实例时。
有时,我们可能有理由终止规模组中的特定 EC2 实例,并且一直在努力寻找一个有效的程序来执行此操作。我知道我可以直接终止实例并将其替换,但这会在等待新实例供应时暂时降低规模组的整体容量。在我们的例子中,这是几十分钟,因为我们必须在 ALB 可以发送请求之前设置和部署我们的软件
如果我们将 desired_capacity
增加 1,我们可以提前准备一个新实例 - 但不能保证它会在与我们希望终止的实例相同的 AZ 中创建。此外,如果我终止有问题的实例,并立即减少 desired_capacity
scalegroup 会终止另一个实例吗?
那么管理此程序的最佳方法是什么?
暂时可以suspend and resume specific scaling processes。使用此功能,您可以通过多种方式获得所需的结果,我在下面介绍了其中两种方式:
A:使用 Auto Scaling Group 的再平衡功能
- 将 Auto Scaling Group 的所需实例数增加 1 并等待新实例可用
- 暂时中止
Launch
缩放过程(这会阻止在下一步中自动启动新实例)
- 终止故障实例
- 将 Auto Scaling Group 的所需实例数减少 1(所需实例数和实际实例数现在应该再次同步)
- 恢复
Launch
缩放过程。如果剩余实例不平衡,Auto Scaling Group 的 AZRebalance
进程将选择它并逐渐在 AZ 之间重新平衡。
B:在所需的AZ中显式启动一个新实例:
- 在所需的 AZ 中启动一个单独的实例
- 暂时中止
Terminate
缩放过程]
(这可以防止在下一步中自动终止附加实例)
- 将 (1.) 中的实例附加到 Auto Scaling 组
- 终止原始实例(所需实例数和实际实例数现在应该再次同步)
- 恢复
Terminate
缩放过程
Auto Scaling 提供以下功能:
- Attach Auto Scaling 组的特定实例(在 Auto Scaling 之外创建)
- Detach Auto Scaling 组中的特定实例
- Terminate Auto Scaling 组中的特定实例
- Temporarily 将 Auto Scaling 组中的实例置于 备用状态
当分离、终止或置于备用时,Auto Scaling 组的 Desired Capacity 可以自动递减,因此没有替换实例已启动,或者可以保持不变以便启动替换实例。
让 Auto Scaling 启动任何新实例通常是个好主意,这样所有实例都是相同的。因此,如果您担心容量下降,那么您应该 增加 Desired Capacity 以启动新实例,然后 终止不需要的实例 Auto Scaling 组的容量减少到 return 该组到以前的 Desired Capacity。
你是正确的,启动的实例将不能保证与被删除的实例在同一个 AZ 中。 Auto Scaling 旨在 平衡可用区 。它将在实例数最少的 AZ 中启动一个实例。假设有两个具有相同数量实例的可用区,您希望从可用区 A 中删除一个实例。增加所需容量可能会在可用区 B 中启动一个实例。删除不需要的实例后,这意味着可用区 B比AZ A多两个实例。这是否是一个问题取决于Auto Scaling组中的实例总数。
建议使用多个 AZ 是为了处理 AZ 可能发生故障的情况。此类故障将导致实例暂时丢失,同时 Auto Scaling 在剩余可用区中启动新实例。如果担心这种下降,建议 运行 额外的实例来处理临时容量下降。因此,return针对您的问题,您的 Auto Scaling 组 应该有足够的容量来处理一个被删除和替换的实例 。如果容量暂时下降会影响您的系统,那么启动额外的实例是个好主意,前提是实例 can/will 偶尔会失败。这也有助于 AZ 发生故障的罕见情况,因为拥有额外容量意味着系统不会立即损失所需最小容量的 50%。
底线: 有足够的容量,以便临时替换坏实例不会对系统产生重大影响。与如果仅持续部署最小容量而在可用区中断中损失 50% 的容量的影响相比,对不平衡可用区的担忧将是次要的(可用区之间最多 2 个不同的实例)。
归根结底,真正归结为成本与风险。使用2个以上的可用区可以减少可用区中断的影响。
我正在寻找可用于 替换 AWS 规模组中特定实例的过程,同时保持 AZ "balance" 并且不减少容量在等待配置新实例时。
有时,我们可能有理由终止规模组中的特定 EC2 实例,并且一直在努力寻找一个有效的程序来执行此操作。我知道我可以直接终止实例并将其替换,但这会在等待新实例供应时暂时降低规模组的整体容量。在我们的例子中,这是几十分钟,因为我们必须在 ALB 可以发送请求之前设置和部署我们的软件
如果我们将 desired_capacity
增加 1,我们可以提前准备一个新实例 - 但不能保证它会在与我们希望终止的实例相同的 AZ 中创建。此外,如果我终止有问题的实例,并立即减少 desired_capacity
scalegroup 会终止另一个实例吗?
那么管理此程序的最佳方法是什么?
暂时可以suspend and resume specific scaling processes。使用此功能,您可以通过多种方式获得所需的结果,我在下面介绍了其中两种方式:
A:使用 Auto Scaling Group 的再平衡功能
- 将 Auto Scaling Group 的所需实例数增加 1 并等待新实例可用
- 暂时中止
Launch
缩放过程(这会阻止在下一步中自动启动新实例) - 终止故障实例
- 将 Auto Scaling Group 的所需实例数减少 1(所需实例数和实际实例数现在应该再次同步)
- 恢复
Launch
缩放过程。如果剩余实例不平衡,Auto Scaling Group 的AZRebalance
进程将选择它并逐渐在 AZ 之间重新平衡。
B:在所需的AZ中显式启动一个新实例:
- 在所需的 AZ 中启动一个单独的实例
- 暂时中止
Terminate
缩放过程] (这可以防止在下一步中自动终止附加实例) - 将 (1.) 中的实例附加到 Auto Scaling 组
- 终止原始实例(所需实例数和实际实例数现在应该再次同步)
- 恢复
Terminate
缩放过程
Auto Scaling 提供以下功能:
- Attach Auto Scaling 组的特定实例(在 Auto Scaling 之外创建)
- Detach Auto Scaling 组中的特定实例
- Terminate Auto Scaling 组中的特定实例
- Temporarily 将 Auto Scaling 组中的实例置于 备用状态
当分离、终止或置于备用时,Auto Scaling 组的 Desired Capacity 可以自动递减,因此没有替换实例已启动,或者可以保持不变以便启动替换实例。
让 Auto Scaling 启动任何新实例通常是个好主意,这样所有实例都是相同的。因此,如果您担心容量下降,那么您应该 增加 Desired Capacity 以启动新实例,然后 终止不需要的实例 Auto Scaling 组的容量减少到 return 该组到以前的 Desired Capacity。
你是正确的,启动的实例将不能保证与被删除的实例在同一个 AZ 中。 Auto Scaling 旨在 平衡可用区 。它将在实例数最少的 AZ 中启动一个实例。假设有两个具有相同数量实例的可用区,您希望从可用区 A 中删除一个实例。增加所需容量可能会在可用区 B 中启动一个实例。删除不需要的实例后,这意味着可用区 B比AZ A多两个实例。这是否是一个问题取决于Auto Scaling组中的实例总数。
建议使用多个 AZ 是为了处理 AZ 可能发生故障的情况。此类故障将导致实例暂时丢失,同时 Auto Scaling 在剩余可用区中启动新实例。如果担心这种下降,建议 运行 额外的实例来处理临时容量下降。因此,return针对您的问题,您的 Auto Scaling 组 应该有足够的容量来处理一个被删除和替换的实例 。如果容量暂时下降会影响您的系统,那么启动额外的实例是个好主意,前提是实例 can/will 偶尔会失败。这也有助于 AZ 发生故障的罕见情况,因为拥有额外容量意味着系统不会立即损失所需最小容量的 50%。
底线: 有足够的容量,以便临时替换坏实例不会对系统产生重大影响。与如果仅持续部署最小容量而在可用区中断中损失 50% 的容量的影响相比,对不平衡可用区的担忧将是次要的(可用区之间最多 2 个不同的实例)。
归根结底,真正归结为成本与风险。使用2个以上的可用区可以减少可用区中断的影响。