我在 namecheap 购买了域名,并在客户面板上设置了我的个人 NS 服务器:
ns1.example.com
ns2.example.com
1) 如果服务器 ns1 不可用,所有请求是否仍会到达 ns1 或所有请求都会到达服务器 ns2?如果 ns1 或 ns2 不可用,如何设置所有请求的突然切换?
2)在 NS 服务器 ns1/2 之后,我有负载均衡器,以防其中一个 LB 保持不可用,如何设置 ns 服务器来检查此状态(使用哪个应用程序 - 绑定,否则,是否可以有一些 api 或者您可以将其设置为仅将所有请求重定向到工作的 LB)?
答案1
1)如果服务器 ns1 不可用,所有请求是否仍会到达 ns1 或全部到达服务器 ns2?
不,DNS 不是那样工作的。它默认提供负载平衡,而不是故障转移。
DNS 处理的是资源记录集。不是列表,而是集合。列表是有序的,而集合则无序。
域名的名称服务器集包含该域名的所有权威名称。换句话说:如果example.org
有ns1.example.com
,ns2.example.com
那么从统计上讲,两个服务器将始终接收所有请求的 50%。不是100%ns1
并且只有当它失败时它才会 100% 到ns2
。
因此,每个请求占 50%,但如果其中一个请求因某种原因停止响应,会发生什么情况:解析器将切换到另一个请求,但只有在查询它之后才会切换到另一个请求,因为它无法知道它何时停止响应,并且它还必须定期探测不响应的请求,以便检测它何时恢复在线。这意味着解析将会发生,但会花费更多时间,因为算法将首先:- 询问ns1
- 等待一段时间 - 再次询问ns1
- 等待一段时间 - 在某个时间点(两次查询之间的等待时间和重试次数通常是可配置的,并且在每个软件中都不同)它将切换到ns2
并最终获得答复。
此 DNS 解析来源处的调用应用程序本身可能已超时,因此如果上述情况发生且耗时过长,它可能已停止等待答复。
如今,“高可用性 DNS”通常通过使用任播技术来提供:名称服务器解析到在不同位置任播的 IP 地址。这既提供了更好的性能(因为有更多的“本地”访问)又提供了自动故障转移(但由于 IP 功能,而不是特定的 DNS 功能),因为如果某个节点没有回复,另一个节点将选择流量,这是由于 BGP 的工作方式。因此,事情不会产生上面描述的超时和重试循环。
在 NS 服务器 ns1/2 之后,我有负载均衡器
我不太清楚,但无论如何都不要将负载平衡器或任何东西放在名称服务器前面。它们通常会产生比提供解决方案更多的问题(因为它们通常实现 DNS 协议的一个非常狭窄的子集,因此会产生互操作性问题)。
有没有一些 api
有很多方法可以配置和使用负载均衡器,并且确实可以设置它们以考虑它们所面对的服务的状态。但在这个阶段,你的问题太宽泛了,你需要更清楚,考虑到第一部分和你可能存在的 DNS 误解。
答案2
您使用的域名系统 (DNS) 服务器类型对方法有很大影响。例如,Active Directory 集成区域与其他 DNS 服务器(通常也是域控制器)之间有适当的复制,可提供一定程度的容错能力。
客户端通常会被指定为主要、次要,在某些情况下还会指定为第三及以后的 DNS 提供商,以在其本地 IP 配置中使用。如果客户端尚未缓存记录(基于其生存时间 (TTL))并且在请求时无法访问其主要 DNS 提供商,它将开始通过次要提供商工作,直到达到其超时间隔。将这种主次客户端 DNS 提供商指定视为主动-被动高可用性的相对版本是一种正确的思考方式。
现代负载平衡解决方案,尤其是高端物理设备,通常具有健康检查(通常称为“探测”),可用于检查您正在寻找的服务状态。您必须参考供应商文档进行实施。但是,请记住,如果您的NS1和NS2已关闭,并且您的负载均衡器的名称记录由客户端指向的相同 DNS 提供商提供,那么在故障的第三阶段,依赖负载均衡器基本上不会为您提供任何东西(除非一些幸运的客户端记录缓存)。