如果可用性区域在Amazon Web Services/EC2中发生故障,是否有可用的工具或技术可在不同的可用性区域中自动创建新实例?
我认为我了解在可用区(AZ)中断的情况下如何执行自动故障转移,但是如何从中断中自动恢复(在新的AZ中创建新实例)呢?那可能吗?
示例方案:
此时,ELB将看到丢失的实例不再响应运行状况检查,并将停止将流量路由到该实例。所有请求将转到剩下的两个正常实例。故障转移成功。
恢复尚不清楚。有没有一种方法可以自动(即无需人工干预)替换新AZ(例如AZ D)中丢失的实例?这将避免发生中断(A)的AZ,并且不使用其中已包含实例(AZ B和C)的AZ。
AutoScaling组?
AutoScaling组似乎是一个很有前途的起点,但是我不知道他们是否可以正确处理此用例。
问题:
在AutoScaling组中,似乎没有一种方法可以指定替换失效/不正常实例的新实例应在新AZ中创建(例如,在AZ D中创建,而不是在AZ A中创建)。这是真的吗?
在AutoScaling组中,似乎没有办法告诉ELB删除失败的可用区并自动添加新的可用区。是对的吗?
这些是AutoScaling组中的真正缺陷,还是我缺少什么?
如果使用AutoScaling组无法做到这一点,是否还有其他工具可以自动为我执行此操作?
在2011年,FourSquare,Reddit和其他公司因依赖于单个可用区(http://www.informationweek.com/cloud-computing/infrastructure/amazon-outage-multiple-zones-a-smart-str/240009598)而陷入困境。从那时起,工具似乎已经走了很长一段路。我对缺少自动恢复解决方案感到惊讶。每个公司是否只是在推出自己的解决方案和/或手动进行恢复?或者,也许他们只是掷骰子,希望它不再发生?
更新:
@Steffen Opel,感谢detailed explanation。自动缩放组看起来更好,但是我认为与ELB一起使用时,它们仍然存在问题。
假设我创建了一个自动缩放组,其最小,最大和所需设置为3,分布在4个可用区中。自动缩放将在3个不同的AZ中创建1个实例,而第4个AZ保留为空。如何配置ELB?如果将其转发到所有4个AZ,则将不起作用,因为一个AZ始终具有零个实例,并且ELB仍会将流量路由到该AZ。当流量进入空AZ时,这将导致返回HTTP 503。我自己过去曾经经历过。 Here is an example of what I saw before。
这似乎需要手动将ELB的可用区更新为仅在其中运行实例的可用区。每当自动缩放导致不同的可用区混合时,都需要发生这种情况。是这样吗,还是我想念一些东西?
最佳答案
Auto Scaling确实是适合您的用例的服务-回答您各自的问题:
您无需明确指定/告知任何内容,这暗示了Auto Scaling的工作方式(请参见Auto Scaling Concepts and Terminology)-您只需为Auto Scaling组配置a)要运行的实例数(通过定义最小值,组必须具有的最大和所需数量的正在运行的EC2实例)和b)哪些可用区是您的实例的适当目标(通常/理想情况下,您帐户中某个区域中可用的所有可用区)。
然后,Auto Scaling负责a)启动请求数量的实例,以及b)在配置的AZ中平衡这些实例。 AZ中断将自动处理,请参阅Availability Zones and Regions:
下一节“跨多个区域的实例分布和平衡”进一步说明了该算法:
请检查链接的文档以获取更多详细信息以及如何处理边缘情况。
更新
关于您的可用区数量高于实例数量的后续问题,
我认为您需要采取务实的方法:
您只需选择等于或低于您要运行的实例数的AZz数即可。在AZ中断的情况下,Auto Scaling会很高兴地在剩余的正常AZ上平衡您的实例,这意味着您可以在示例中3个AZ中的2个中断中幸存下来,而其余3个实例仍在运行AZ。
请注意,尽管使用尽可能多的可用区可能很吸引人,但是新客户始终只能访问美国东部(弗吉尼亚北部)的三个EC2可用区和美国西部(加利福尼亚北部)的两个EC2可用区(请参阅Global Infrastructure),即较旧的帐户实际上可能可以访问us-east-1
中的所有5个AZ,最多只能访问4个,而较新的帐户最多可以访问3个。
us-east-1
中的所有5个可用区,实际上某些实例类型可能在所有这些实例中均不可用(例如,我在其中一个帐户中5个可用区中的3个可用区中只有New EC2 Second Generation Standard Instances m3.xlarge
和m3.2xlarge
可用)正在使用)。 换句话说,如果需要跨区域的容错能力,我可能会担心接下来的事情,那么2-3个可用区就可以算是一个区域内容错能力的一个不错的折衷方案。
关于amazon-web-services - 从可用性区域中断中自动恢复?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16312125/