多个数据中心和HTTPstream量:DNS循环是确保即时故障转移的唯一方法?

指向同一个域的多个Alogging似乎几乎专门用于实现DNS Round Robin作为一种便宜的负载平衡技术。

针对DNS RR的通常警告是对高可用性不利。 当一个IPclosures时,客户端将继续使用它几分钟。

负载平衡器通常被认为是更好的select。

这两个要求并不完全正确:

  1. 当stream量是HTTP时,大多数HTML浏览器能够自动尝试下一个Alogging(如果前一个logging已closures),而不需要新的DNS查询。 在这里阅读第3.1章

  2. 当涉及多个数据中心时,DNS RR是通过它们分配stream量的唯一select。

那么,在多个数据中心和HTTPstream量的情况下,使用DNS RR是确保在一个数据中心发生故障时立即进行故障切换的唯一方法吗?

谢谢,

华伦天奴

编辑:

  • 当然,每个数据中心都有一个带有热备份的本地负载均衡器。
  • 牺牲即时故障切换的会话亲和力是可以的。
  • AFAIK DNSbuild议一个数据中心而不是另一个数据中心的唯一方法是只回复与该数据中心相关的IP(或IP)。 如果数据中心变得无法访问,那么所有这些IP也是不可访问的。 这意味着,即使智能HTML浏览器能够立即尝试另一个Alogging,所有的尝试都将失败,直到本地caching条目到期,并完成新的DNS查找,获取新的工作IP(我假设DNS自动build议新的数据中心,当一个失败)。 所以,“聪明的DNS”不能保证即时的故障切换。
  • 相反,DNS轮询允许它。 当一个数据中心出现故障时,智能HTML浏览器(大多数)会立即尝试其他caching的Alogging跳到另一个(工作)的数据中心。 所以,DNS循环不保证会话亲和性或最低的RTT,但似乎是当客户端是“智能”HTML浏览器时确保即时故障转移的唯一方法。

编辑2:

  • 有人build议将TCP Anycast作为一个明确的解决scheme。 在本文中(第6章)解释了Anycast故障切换与BGP收敛有关。 为此,Anycast可以使用15分钟到20秒来完成。 在拓扑结构为此优化的networking上可能需要20秒。 可能只有CDN运营商可以授予这种快速失败。

编辑3:*

  • 我做了一些DNS查找和traceroute(也许一些专家可以仔细检查)和:
    • 使用TCP Anycast的唯一CDN似乎是CacheFly,CDNnetworking和BitGravity等其他运营商使用CacheFly。 似乎他们的边缘不能用作反向代理。 因此,它们不能用于授予即时故障转移。
    • Akamai和LimeLight似乎使用地理感知DNS。 但! 他们返回多个Alogging。 从traceroute看来,返回的IP在同一个数据中心上。 所以,我对当一个数据中心崩溃时如何提供100%的SLA感到困惑。

当我使用术语“DNS Round Robin”时,我通常指的是OP所描述的“廉价负载平衡技术”。

但是,这不是DNS可用于全球高可用性的唯一方法。 大多数时候,拥有不同(技术)背景的人很难沟通。

最好的负载平衡技术(如果钱不是问题)通常被认为是:

  1. Anycast全球“智能”DNS服务器networking,
  2. 和一套遍布全球的数据中心,
  3. 每个DNS节点实现水平分割DNS,
  4. 并且以某种方式对“智能”DNS节点提供对可用性和业务stream量的监控,
  5. 使用户的DNS请求通过IP Anycaststream向最近的DNS服务器
  6. 并且这个DNS服务器通过“智能”水平分割DNS向最终/最好的数据中心提供低TTL Alogging/一组logging

对于DNS使用Anycast通常很好,因为DNS响应是无状态的,几乎非常短。 所以如果BGP路由发生变化,那么就不太可能中断DNS查询。

Anycast不太适合长时间和有状态的HTTP会话,因此这个系统使用水平分割DNS。 客户端和服务器之间的HTTP会话保存到一个数据中心; 它通常不会故障转移到另一个数据中心而不会中断会话。

