【问题标题】:AWS alternative to DNS failover?AWS 替代 DNS 故障转移?
【发布时间】:2016-01-04 04:39:04
【问题描述】:

我最近开始阅读和使用 AWS。我对使用该平台可以实现的不同高可用性架构特别感兴趣。具体来说,我正在寻找一个可靠的穷人解决方案,可以使用最少数量的服务器来实施。

到目前为止,我对主要 HA 问题的解决方案感到满意:负载平衡、冗余、自动恢复、可扩展性......

我唯一的症结在于故障转移解决方案。

使用 ELB 可能看起来很棒,但 ELB 实际上在后台使用 DNS 平衡。见Is AWS's Elastic Load Balancer a single point of failure?。同样来自 Netflix 博客文章:Lessons Netflix Learned from the AWS Outage

这是因为 ELB 是一个两层负载平衡方案。第一层由基本的基于 DNS 的循环负载平衡组成。这会将客户端带到云中的 ELB 端点,该端点位于您的 ELB 配置为使用的区域之一中。

现在,正如其他人所指出的那样,我了解到 DNS 故障转移并不是一个理想的解决方案,主要是因为不可预测的 DNS 缓存。例如:Why is DNS failover not recommended?

在我看来,除了 ELB 之外,大多数 AWS HA 架构都依赖于使用路由 53 的 DNS 故障转移。

最后,浮动 IP/弹性 IP (EIP) 策略出现在极少数文章中,例如 Leveraging Multiple IP Addresses for Virtual IP Address Fail-over,我很难确定这是否是生产系统的可行解决方案.此外,我遇到的所有示例都使用一组主动-被动实例实现了这一点。让每个主动者都拥有一个被动来实现这一点似乎是一种浪费。

有鉴于此,我想问一下,什么是更快更可靠的故障转移方式?

更具体地说,请讨论如何不使用 DNS 为以下 2 种设置执行故障转移:

  1. 2 个主动-主动 EC2 实例位于不同的 AZ。主动-主动,因为这是一个预算设置,我们不能让一个实例坐在那里。

  2. 区域 A 中具有 2 个 EC2 实例的 1 个 ELB,区域 B 中具有 2 个 EC2 实例的 1 个 ELB。同样,这两个区域都处于活动状态并为流量提供服务。您如何处理从 1 个 ELB 到另一个 ELB 的故障转移?

【问题讨论】:

    标签: amazon-web-services high-availability failover amazon-elb amazon-route53


    【解决方案1】:

    如果你像我一样是好奇的类型,那么通过玩它你会更好地理解 ELB。

    在 2 个可用区中配置的“1”ELB 计费为 1,但部署为 2。分配了 2 个 IP 地址,每个平衡器一个,自动创建 2 个 A 记录,每个记录一个,TTL 非常短。

    这 2 个平衡器中的每一个都会将流量转发到其同一个 AZ 中的实例,或者您可以启用跨 AZ 负载平衡(如果每个 AZ 中只有 1 个服务器实例,则应该启用)。

    这些 IP 地址不会经常更改,尽管 ELB 会像其他任何东西一样失败,但我有可能有 30 个,而且我从来没有故意拥有一个死的,大概是因为 ELB 基础设施将取代一个死的实例并在没有您干预的情况下更改 DNS。

    对于 2 个区域,除了在 some 级别使用 DNS 之外,您别无选择。来自 Route 53 的基于延迟的路由可以在正常操作中将人员发送到最近的站点,并在整个区域中断的情况下将所有流量路由到另一个站点(由 Route 53 运行状况检查检测到),但这有点当整个区域不可用时,更有可能遇到 DNS 缓存问题。

    当然,使用弹性 IP 的单个区域中的部分主动/被动困境可以通过两个应用服务器上的 HAProxy 轻松解决。它是一个类似于 ELB 的 http 请求路由器和负载均衡器,但具有更广泛的功能集。代码非常紧凑,您可以在应用服务器上运行它,而 CPU 消耗可以忽略不计。然后,具有 EIP 的实例将平衡其本地应用服务器和对等方之间的流量。跨区域,ELB 后面的 HAProxy 可以将流量转发到远程区域中的伙伴,如果本地区域已启动但由于某种原因应用程序无法处理来自本地区域的请求。 (我使用这种设置来提高外部服务的可用性,当来自本地区域的直接 Internet 路径不起作用时,通过将请求退回到远程 AWS 区域。)

    【讨论】:

    • 我是否应该了解,根据您的经验,DNS 缓存问题从来都不是重新考虑使用 ELB 的重要因素?
    • 我喜欢在两个应用程序都处于活动状态时主动/被动 HAProxy 的想法。如果以完美的故障转移为目标,这种设置难道不会比 ELB 更受欢迎吗?
    • 回复:HAProxy,不一定。外部进程必须负责 EIP 本身的故障转移,重新映射 EIP 很快但不是即时的。另请注意,被动模式下的服务器也需要自己的 EIP,因为如果公共子网中的每个实例向 Internet 发出任何类型的 出站 请求或到大多数 AWS 服务......所以故障转移操作实际上是交换 EIP,而不是只移动一个。但是每个实例上的代理当然会使用机器的私有 IP 与其他应用程序实例通信。
    猜你喜欢
    • 2017-07-10
    • 2018-08-15
    • 2021-07-07
    • 2018-12-28
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多