我有一个子域名(我不拥有该域名),但使用 Cpanel 我能够为子域名设置 A、NS、Cname 记录。我想要做的是将子域名与两个网络主机关联,并确定它们的优先级,这样如果优先级较高的网络主机关闭,则改用第二个网络主机。
现在我已经将两个网络主机的 NS 记录都设置为子域名,但我不知道是否存在优先级。
如果可能的话,如何完成这项任务?
答案1
您无法仅使用 DNS 来实现这一点,因为 A 或 CNAME 记录中没有优先级字段。 您可以通过以下方式实现此目的:
- 在 cPanel 中,创建两个指向 webhostA 和 webhostB 的 A 记录
- 您的访问者的浏览器将随机选择一个主机(实际上 DNS 服务器通常采用循环方式,即以随机顺序返回记录,浏览器将选择第一个记录)。换句话说,您无法控制哪个客户端去往何处,它将大致平均地分布在各个网络主机之间。
- 如果 webhostA 或 webhostB 瘫痪,则访问者的浏览器应该尝试另一个。
还有更复杂的设置,如基于地理定位的全球 DNS 负载平衡,或使用本地负载平衡器,但这些听起来不适合您的用例。
答案2
听起来你把 DNS 托管和网络托管混为一谈了。你需要分别对待它们。
DNS 托管
您的域名应托管在一组一致的名称服务器上。一致的意思是,您域名的所有名称服务器都应提供相同的数据,这些数据来自同一个区域文件。标准做法是使用一个名称主服务器和一个或多个配置为该主服务器的从属名称服务器。
您的 DNS 可以由托管网站的同一提供商托管,也可以由其他地方托管。只要有一个主名称服务器,而所有其他名称服务器都是从属服务器即可。由于您的域名不直接属于 gTLD 或 ccTLD,因此您还可以选择不委托它,而只将 A 和 AAAA 记录放在父域的区域文件中(您说您可以使用 Cpanel 执行此操作)。
虚拟主机
我认为您无法使用 DNS 实现故障转移目标。您可以在 DNS 中放置多个 A 和 AAAA 记录,指向网站的不同实例,但客户端将或多或少随机且统一地使用它们。
您可以使用位于网站前端的负载均衡器,但负载均衡器会成为单点故障。
您可以将 A 和 AAAA 记录的 TTL 设置为较低的值(例如 5 分钟),并在网站的主实例出现故障时手动或自动(例如通过动态 DNS)更改它们。
您可以使用任播 IP 地址,并由辅助实例宣布到包含优先级较低的任播地址的块的路由,但这需要可移植 IP 地址块和 BGP。