如果可用性区域在Amazon Web Services/EC2中发生故障,是否有可用的工具或技术可在不同的可用性区域中自动创建新实例?

我认为我了解在可用区(AZ)中断的情况下如何执行自动故障转移,但是如何从中断中自动恢复(在新的AZ中创建新实例)呢?那可能吗?

示例方案:

  • 我们有一个三实例集群。
  • ELB轮询到集群的流量。
  • 我们可以丢失集群中的任何一个实例,但不能丢失两个实例,并且仍然可以正常运行。
  • 由于(3),每个实例位于不同的AZ中。将它们称为AZ,B和C。
  • 配置了ELB运行状况检查,以便ELB可以确保每个实例都正常。
  • 假设一个实例由于AZ A中的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个。

  • 我认为这是一个遗留问题,即AWS显然正在使较旧的AZ停止运行。例如,即使您可以访问us-east-1中的所有5个可用区,实际上某些实例类型可能在所有这些实例中均不可用(例如,我在其中一个帐户中5个可用区中的3个可用区中只有New EC2 Second Generation Standard Instances m3.xlargem3.2xlarge可用)正在使用)。

  • 换句话说,如果需要跨区域的容错能力,我可能会担心接下来的事情,那么2-3个可用区就可以算是一个区域内容错能力的一个不错的折衷方案。

    关于amazon-web-services - 从可用性区域中断中自动恢复?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16312125/

    10-11 08:32