正如我用“Alogging集”所表示的那样,我将称之为“DNS循环”,可以与上面的设置一起使用。 它通常用于将stream量负载分散到每个数据中心中的多个高可用性负载均衡器(以便您可以获得更好的冗余,使用更小/更便宜的负载均衡器,而不会压倒单个主机服务器的Unixnetworking缓冲区等)。

那么,对于多个数据中心和HTTPstream量来说,使用DNS RR是确保高可用性的唯一方法吗?

不,这不是真的,如果通过“DNS Round Robin”,我们只是指为一个域分发多个Alogging。 但是,巧妙使用DNS是任何全球高可用性系统中的关键组件。 以上说明了一种常见的(通常是最好的)方式。

编辑:谷歌的论文“移动端到端path信息以优化CDN性能”在我看来是最好的最终用户性能的全球负载分配技术。

编辑2:我读过OP链接到的文章“为什么DNS基于.. GSLB ..不工作” ,这是一个很好的概述 – 我build议看看它。 从顶部阅读。

在“浏览器caching问题的解决scheme”一节中,它提倡使用指向多个数据中心的多个Alogging的DNS响应作为瞬时故障转移的唯一可能的解决scheme。

在靠近底部的“浇水”部分,它扩大了显而易见的地方:如果发送多个Alogging指向多个大陆上的数据中心,那么发送多个Alogging是不太酷的,因为客户端将随机连接,因此经常得到“缓慢” DC在另一个大陆上。 因此,要真正做到这一点,需要在每个大陆上的多个数据中心。

这是一个不同于我的步骤1 – 6的解决scheme。我不能提供一个完美的答案,我认为需要来自Akamai或Google之类的DNS专家,因为其中的大部分内容都归结为实践知识今天部署的DNScaching和浏览器的局限性。 AFAIK,我的步骤1-6是Akamai用DNS做的(任何人都可以证实这一点?)。

我的感觉来自于在移动浏览器门户网站(手机)工作的PM,因为浏览器的多样性和完全破坏程度令人难以置信。 我个人不会相信要求terminal用户terminal“做正确的事情”的高可用解决scheme。 因此我相信,今天没有断线的全球即时故障是不可行的。

我认为我上面的步骤1-6是商品技术中最好的。 此解决scheme不具有即时故障转移。

我非常喜欢来自Akamai,Google等的DNS专家来certificate我错了。 🙂

你的问题是:“DNS轮询是保证即时故障转移的唯一方法吗?

答案是:“DNS循环从来不是确保即时故障切换的正确方法”。

(至less不是自己的)

实现即时故障切换的正确方法是使用BGP4路由,使两个站点使用相同的IP地址。 利用互联网的核心路由技术,将请求路由到正确的数据中心,而不是使用互联网的核心寻址技术。

在最简单的configuration中,这只能提供故障切换。 它也可以用来提供Anycast,但是如果在路由中存在任何不稳定的情况,基于TCP的协议在切换时将会失败。

那么,对于多个数据中心和HTTPstream量来说,使用DNS RR是确保高可用性的唯一方法吗?

显然,这是一个虚假的主张 – 你只需要看看谷歌,Akamai,雅虎,看看他们是不是使用循环法作为他们唯一的解决scheme(有些人可能会使用它的一部分,与其他方法。)

有很多可能的select,但它取决于你有什么其他的限制,与你select的服务/应用程序。

如果您也安排IP地址的“故障转移”,则可以使用简单的协同定位服务器方法的循环技术,而不必担心服务器故障。 (但大多数select负载平衡技术,单个IP地址,负载平衡器之间的故障切换)。

也许您需要将单个会话的所有请求发送到相同的服务器,但是您希望请求分布在不同的区域服务器群集中? 循环法并不合适,因为您需要做一些事情来确保每次给定客户端访问同一个物理服务器集群(除非发生“例外”,例如服务器故障)。 他们要么从DNS查询中获得一致的IP地址,要么路由到同一个物理服务器集群。 这些解决scheme包括各种商业和非商业DNS“负载平衡器”,或者(如果您有更多的networking控制)BGPnetworking广告。 你可以简单地安排你自己的域名服务器给出完全不同的响应(但是,由于DNS请求可以发送到所有的地方,你将不会达到任何位置的亲和力)。

