我已经阅读了这里的许多答案,其中大多数都在处理循环 DNS (RR DNS),但我有一个不同的问题。如果在 DNS 级别我以特定顺序解析 3 个 IP,.1/.2/.3,浏览器会按顺序使用这些地址吗?
如果其中一个 IP 出现错误,404、503、403 等,浏览器会按顺序尝试下一个 IP,这样如果服务器 .1 抛出 503 错误,浏览器会尝试 .2?和 .3 等等,直到它能够到达正常工作的系统或运行所有地址?
此处的目的不是轮询流量或潜在地分散负载,而是我在考虑,如果我的应用程序出现故障,浏览器是否会自动恢复。此外,假设前 2 个条目是本地中心,而第 3 个条目是不太理想的选择,我是否可以按顺序计算,这样我就不会让用户做出可怕的延迟决定,因为我希望在分辨率中将其作为最后的备份手段。
有什么想法吗?
答案1
首先,DNS 记录是不是以可预测的顺序返回。客户端使用的顺序(如果有的话)几乎总是仅有的第一个。但由于返回的顺序本质上是随机的,所以可能是其中任何一个。
浏览器并不关心这些。它只会尝试连接其中一个服务器一次,不会再尝试其他服务器(Happy Eyeballs 除外,但这里与它基本无关)。一旦收到响应,无论什么响应,它都会完成。它不会自行“重试”。
无论您设计哪种解决方案,重要的是尽快移除故障的后端,以便流量不再流向它们。这是负载均衡器的目的之一。
答案2
有一个原则你必须知道;
如果客户端收到错误 403、404 或 503,则表示远程服务器发回了错误代码,客户端将不会尝试第二个 IP,因为它实际上正在那里获取数据。这些错误意味着网络服务器错误,而不是互联网链接错误。
客户端只会在 DNS 条目的 TTL 之后切换 IP,或者如果应用程序请求新的 DNS 查找,则缓存新条目。(或者如果客户端重新启动应用程序,因此可能会发生新的 DNS 查找)