AWS替代DNS故障转移?

时间:2015-10-07 04:38:44

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

我最近开始阅读和使用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

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

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

1 个答案:

答案 0 :(得分:2)

如果你是好奇的类型,你会更好地理解ELB,就像我一样。

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

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

这些IP地址不会经常发生变化,虽然有理由认为ELB会像其他任何东西一样失败,但我可能有30个并且从来没有故意在我的手上死了,大概是因为ELB基础设施将取代死者实例并在没有您干预的情况下更改DNS。

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

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