AWS Route53 故障转移和 chrome DNS 缓存
AWS Route53 failover and chrome DNS cache
我使用 Route53 进行了非常标准的故障转移:
- 两个地区
- 主要,与健康检查相关联,以及每个区域的次要故障转移记录。
- 条记录指向 API。此外,我们还有使用 API.
的前端 JS 应用程序
如果主服务器运行状况不佳,那么 DNS returns 一个辅助记录,如果用户在出现故障时未使用该应用程序,则该记录运行良好。
所以:
如果主节点不健康并且用户在故障转移 激活后尝试使用该应用程序 - 一切正常(指向辅助记录)
如果 用户正在使用 应用程序时主节点变得不健康,应用程序会尝试访问不可用的旧 IP 地址,因此它不会切换到辅助记录。
似乎 DNS 已缓存(可在此处检查 chrome://net-internals/#dns for Chrome)。用户可以在一段时间不活动后继续使用该应用程序:当 API 未被触发且 Chrome 的 DNS 缓存已过期时。
当用户使用应用程序时主节点变得不健康时,对于这种特殊情况是否有任何解决方法?或者在这种情况下我们如何才能让用户体验更愉快?
添加示例:
- 用户 1 正在使用应用(应用是 Ember.js 应用)
- 主节点已关闭且故障转移已激活
- 之后User 2访问应用程序(故障转移激活)并且route53提供了Secondary record,所以一切正常。
- 与此同时,用户 1 仍在尝试访问应用程序,应用程序向 API 发出请求。但是某个应用正在从 chrome DNS 缓存访问旧 IP。
已添加:
我们正在使用别名记录(Route53 上 A 记录的 TTL 始终为 60 秒)
一切都归结为 TTL。如果您将资源上的 TTL 设置为 30 秒,浏览器应该每 30 秒解析一次地址,这样对于大多数情况来说这应该是可以接受的。当然,这是以一些延迟和更多成本为代价的(尽管 R53 确实很便宜)。如果您需要更短的 TTL you can set it up.
如果你想更好地控制它,你必须设置你自己的负载均衡器,当你的机器出现故障时,它会路由到不同的区域,但当 EC2 出现故障时,它不会拯救你(可能会给你足够的钱)不过是时候启动一个新实例了)。
我使用 Route53 进行了非常标准的故障转移:
- 两个地区
- 主要,与健康检查相关联,以及每个区域的次要故障转移记录。
- 条记录指向 API。此外,我们还有使用 API. 的前端 JS 应用程序
如果主服务器运行状况不佳,那么 DNS returns 一个辅助记录,如果用户在出现故障时未使用该应用程序,则该记录运行良好。
所以:
如果主节点不健康并且用户在故障转移 激活后尝试使用该应用程序 - 一切正常(指向辅助记录)
如果 用户正在使用 应用程序时主节点变得不健康,应用程序会尝试访问不可用的旧 IP 地址,因此它不会切换到辅助记录。
似乎 DNS 已缓存(可在此处检查 chrome://net-internals/#dns for Chrome)。用户可以在一段时间不活动后继续使用该应用程序:当 API 未被触发且 Chrome 的 DNS 缓存已过期时。
当用户使用应用程序时主节点变得不健康时,对于这种特殊情况是否有任何解决方法?或者在这种情况下我们如何才能让用户体验更愉快?
添加示例:
- 用户 1 正在使用应用(应用是 Ember.js 应用)
- 主节点已关闭且故障转移已激活
- 之后User 2访问应用程序(故障转移激活)并且route53提供了Secondary record,所以一切正常。
- 与此同时,用户 1 仍在尝试访问应用程序,应用程序向 API 发出请求。但是某个应用正在从 chrome DNS 缓存访问旧 IP。
已添加:
我们正在使用别名记录(Route53 上 A 记录的 TTL 始终为 60 秒)
一切都归结为 TTL。如果您将资源上的 TTL 设置为 30 秒,浏览器应该每 30 秒解析一次地址,这样对于大多数情况来说这应该是可以接受的。当然,这是以一些延迟和更多成本为代价的(尽管 R53 确实很便宜)。如果您需要更短的 TTL you can set it up.
如果你想更好地控制它,你必须设置你自己的负载均衡器,当你的机器出现故障时,它会路由到不同的区域,但当 EC2 出现故障时,它不会拯救你(可能会给你足够的钱)不过是时候启动一个新实例了)。