[*我打算使用“循环法”,因为DNS术语中的“RR”是指“资源logging”。]

非常漂亮的观察vmiazzo +1为你! 我被卡在你的位置了..对这些CDN如何做他们的魔法感到困惑。

以下是我对CDN如何运行其networking的猜测:

  • 使用Anycast DNS(由Jesper Mortensen提到)来获得最近的数据中心
  • 他们运行跨越不同数据中心的本地networking ,使他们能够在不同数据中心的主机上执行类似于CARP的操作

要么

  • 他们使用网关负载平衡协议在他们的路由器或热备份路由器协议(HSRP) 。 处理数据中心的中断。
  • 他们包含多个IP的原因是客户端会重试,到客户端重试时,路由path可能已经改变。

在解决scheme为我工作的那一刻: – DNS返回多个IP,例如:

www -> CNAME www1 , www1 A -> 123.123.123.1 www -> CNAME www2 , www2 A -> 123.123.123.1 www -> CNAME www3 , www3 A -> 123.123.123.1 www3 A -> 8.4.56.7 <--- reverse proxy 
  • 最后一个入口指向amazon云的反向代理,它智能地传递给可用服务器(或在维护页面下提供)

反向代理服务器依然受到重创,但是僵尸主机却一炮走红。

为什么在任何一种浏览器中都没有实现RFC 2782(像http,imap等服务一样应用MX /优先级)? 事情会更容易…有一个错误,在Mozilla开放十年! 因为这将是商业负载平衡器行业的终点? 我对此非常失望。

2 – 你可以使用Quagga的 Anycast来完成

(即使有一些Anycast与TCP有关的信息,有几家大公司使用它,如CacheFly)

我想知道有多less人回答这些问题实际上是在运行一个庞大的全球服务器networking? Google正在使用循环法,而我的公司已经使用了好几年了。 它可以工作得很好,有一些限制。 是的,需要通过其他措施加以扩充。

真正的关键是如果服务器出现故障,愿意接受一两个打嗝。 当我拔下服务器上的插头时,如果浏览器正在尝试访问该服务器,则在浏览器获知IP地址已closures的情况下,会有一分钟左右的延迟。 但它很快就会转到另一台服务器上。

它工作的很好,那些声称导致很多问题的人不知道他们在说什么。 它只是需要正确的devise。

故障转移很糟糕。 最好的HA始终使用所有资源。

自1986年以来,我一直在与HA一起工作。我经历了广泛的培训来创build故障转移系统,我根本不是故障转移的粉丝。

此外,即使被动而不是主动地,RR也能够分配负载。 我们的服务器日志清楚地显示了每台服务器上适当的stream量百分比 – 合理的。

另一个非常简单的select是在DNS A或CNAMElogging中使用低(由您的需求决定的低点)TTL,并更新此logging以select使用哪个IP。

我们有2个ISP和几个公共服务,我们正在成功使用这种方法从3年的高可用性。

一个扳手在工作中是一些ISPsconfiguration不当的parsing器caching设置的时间间隔logging,完全忽略TTL设置。 这不应该是这样,也没有任何借口,但可悲的是,我从移植许多网站和服务的经验,它确实发生。

TCP Anycast实际上非常稳定,至less被CacheFly(自2002年以来),Prolexic和BitGravity使用。 在NANOG 37上完成了TCP Anycast的一个很好的演示: http : //198.108.95.21/meetings/nanog37/presentations/matt.levine.pdf

多个Alogging是消除可能的单点故障的唯一方法。 任何其他解决scheme都会强制所有传入请求通过服务器和客户端之间的某个设备。

所以对于绝对冗余来说,这是必要的。 这就是为什么谷歌,或任何其他人想保证持续的服务可用性。

这很明显,为什么是这种情况…多个Alogging是将请求路由到客户端浏览器的唯一方法。 任何其他方法将依赖于客户端浏览器和服务器之间发生故障的单一点,从而降低您的服务。 通过使用Alogging,从客户端到服务器的唯一单点故障就成为客户端本身。

如果您没有多个Alogging设置,则需要停机。

但这种方法显然不能依靠负载平衡。