我们有以下 IP 地址(例如):
1.1.1.1
2.2.2.2
每个服务器都托管同一个网站,但位于不同的服务器上。我们希望通过让 Web 用户在每次请求时访问不同的 IP 地址来实现一些非常简单的负载平衡。我们的应用程序完全支持这一点,因此不存在身份验证等技术问题。
我认为我已经让它工作了,但我不确定。如果我使用 nslookup 查询区域,那么 IP 会以循环方式交替,这很酷。
Addresses: 1.1.1.1
2.2.2.2
...
Addresses: 2.2.2.2
1.1.1.1
我观察到,如果 http 服务器在第一个 IP 上不可用,则 Web 浏览器将只使用第二个 IP,这也非常酷。
但是,这似乎很难测试,因为一旦浏览器有了 IP(例如 Chrome),它就会坚持使用它。也许这是件好事?那么,仅根据我的解释,这听起来像是一个具有冗余的负载平衡器吗?
答案1
DNS“负载平衡”并非意味着将负载平衡到单个客户端,而是在不同的客户端之间(客户端 A 获取第一个 IP,客户端 B 获取第二个 IP,客户端 C 获取第一个 IP,依此类推)。
在同一个浏览器会话中将同一个名称解析到两台不同的机器可能会导致不良行为,尤其是在您使用会话 cookie 或类似功能时。
答案2
这被称为 DNS 循环,也被称为“穷人的负载平衡”。它实施起来很简单,但有很大的缺点,因为它不提供健康检查,不考虑服务器负载,并且在主要安装中不考虑地理位置。
例如,如果您的浏览器/操作系统卡在某个 IP 上,并且该 IP 后面的服务器崩溃,您的请求仍将被发送到该服务器。
从维基百科页面来看,主要缺点如下:
尽管易于实施,但循环 DNS 存在一些问题,例如 DNS 层次结构本身中的记录缓存以及客户端地址缓存和重用,两者结合可能难以管理。不应仅依赖循环 DNS 来实现服务可用性。如果列表中某个地址的服务发生故障,DNS 将继续分发该地址,而客户端仍将尝试访问无法运行的服务。此外,它本身可能不是负载平衡的最佳选择,因为它只是在每次查询名称服务器时交替地址记录的顺序。没有考虑匹配用户 IP 地址及其地理位置、交易时间、服务器负载、网络拥塞等。循环 DNS 负载平衡最适合具有大量均匀分布的连接到具有同等容量的服务器的服务。否则它只会进行负载分配。
有关 DNS 循环的更多信息这里。
如果你正在考虑将其用于 Web 应用程序,我建议你看一下HAProxy,可以实现廉价但真正的冗余。
希望这可以帮助!