4

我最近开始阅读并玩弄AWS。我对可以使用该平台实现的不同高可用性体系结构特别感兴趣。具体来说,我正在寻找可靠的穷人的解决方案,可以使用服务器的最低金额实施。AWS替代DNS故障转移?

到目前为止,我很满意为主要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?

除了ELBs,在我看来,大多数AWS HA架构中使用路由53

最后,浮动IP /弹性IP(EIP)战略在极少数的弹起依赖于DNS故障转移文章,例如Leveraging Multiple IP Addresses for Virtual IP Address Fail-over,我很难弄清楚这是否是生产系统的可行解决方案。另外,我遇​​到的所有示例都使用一组主动 - 被动实例来实现此功能。对于每一个积极的人来说,实现这一目标似乎是一种浪费。

鉴于此,我想问问什么是更快更可靠的故障切换方式?

更具体地,请讨论如何在不使用DNS以下2对设置进行失效切换

  1. 2主动 - 主动EC2实例在单独的AZS。主动 - 主动,因为这是一个预算安排,我们是否无法负担一个实例。

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

回答

2

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

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

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

这些IP地址并没有经常变化,尽管ELB像其他任何东西一样失败了,但我可能有30个,并且从未故意在我手上弄过一个,大概是因为ELB基础设施将取代死了的实例,并更改了DNS,而无需您的干预。

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

当然,使用Elastic IP的单个区域中的主动/被动困境的一部分很容易在两个应用服务器上用HAProxy修复。它是一个http请求路由器和ELB等负载均衡器,但具有更广泛的功能。代码非常紧凑,您可以在可忽略的CPU消耗的情况下在您的应用服务器上运行代码。然后,EIP实例将平衡本地应用服务器和对等设备之间的流量。在各地区,ELB后面的HAProxy可以将流量转发到远程地区的队友,如果本地区域已启动,但由于某种原因,应用程序无法为本地区域提供请求。 (我使用这样的设置来增加外部服务的可用性,当来自本地区域的直接Internet路径不起作用时,通过向远程AWS区域弹出请求)。

+0

我应该了解,根据您的体验,DNS缓存问题从来不是一个足以重新考虑使用ELB的重要因素? –

+0

我喜欢这两个应用程序都处于活动状态时主动/被动HAProxy的想法。如果完美的故障转移是目标,那么这种设置不会被ELB所青睐吗? –

+0

回复:DNS缓存,这是正确的。 –