最近我注意到,为主机名设置多个Alogging不仅可用于循环负载平衡,而且还可用于自动故障转移。
所以我试过了:
事实上,浏览器自动尝试不同的服务器来加载页面。 这在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时非常积极。
几件事情:
除此之外,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:
如果一个PHP-FPM出现故障,则清漆探测将失败并移除后端,直到探针再次良好。 如果Varnish失败,则Round Robin +浏览器将处理更改到另一个节点。