我在 AWS Cloudformation 中设置了一个堆栈,该堆栈已启动并正在运行。堆栈包含一个 ELB(负载均衡器)和一些 EC2 实例。当我们对应用程序进行新的部署时,我们会构建一个新环境并删除旧环境。因此,我们必须更新 Route 53 中的 DNS 记录。我想知道旧堆栈应该保持多长时间。
我已经关注AWS 文档:无需迁移父域即可使用子域。父域 NS 记录(面向 AWS DNS)的 TTL 为3600
。在 Route 53 内部,我已设置了一个 A 记录,其别名为堆栈中的负载均衡器(我无法在此处设置 TTL)。
我无法从 AWS 控制台输入别名记录的 TTL。不过,一些消息来源称,更改可能需要60 秒。
我刚刚在本地做了一些测试,检查 DNS 需要多长时间才能获取新的堆栈。这是在 Route 53 中更新别名 DNS 记录和能够在浏览器中访问新堆栈之间的时间:
- 尝试 #1:约 4 分钟
- 尝试 #2:约 9 分钟
- 尝试#3:约7分钟
- 尝试#4:~15分钟
这难道不应该少于 60 秒吗?对于所有客户端来说,这可能需要的最长时间是多少?是否可以缩短这个时间?删除旧堆栈的安全时间是多少?
答案1
首先,重要的是要认识到客户端或其 DNS 解析器上缓存的 DNS 记录均不受您的控制(请注意,我指的是 DNS 记录,而不是您的权威名称服务器)。因此,客户端及其 DNS 解析器必须遵守您的 TTL。
如果有新访问者之前从未访问过您的网站,并且其 DNS 解析器未缓存您的记录(或者访问时间太久以至于缓存已过期),他们将立即看到新记录。
这不应该在 60 秒以内吗?
应该可以,但前提是您的客户端遵守 TTL。有些客户端有最小 TTL,有些网络也有 DNS 解析器,可能会缓存结果。
是否有可能减少这个时间?
您必须记住,您的大多数访问者(假设这是一个公共网站)不会像您一样每隔几秒钟就坐在那里加载您的网站。您的大多数访问者可能最近没有访问过该网站,并且他们的 DNS 解析器可能没有缓存记录。大多数 DNS 解析器应该尊重您的 TTL,但您无法保证这一点。
删除旧堆栈的安全时间是什么时候?
最好通过旧堆栈仍在提供的流量而不是 DNS TTL 来判断这一点。如果您使用 ELB,您应该能够在 cloudwatch 中查看旧 ELB 每秒提供的请求数。等到它降到可接受的水平以下,然后将其删除。
为了在切换后立即查看新堆栈,我建议手动刷新本地 DNS 缓存。为了查看需要多长时间而让自己的客户端自然过期记录可能无法表明其他客户端需要多长时间。
编辑,我注意到 Google 的公共 DNS 有一个可让您清除缓存的工具:
https://developers.google.com/speed/public-dns/cache
这可能会加快速度,因为相当一部分客户可能会使用它。