为了寻找比亚马逊 CloudFront 更便宜的解决方案,我将两个具有不同 IP 的“A”记录放置到由 GoDaddy 管理的 NameSever 中同一子域上的不同服务器上,以便实现某种负载平衡和对我网站中的静态文件的故障转移机制。
一探究竟:nslookup static.hsbnoticias.com
一些观察
- 我看过一些关于 DNS 循环负载平衡的文章,但我不明白这是否可以通过任何 DNS 服务来实现,或者是否需要一些特殊的软件或服务。
- 我还没有找到任何提供此类服务的服务提供商
- 在 Facebook CDN 上测试 nslookup 每次都会以不同的顺序返回多个 IP,我猜这是进行 DNS 负载平衡的正确方法
- 我的名称服务器每次都按相同顺序返回 IP
问题
- 负载会在两台服务器之间分配吗?
- 浏览器在解析页面资源上的多个 IP 域名时是否会遵循标准行为?(超时、回退等...)
- 名称服务器返回的记录的随机(或固定)顺序如何影响负载平衡?
- 当浏览器使用的 IP 变慢时,还是只有当触发超时时,浏览器才会尝试不同的 IP?
- IP 故障转移对用户来说是否透明,或者用户是否需要重新加载页面?
答案1
大部分情况下是的。这种拙劣的做法将 A 记录的返回顺序留给客户端使用的 DNS 服务器自行决定,因此如果关闭或不支持循环(就像您的本地名称服务器一样),使用它的客户端将获得固定的返回顺序,只要它被缓存。但它至少提供了冗余(如果一个 IP 已关闭但先尝试,浏览器通常会在连接超时后使用另一个 IP)。
不是始终如一的。它们都会回退到第二个(或更多)IP 地址,但这取决于浏览器“供应商”和版本以及是否返回任何 ICMP 不可达消息,以确定回退需要多长时间。当服务器没有响应时,TCP 超时(未收到任何 ICMP 不可达消息)通常以分钟为单位。例如,Chrome 的连接超时时间很长,通常在故障转移前超过 3 分钟。IE 速度更快。但它只会在用户看来处于关闭状态或非常慢。买者自慎……DNS 解析路径上有很多移动部件,您几乎无法控制多个返回的 IP 地址最终在给定浏览器中使用的顺序。这就是为什么整个行业都有支持快速故障转移负载平衡的产品,但它们通常以最低限度的方式使用 DNS 来实现它(例如,在 DNS 中查找 www.google.com……您会发现您只返回一个 IP 地址。)
在任意两个时间段内,服务器之间的负载“平衡”可能会有很大差异。
仅在连接超时或明确无法访问时。
它将是透明的,但如果他们连接的实例 IP 挂起,则站点可能会显得非常慢。如果您故意将其关闭(例如,为了维护),如果它脱离网络并且 ARP 请求没有得到答复(路由器将报告 ICMP 主机无法访问),则回退将更快。