全球高可用性设置问题


10

我拥有并经营visualwebsiteoptimizer.com/。该应用程序提供了一个代码段,我的客户将其插入他们的网站中以跟踪某些指标。由于代码段是外部JavaScript(位于网站代码的顶部),因此在显示客户网站之前,访问者的浏览器会与我们的应用服务器联系。万一我们的应用服务器出现故障,浏览器将在超时之前(通常为60秒)继续尝试建立连接。您可以想象,在任何情况下我们都无法关闭我们的应用服务器,因为它不仅会对网站访问者产生负面影响,还会对客户的网站访问者造成负面影响!

我们目前正在将DNS故障转移机制与位于不同数据中心(实际上是不同大陆)的一台备份服务器一起使用。也就是说,我们从3个不同的位置监视我们的应用服务器,并且一旦检测到它已关闭,我们就会更改A记录以指向备份服务器IP。这对于大多数浏览器都可以正常工作(因为我们的TTL为2分钟),但是IE会将DNS缓存30分钟,这可能会破坏交易。请参阅我们的visualwebsiteoptimizer.com/split-testing-blog/maximum-theoretical-downtime-for-a-site-30分钟/的最新帖子/

因此,在应用程序数据中心遭受严重故障的情况下,我们可以使用哪种设置来确保几乎即时的故障转移?我在这里阅读了www.tenereillo.com/GSLBPageOfShame.htm,它具有多个A记录是一种解决方案,但我们还无法负担会话同步的费用。我们正在探索的另一种策略是拥有两个A记录,一个指向应用服务器,第二个指向反向代理(位于不同的数据中心),该反向代理在启动时解析为主应用服务器,在启动时解析为备份服务器。您认为这种策略合理吗?

为了确保我们的优先事项,我们有能力关闭我们自己的网站或应用程序,但由于停机时间,我们不能让客户的网站速度变慢。因此,万一我们的应用程序服务器出现故障,我们不打算使用默认的应用程序响应进行响应。即使是空白响应也已足够,我们只需要浏览器完成该HTTP连接即可(仅此而已)。

参考:我读了这个有用的线程serverfault.com/questions/69870/multiple-data-centers-and-http-traffic-dns-round-robin确保的唯一方法

Answers:


6

您的情况与我们的情况非常相似。我们想要拆分数据中心和网络层类型的故障转移。

如果您有足够的预算来做,那么您需要的是两个数据中心,每个数据中心都有多个IP传输,一对边缘路由器与您的传输提供商进行BGP会话,将您的IP地址发布到全球互联网。

这是进行真正的故障转移的唯一方法。当路由器注意到到您的服务器的路由不再有效时(您可以通过多种方式执行此操作),则它们将停止通告该路由,并且流量将流向另一个站点。

问题是,对于一对边缘路由器,最初要花相当多的钱才能完成此设置。
然后,您需要在所有这些基础上建立网络,并且您可能希望将站点之间的某种第2层连接视为点对点链接,以便能够将传入的流量路由到一个数据中心,如果您的主站点发生部分故障,则直接与另一个站点交互。

BGP多宿主/多位置最佳实践提高弹性的最佳方法?是我问过的类似问题。

羞愧的GSLB页面确实提出了一些要点,这就是为什么我个人从不愿意选择GSLB来完成BGP路由的原因。

您还应该查看网络中的其他故障点。确保所有服务器都具有2个NIC(连接到2个单独的交换机),2个PSU,并且您的服务由多个后端服务器(作为冗余对或负载平衡的群集)组成。

基本上,通过多个A记录进行的DNS“负载平衡”仅是“负载共享”,因为DNS服务器不了解每个服务器上有多少负载。这很便宜(免费)。

GSLB服务对服务器的负载及其可用性有一些概念,并提供了更大的抗故障能力,但仍然受到与dns缓存和挂钉有关的问题困扰。这便宜些,但稍微好一点。

恕我直言,以坚实的基础架构为后盾的BGP路由网络是真正保证正常运行时间的唯一方法。通过使用路由服务器而不是Cisco / Juniper / etc路由器,您可以节省一些钱,但是最终,您确实需要非常小心地管理这些服务器。这绝不是便宜的选择,也不是轻率的事情,但这是非常有益的解决方案,它使您以提供商而不是消费者的身份进入互联网。


谢谢,我想对您的回答进行投票,但是由于我是新来的所以不能。好吧,是的,BGP路由网络似乎是必经之路,但是对于启动来说,设置和管理它可能相当困难(从成本和人力资源角度而言)。我希望有一个更便宜的解决方案,但可能没有。
Paras Chopra 2010年

1
我想,今晚我将在博客上写这篇文章。对于您来说,对于边缘路由器而言,最便宜的解决方案是一对分别带有一对额外NIC的Dell R200,以及一堆RAM(4-6GB应该足够),然后运行FreeBSD和Quagga或BIRD之类的东西。
汤姆·奥康纳

太棒了!我一定会检查一下。请使用链接更新此线程,以免错过。
Paras Chopra 2010年

El-Cheapo路由器解决方案上的+1-实际上,我公司正在运行FreeBSD路由器,并取得了不错的成绩。如果您想要一些更商用的产品(但仍比同类Cisco设备便宜),Juniper Networks设备(www.juniper.net)也可能是一个不错的选择。
voretaq7 2010年

4

好的,这是在不久前问到的,但现在我第一次看到它。

该代码段是外部JavaScript(位于网站代码的顶部),在显示客户网站之前,访问者的浏览器会与我们的应用服务器联系。

你应该:

  1. 将您的Javascript文件放置在良好的专业内容交付网络上,即从已经具有该专业知识的人员那里购买高度可用的Javascript HTTP(S)服务。
  2. 对Javascript进行编程,使其处于良好的后备状态,即,如果您的应用服务器无法快速响应,则最终用户将看到一个正常的,未修改的页面。

确实,做其他事情是不负责任的。我假设您已经有此位置。

你应该不是在BGP基础服务路由的招数,除非你有或获得的诀窍这样做。毫无疑问,复杂的BGP路由方案并非易事。如果您没有特定领域的知识,请不要自己做。

您的问题本身有点困惑。分析如何创建高可用性服务始于应用程序数据,因为这是您的“状态”。无状态部分易于提高可用性,而全状态部分则不然。因此,与其关注服务器和DNS,不如关注应用程序的维护状态。首先从那里进行优化,然后可能要求有关堆栈溢出的算法建议。您可以在Javascript文件fx中实现事务和智能服务器重试的概念吗?


1

实际上,如果您将geodns和dns故障转移结合在一起,则可以升级您想要的内容,以帮助您进行拆分测试活动。

即使将A组发送到ip 1,将B组发送到ip 2,即使它们位于同一服务器上,也可以将测试组分开。A组和B组来自不同的地理区域。公平地说,第二天/周/月,请翻转组以确保考虑到地理差异。只是要严格按照您的方法。

http://edgedirector.com上的geodns / failover dns服务可以做到这一点

披露:我与上述链接相关联,偶然发现本文研究了将愚蠢的dns技巧应用于拆分测试的文章。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.