使用多个 A 记录的基于浏览器的 DNS 故障转移

Dan*_*iel 5 domain-name-system failover

我最近注意到为一个主机名设置多个 A 记录不仅可以用于循环负载平衡,还可以用于自动故障转移。

所以我尝试测试它:

  1. 我从我们的域加载了一个页面
  2. 注意到我们的哪些服务器提供了页面
  3. 关闭了该主机上的 Web 服务器
  4. 重新加载了页面

事实上,浏览器会自动尝试不同的服务器来加载页面。这适用于 Opera、Safari、IE 和 Firefox。只有 Chrome 无法尝试不同的服务器。

但是在将该服务器离线几分钟并查看访问日志后,我发现对其他服务器的请求数量并没有显着增加。在 3 台服务器中有 1 台离线时,我原本预计对其余 2 台服务器的访问量大约会增加 50%,但我只看到了 7-10%。这只能意味着浏览器内 DNS 故障转移对大多数浏览器/访问者不起作用,这与我刚刚测试的内容直接矛盾。

有没有人知道浏览器的 DNS 故障转移行为是怎么回事?为什么自动故障转移对我有效,但对我们的大多数访问者无效?

编辑:为了清楚起见,我绝对没有更改我们的 DNS 设置;这里没有 TTL 或传播问题,关键在于客户端如何处理多个 A 记录。

Jac*_*cob 4

好吧,我首先要说的是,无论如何,DNS 都不是一个好的故障转移系统,您需要一个反向代理或负载平衡器。造成体验不一样的原因有很多。首先,在 Chrome 中,它使用操作系统来获取 DNS 信息,因此这取决于 IP 的操作系统,因此在这种情况下,操作系统可能只给它一个 IP。

就其他浏览器而言,其工作方式高度依赖于它们的 DNS 处理方式。因此,浏览器本身可能会决定不尝试其他 IP,甚至根据 DNS 服务器的响应多次尝试同一 IP。

这让我们想到了 DNS 服务器本身,大多数不尊重您的 TTL 记录并保留它感觉的时间,这意味着用户可以在相当长的一段时间内获得您的旧 IP...

第四,用户体验,你是否希望用户必须刷新3次或4次才能访问你的网站?您的网站上是否有任何基于会话或登录的内容,如果浏览器在会话过程中获取另一个 IP,会发生什么情况。如果您确实需要高可用性和正常运行时间,您确实需要考虑正确、诚实地进行操作,否则最终会比仅使用一台服务器更加破碎。

  • 对,就是这样。DNS 服务器不断分发相同的 3 个 IP 地址(A、B、C),包括错误的 IP 地址 (A),并且当浏览器无法连接(到 A)时,它会故障转移(到 B/C) 。至少除了 Chrome 之外,我的浏览器都是这么做的。请慢慢地重新阅读我的问题。 (3认同)
  • 我不明白您如何期望 DNS 知道在不更改 IP 的情况下不要分发该 IP?您的 DNS 服务器不知道您的服务器已退出,并且会很乐意继续分发该 IP... (2认同)