如何实现EC2高可用性,同时优先将实例启动到特定的可用区

时间:2015-08-01 01:44:47

标签: amazon-web-services amazon-ec2

我正在寻找如何在单实例部署中指定要部署到的区域,使用自动扩展,同时还有自动故障转移到另一个区域 - 是否存在任何选项来实现此目的?

更多背景

由于保留实例如何链接到单个可用区(AZ),我们发现它是一个很好的策略(从“易管理性”/简单性的角度来看),在为我们的开发环境购买预留实例时,在一个区域中购买它们,然后在该区域中启动所有dev实例。 (在生产中,我们跨区域购买并使用指定跨所有区域部署的自动缩放组运行)。

我正在寻找如何:

  1. 指定我希望部署实例的AZ,以便我可以利用与单个(且一致)AZ绑定的保留实例。
  2. 同时

    1. 如果主要区域出现故障,则可以故障转移到备用区域(是的,在移动预留实例之前,您将支付更多费用,但可能是故障转移是暂时的,例如8小时,并且一旦区域出现故障,您可以进行故障恢复回到网上)。
    2. 问题是我可以看到你如何能够同时达到1或2,而不是1和2。

      要实现1,我将指定要部署到的单个子网(因此也是AZ),作为自动缩放组配置的一部分。

      要实现2,我将在不同的AZ中指定多个子网,同时将最小/最大/容量设置保持为1.如果实例非确定性部署的AZ失败,则自动缩放组将启动另一个AZ中的实例。

      如果服务器所在的区域出现故障,则不能同时执行1和2以优先选择部署最小/最大/容量为1的自动缩放组的区域,同时还具有自动故障转移功能。他们是竞争解决方案。

2 个答案:

答案 0 :(得分:1)

此解决方案使用所有AWS机制来达到预期效果:

  1. 通过在第一个自动缩放组的配置中指定该区域的子网,将实例启动到首选区域; 组的最小/最大/容量设置为1/1/1
  2. 使用与第1个相同的启动配置创建第二个自动缩放组,但将此其他自动缩放组设置为最小/最大/期望为0/1/0; 应配置此组除了第一个自动缩放组中指定的区域外,区域中每个可用区域中的子网。
  3. 将第二个自动缩放组与与第一个自动缩放组关联的ELB相关联。
  4. 设置一个CloudWatch警报,触发#1自动缩放组的不健康主机警报;警报将#2自动缩放组更改为最小/最大/期望1/1/1。 (以及发出通知,以便您知道这发生了)。
  5. 如果您不希望得到不健康的主机警报,除非在实际主机发生故障或AZ发生故障的情况下 - 在我们的情况下这是正确的 - 这是一个可行的解决方案。

答案 1 :(得分:0)

正如您已经想到的那样,(截至2015年中),这是不可能的。严格来说,自动缩放没有故障转移的概念。如果您希望获得高可用性,它希望您在每个AZ中提供足够多的AZ和机器。如果你不这样做,那么你就不会得到它。

我能想象到的唯一可能的解决方法是自己设置一个看门狗,一旦AZ变得不可用,它就会更改自动扩展组的子网。不是那么难做,但也不那么可靠。