我的DNS服务器上定义的http服务有4台服务器:
app.speednetwork.in. IN A 63.142.255.107
app.speednetwork.in. IN A 37.247.116.68
app.speednetwork.in. IN A 104.251.215.162
app.speednetwork.in. IN A 192.121.166.40
对于所有这些DNS服务器指定一个超过10小时的TTL(生存时间):
$ttl 38400
speednetwork.in。 IN SOA plugandplay.click。 info.plugandplay.click。 ( 1454402805 3600 3600 1209600 38400)
Firefox会忽略TTL并在每60秒后创建一个新的DNS查询,如图所示 about:config - > network.dnsCacheExpiration 60 and about about:networking - > DNS。 Chrome在这里显示chrome:// net-internals / #dns一个正确的缓存dns条目,超过10个小时,直到Expired:
apis.google.com IPV4 216.58.210.174 2016-04-12 11:07:07.618 [Expired]
app.speednetwork.in IPV4 192.121.166.40 2016-04-12 21:45:36.592
但忽略此条目,每分钟重新查询dns,如https://groups.google.com/a/chromium.org/forum/#!topic/chromium-discuss/655ZTdxTftA所述,并在chrome:// net-internals /#events
上看到结论和问题:每分钟两个浏览器再次查询dns,从DNS上配置的4接收新IP,转到新的IP /服务器并丢失TOMCAT会话。
作为配置,每个用户浏览器都不是一个选项,我的问题是:
1)我可以使用其他一些DNS配置来实现高可用性吗?
2)我可以使用一些http标头来指示浏览器继续使用同一天的同一IP /服务器吗?
答案 0 :(得分:1)
DNS TTL值是可以缓存信息的最长时间。没有最短时间,也没有任何缓存要求。您描述的浏览器行为完全在DNS规范中,浏览器没有任何错误。如果您的服务器解决方案依赖于客户端记住DNS查找一段时间,那么您需要重新设计它。正如您已经发现的那样,它不起作用。
如今构建Tomcat服务器的负载平衡集群几乎不是火箭科学,您可以轻松地自行搜索解决方案。
答案 1 :(得分:0)
Keep-Alive标头可以成功。使用65秒的大值,浏览器会在所有会话中重复使用http连接,并且不会尝试新的DNS查询。在我的应用程序中也是如此,每分钟都有一个与服务器挂接的XMLHttpRequest连接,也许你需要更大的值。 Apache默认值为5秒。
直接使用tomcat:
response.setHeader(" Keep-Alive"," timeout = 65");
在tomcat前面使用apache(和mod_ajp):
nano /etc/apache2/apache2.conf:
{{1}}
但这不是一个完整的解决方案。断开http连接关闭后,或在几个并发服务器请求下,每个服务器请求都在多个服务器上打开,因此结果不在同一服务器会话下。 最后,我解决了这个实现CORS(跨域),修复服务器以使用(app1,app2等)并继续使用它直到此服务器失败。 服务器和客户端上的CORS标头让我可以交换数据,无论初始文件下载是来自应用程序。 (IE另一个域名)。