如果我在AWS EC2上托管了四个相同的服务器,则将其分为两组,每个组位于不同的AWS区域。每组前面都有一个ELB。我配置了两个加权别名记录(不是基于延迟)指向AWS Route53中每个组的ELB。
每个服务器都安装了一个简单的apache2
服务器,它显示一个带有不同单词的简单页面,以便彼此区分。我启动了一个浏览器客户端(由Selenium库制作)频繁重新加载页面,其中URL是这些服务器的域名(暂停1秒),但我发现浏览器(firefox
)总是返回一个组中服务器的页面,而不是像Weighted Round Robin那样在50%的时间内从两个组中返回页面。
我还发现,如果我暂停一段相对较长的时间,其他组的页面会返回,但只要我经常刷新页面。它永远不会改变。请求始终命中一个组而不是另一个组。
我还编写了一个简单的Java
程序来继续从AWS Route 53查询域名,我收到的地址确实在两个组之间发生了变化,但是浏览器似乎停留在与它首次连接的组的连接中(只要我经常刷新)
我怀疑这是TCP连接仍然存在的问题,但我不确定。顺便说一句,我已经禁用了浏览器缓存,我使用的是Mac OS X 10.9。 (这确实发生在Ubuntu上)
任何想法都会非常感激。这个问题对我的作品非常重要,截止日期即将来临。很多人都提前感谢。
答案 0 :(得分:0)
不幸的是,这是正常的。
许多(可能是大多数)浏览器缓存从操作系统获得的DNS响应,并且此缓存的时间与DNS TTL无关 - 它由浏览器开发人员自行决定。
对于Firefox,默认情况下的时间似乎是60秒,因此,不太可能与Keepalive直接相关,尽管肯定有一些潜在的可能性......虽然时间间隔较短,但在某些情况下,因为许多服务器会在60秒之前拆除一个空闲的保持连接连接,因为连接闲置这么长时间是浪费资源的潜在代价。
Firefox:http://kb.mozillazine.org/Network.dnsCacheExpiration
有关不同浏览器行为的问题和观察的讨论,请参阅:http://dyn.com/blog/web-browser-dns-caching-bad-thing/