DNS 在不影响消费者的情况下将记录切换为 CName

DNS Switch A Record to C Name Without Impacting Consumers

假设我们有一个 A REC,它指向我们的一项服务的 LB 的 IP x。它的 TTL 为 3600s。但是......它应该是一个指向 VIP 的 A REC 的 C 名称。它已经投入生产,并有大约 10 项服务调用由约 100 台机器组成的新 A REC。如果A REC被删除,创建一个新的同名C NAME指向新的A REC,消费者会注意到这个变化吗?呼叫者是否有可能超时?

我假设一些机器肯定会受到影响。如果我将 TTL 设置为 5 小时,是否会有更好的机会无人注意?

所以我的问题是,如何在我们服务的消费者不注意的情况下将 A REC 换成 C NAME?

记录仅供网络内部使用还是可供 public 使用是否重要?

我问是因为我们很快需要在数据中心之间进行负载平衡,并且我们有一些记录卡在指向某个 IP 上。

最好能解释一下 DNS 系统在这种情况下的行为方式。谢谢。

假设您有一个名字 foo.example.org,除了包含 IPv4 地址 192.0.2.1 和 3600 秒 TTL 的 A 记录外,什么都没有。任何查找 foo.example.org 的人都会得到那条 A 记录,并在他们去向您的名称服务器询问更新信息之前记住它一个小时。

然后假设您进行更改,使 foo.example.org 有一个指向 bar.example.netCNAME 记录,而 bar.example.net 又有一个包含地址 [=12] 的 A 记录=].第一次查找姓名 foo.example.org 的任何人都会得到 CNAME,继续查找 bar.example.net,并从那里得到 A 记录。

唯一的问题是,在您更改为 CNAME 链生效之前的 3600 秒内,任何查找 foo.example.org 的人都会记住直接查找,因此不会看到新信息直到 TTL 到期。因此,在您进行更改后最多一个小时内,某些人可能仍会看到旧信息。因此,为了让更改对用户透明,请确保旧信息(旧 IP 地址)在您进行更改后至少在一个完整的 TTL 周期内仍然有效。

这对于从 A 更改为 CNAME 没有任何特殊之处。无论您更改什么,都会有一个完整的 TTL 时间段,在此期间客户端可以合法地获取旧信息。这就是 DNS 的工作原理。

最重要的是,当然,有些客户端和缓存服务器没有像他们应该的那样关注 TTL 值,但这是完全不同的事情。