我最近开始阅读和玩AWS。我对不同的高可用性体系结构特别感兴趣,这些体系结构可以使用该平台来实现。具体来说,我正在寻找一个可靠的穷人解决方案,可以使用服务器的最小数量的来实现。
到目前为止,我对主要HA关注点的解决方案感到满意:负载平衡、冗余、自动恢复、可伸缩性.
我遇到的唯一症结是故障转移解决方案。
使用ELB可能看起来很棒,但是ELB实际上是在引擎盖下使用DNS平衡。见AWS的弹性负载均衡器是单点故障吗?。也来自Netflix的博客文章:Netflix从AWS中断中吸取的教训
这是因为ELB是一个两层负载平衡方案。第一层由基于基本DNS的循环负载平衡组成。这使客户端到达云中的ELB端点,该端点位于您的ELB配置要使用的区域之一。
现在,我已经了解到DNS故障转移并不是一个理想的解决方案,正如其他人指出的那样,这主要是因为不可预测的DNS缓存。例如,参见:为什么不推荐DNS故障转移?。
除了ELB之外,在我看来,大多数AWS架构都依赖于使用路由53的DNS故障转移。
最后,浮动IP /弹性IP (EIP)策略出现在非常少的文章中,比如利用多个IP地址进行虚拟IP地址故障转移,我很难弄清楚这对于生产系统是否是可行的解决方案。此外,我遇到的所有示例都使用一组主动-被动实例实现了这一点。要实现这一点,对每一个积极主动的人来说,拥有一个被动的人,似乎是一种浪费。
有鉴于此,我想问你什么是更快和更可靠的方式来执行故障转移?
更具体地说,请讨论如何在以下两个设置中不使用DNS执行故障转移:
发布于 2015-10-07 18:02:45
如果你像我一样是那种好奇的人,你就能更好地理解ELB。
在两个可用区域中提供的"1“ELB被标榜为1,但部署为2。有2个IP地址分配给每个平衡器,以及2个自动创建的记录,每个记录都有非常短的TTL。
这两个平衡器中的每一个都将在其相同的AZ中将流量转发给实例,或者您可以启用跨AZ负载平衡(如果每个AZ中只有一个服务器实例,则应该这样做)。
这些IP地址不会经常改变,尽管ELB和其他任何东西一样失败是合理的,但我可能有30个IP地址,而且我从来没有意识到有一个死IP地址在我手上,大概是因为ELB基础设施会取代一个死实例,在没有您干预的情况下更改DNS。
对于两个区域,除了在某种程度上使用DNS之外,您别无选择。来自53号路由的基于延迟的路由可以在正常操作中将人发送到最近的站点,并在整个区域发生中断时将所有通信量路由到另一个站点(正如路由53的健康检查所检测到的那样),但在整个区域不可用时,使用该路由更容易遇到DNS缓存问题。
当然,在两个应用服务器上使用HAProxy很容易地解决单个区域中使用弹性IP的部分主动/被动困境。它是一个http请求路由器和负载均衡器,如ELB,但具有更广泛的功能集。代码太紧了,你很可能可以在你的应用服务器上运行它,CPU消耗可以忽略不计。然后,带有EIP的实例将平衡其本地应用服务器和对等服务器之间的流量。跨区域,如果本地区域已启动,则ELB后面的HAProxy可以将通信量转发给远程区域中的配偶,但无论出于何种原因,应用程序都无法满足来自本地区域的请求。(我使用了这样的设置来增加外部服务的可用性,在本地地区的直接Internet路径无法工作时,将请求回弹到远程AWS区域。)
https://stackoverflow.com/questions/32983909
复制相似问题