我是否可以这样设置 DNS,即如果一个 IP 地址出现故障,则使用另一个 IP?

我是否可以这样设置 DNS,即如果一个 IP 地址出现故障,则使用另一个 IP?

我打算创建一个具有两个负载均衡器的 SaaS。如果一个负载均衡器发生故障,“MySaaSApp.com”将指向另一个负载均衡器。仅通过 DNS 记录就能实现吗?谢谢!

答案1

不,或者总体上不是。

DNS 默认进行负载平衡,而不是故障转移。如果给定名称和记录类型有多个数据,则应用程序应该使用所有这些数据。但由于它们是集合,而不是列表,因此无法保证顺序。而且记录会被缓存,因此尽管如此,应用程序还是没有“立即”从故障案例故障转移到正常案例的方法。

但它们是例外。MX记录通过优先级字段进行排序,因此如果第一个记录失败,应用程序(即 SMTP 客户端或 MUA/MTA)预计会自动切换到第二个记录,依此类推。但这是因为它在记录的规范中得到支持MX,并且因为它在记录中具有特定的信息,即优先级。

对于允许实施负载平衡和故障转移的记录也是一样SRV...只要开发应用程序来使用这些记录,例如,对于 Web 浏览器来说情况并非如此,由于一些现在的历史原因,这些问题应该在未来通过新的HTTPS记录SVCB类型来解决。

热/热或热/冷配置中的负载均衡器具有解决这些问题的特定协议。您通常使用 IP 任播和一些巧妙的 BGP 路由,或者使用在各个系统之间浮动的某些“虚拟”IP 地址,这些地址需要同步以确保 IP 地址在任何时间点都只由一个系统声明。例如,看看 VRRP,或者https://www.haproxy.com/blog/failover-and-worst-case-management-with-haproxy/例如使用 HAProxy 时。

答案2

反击帕特里克的回答;尽管 DNS 协议没有本机故障转移机制,但相当多的 DNS 提供商确实支持通过将健康检查与记录绑定来更改 DNS 记录。

然后,您可以配置 example.com 解析为example.com 60 IN A 10.0.0.1只要 Web 请求https://10.0.0.1/healthcheck产生 200 响应。

如果没有的话,则返回example.com 60 IN A 10.9.8.1或类似。

请注意,DNS 记录必须带有生存时间 TTL 值(上例中为 60 秒),该值决定解析器应缓存记录的时间。TTL 越短,缓存记录过期越快,故障转移发生的速度也越快,但名称服务器的负载也越大,延迟也越大。
请注意,并非每个解析器都能正确遵守 TTL 记录,这意味着在发生故障转移时,部分用户将解析到旧 IP 地址的时间比您设计的时间要长得多...

例如https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-failover.html

相关内容