amazon-web-services – AWS替代DNS故障转移?

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

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

我唯一的关键点是故障转移解决方案.

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

This is because the ELB is a two tier load balancing scheme. The first tier consists of basic DNS based round robin load balancing. This gets a client to an ELB endpoint in the cloud that is in one of the zones that your ELB is configured to use.

现在,我已经了解到,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个独立AZ中的活动 – 活动EC2实例.主动 – 主动,因为这是一个预算设置,我们不能让一个实例坐在那里.
> 1个ELB,区域A中有2个EC2实例,1个ELB,区域B中有2个EC2实例.同样,这两个区域都是活动的并且正在为流量提供服务.你如何处理从1 ELB到另一个ELB的故障转移?

最佳答案 如果你是好奇的类型,你会更好地理解ELB,就像我一样.

在2个可用区中配置的“1”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区域.)

点赞