Auto Scaling 提供以下功能:
- 将特定实例附加到 Auto Scaling 组(在 Auto Scaling 之外创建)
- 从 Auto Scaling 组中分离特定实例
- 终止Auto Scaling 组中的特定实例
- 临时将 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 中断的影响。