基于浏览器的DNS故障转移使用多个Alogging

最近我注意到,为主机名设置多个Alogging不仅可用于循环负载平衡,而且还可用于自动故障转移

所以我试过了:

  1. 我从我们的域加载了一个页面
  2. 注意到我们的服务器曾经服务过这个页面
  3. closures该主机上的Web服务器
  4. 重新加载页面

事实上,浏览器自动尝试不同的服务器来加载页面。 这在Opera,Safari,IE和Firefox中都有效。 只有Chrome浏览器无法尝试其他服务器。

但是离开服务器离线几分钟并查看访问日志后,我发现到其他服务器的请求数量没有显着增加 。 在3台服务器中有1台服务器处于脱机状态,我预计剩下的两台服务器的访问量大概会增加50%,而我只能看到7-10%。 这只能意味着在浏览器中的DNS故障转移不适用于大多数浏览器/访问者,这直接违背了我刚刚testing的内容。

有没有人有一个想法浏览器的DNS故障转移行为? 有什么可能的原因,为什么自动故障转移为我工作,而不是我们的大部分访客?

编辑:为了使自己清楚,我绝对没有改变我们的DNS设置; 这里没有TTL或传播问题,这都是关于客户端如何处理多个Alogging的。

好的,我将首先说DNS不是一个好的故障切换系统,你需要一个反向代理或负载均衡器。 经验不一样的原因有几个。 首先在chrome中,它使用OS来获取DNS信息,这取决于IP的操作系统,所以在这种情况下操作系统可能只给它一个IP。

至于其他浏览器,它高度依赖于他们如何做DNS如何工作。 所以浏览器本身可能会决定不尝试其他IP,甚至根据DNS服务器的响应尝试多次尝试同一个IP。

这将我们带到了DNS服务器本身,大多数人并不尊重你的TTLlogging,并保持它的感觉,这意味着用户可以获得你的旧IP很长一段时间。

第四,用户体验,你想让用户不得不刷新3或4次,以获得您的网站? 你的网站上是否有会话或基于login的东西,如果浏览器在会话中获得另一个IP,会发生什么情况。 如果你真的需要高可用性和正常运行时间,那么你真的需要考虑正确的做,或者最终会比使用一台服务器更糟糕。

浏览器通常在没有响应时尝试备用logging时非常积极。

几件事情:

  1. 您使用Chrome的问题可能与cachingDNS的方式有关 – 它会自行caching,并且非常积极; 在你有多个Alogging之前,它是否可能仍然有条目被caching?
  2. 同样,在添加额外logging以testing从外部进入的用户之后,是否至less等待DNS区域的TTL?
  3. 另外,确保服务器之间的负载相当均匀, 如果一台服务器只有10%的stream量,那么只有当另一台服务器死亡时才会有一个适度的增长。

除此之外,DNS轮询对于地理冗余和负载平衡非常有用,但请记住,本地故障切换还有其他更好的解决scheme。

对我来说,如果你不想为昂贵的负载均衡器付费,这是一件很棒的事情。 在这里查看我的回复, 浏览器是如何处理的: https : //serverfault.com/a/868535/114520

现在,为了您的关心,您是如何监控accesses ? 是access_log的大小吗? 是你的networking服务器每秒的请求?

也许你在web服务器上有一些caching解决scheme,如果请求已经在caching中,那么它将不会触及你的dynamic服务器(PHP,Java …)。 服务器越多,caching之前的请求越多(如果它们不共享caching)。

在假设它是一个DNS问题之前,添加一个真实的监测:例如实时分析跟踪器,或类似的东西。 然后closures一台服务器,并查看实时跟踪器是否显示网站上当前用户的减less。

多年来,我一直在使用这个设置,并且非常高兴。 我只添加了更多的故障转移解决scheme:

  • 在2或3个节点上循环
  • 每个节点都有:
    • 用导演/探针清理所有后端
    • 使用fastcgi在另一个端口上使用lighttpd(Apache或者nginx将会这样!)
    • PHP-FPM池

如果一个PHP-FPM出现故障,则清漆探测将失败并移除后端,直到探针再次良好。 如果Varnish失败,则Round Robin +浏览器将处理更改到另一个节点。