我在 AWS 中设置了多个 VPC,并且所有实例都使用预配置的 IP 地址,即 -不是使用Elastic IP Addresses
。
当任何给定实例启动时,它都会在机器上执行一个脚本(发布网络),该脚本获取实例 ID、区域 ID(来自本地配置)和区域等 - 一旦获得这些信息,它就会更新Route 53
这些实例的私有托管区域中的 DNS 信息。
这样做的原因基本上是为了我可以使用 DNS 作为服务器连接字符串。我的 Web 服务器和数据库服务器位于私有子网中,当 Web 服务器连接到数据库时 - 它只使用映射staticdns.mydomain.private
到实例私有 IP 地址的 IP 地址。这样,当实例重新启动或 IP 由于其他原因发生变化时,就不需要进行大量重新配置。
这一切都很好,而且它有效 - 但有一个警告。解析新的 DNS 映射时会有延迟,我不确定它有多长 - 它不是很长,但它似乎有点随机(可能是 TTL?)。在这段时间内,解析器具有老的IP 缓存,我们将遇到从 Web 服务器到数据库的连接失败。我更希望这个缓存在更新时被释放,但我不知道在哪里可以找到它。
有人知道是否有办法刷新 Route 53 中私有区域内的 DNS 解析器缓存吗?我nscd
也尝试在服务器上使用,但似乎没有帮助。
答案1
一些选项和注释...
如果服务器位于同一 VPC 或对等 VPC 中,则使用其私有 IP 进行通信,而不是使用公共 IP。实例停止/重新启动时,私有 IP 保持不变。
旧记录缓存在主机上,而不是 Route 53 中。
nscd
一旦一个 IP 发生变化,您就必须刷新所有其他主机的缓存,这需要大量自动化工作。此外,一些应用程序和框架还会将记录缓存在 nscd 之外,因此在需要时很难刷新所有内容。您可以将 DNS 记录的 TTL 降低到 60(= 1 分钟),这意味着解析的记录将不会缓存超过一分钟。这与 AWS RDS 用于故障转移机制的方法相同。
使用网络负载均衡器 (NLB)- 即使服务器的实际 IP 发生变化,它也会为您的服务器提供稳定的 IP。然而,这有点过头了。
使用弹性 IP。这也能解决您的问题。当它们附加到正在运行的实例时,它们不花费任何费用。
可能使用 AWS RDS无服务器 Aurora不使用时几乎不产生任何费用。所有管理、故障转移等工作都将由我们为您完成。