如果可用区在 Amazon Web Services/EC2 中出现中断,是否有任何工具或技术可用于在不同的可用区中自动创建新实例?
我想我了解如何在可用区 (AZ) 中断的情况下进行自动故障转移,但是从中断中自动恢复(在新 AZ 中创建新实例)呢?那可能吗?
示例场景:
- 我们有一个三实例集群。
- ELB 轮询到集群的流量。
- 我们可以丢失任何一个实例,但不能丢失集群中的两个实例,但仍然可以正常工作。
- 由于 (3),每个实例位于不同的 AZ。称他们为 AZs A、B 和 C。
- 配置 ELB 健康检查,以便 ELB 可以确保每个实例都是健康的。
- 假设一个实例由于 AZ A 中的 AZ 中断而丢失。
此时,ELB 将看到丢失的实例不再响应运行状况检查,并将停止将流量路由到该实例。所有请求都将转到剩余的两个健康实例。故障转移成功。
恢复是我不清楚的地方。有没有办法自动(即无需人工干预)替换新 AZ(例如 AZ D)中丢失的实例?这将避免出现中断的可用区 (A),而不使用其中已经有实例的可用区(可用区 B 和 C)。
自动缩放组?
AutoScaling Groups 似乎是一个很有前途的起点,但我不知道他们是否能正确处理这个用例。
问题:
在 AutoScaling 组中,似乎没有办法指定替换死/不健康实例的新实例应在新 AZ 中创建(例如,在 AZ D 中创建,而不是在 AZ A 中创建)。这是真的吗?在 AutoScaling 组中,似乎没有办法告诉 ELB 删除失败的 AZ 并自动添加新的 AZ。是对的吗?
这些是 AutoScaling 组中的真正缺点,还是我遗漏了什么?
如果 AutoScaling Groups 无法做到这一点,是否有其他工具可以自动为我做到这一点?
2011 年 FourSquare、Reddit 和其他人因依赖单一可用区而陷入困境 ( http://www.informationweek.com/cloud-computing/infrastructure/amazon-outage-multiple-zones-a-smart-str/240009598 ) . 从那时起,工具似乎已经走了很长一段路。我对缺乏自动恢复解决方案感到惊讶。每家公司是否只是推出自己的解决方案和/或手动进行恢复?或者他们只是在掷骰子并希望它不会再次发生?
更新:
@Steffen Opel,感谢您的详细解释。Auto Scaling 组看起来更好,但我认为它们在与 ELB 一起使用时仍然存在问题。
假设我创建了一个 Auto Scaling 组,其最小值、最大值和期望值设置为 3,分布在 4 个可用区。Auto Scaling 将在 3 个不同的 AZ 中创建 1 个实例,第 4 个 AZ 留空。如何配置 ELB?如果它转发到所有 4 个 AZ,那将不起作用,因为一个 AZ 将始终拥有零个实例,而 ELB 仍会将流量路由到它。这将导致当流量进入空 AZ 时返回 HTTP 503。我过去曾亲身经历过。这是我之前看到的一个例子。
这似乎需要手动将 ELB 的可用区更新为仅在其中运行实例的可用区。每次自动缩放导致不同的可用区组合时,都需要发生这种情况。是这样吗,还是我错过了什么?