目前,我们对四个网络服务器使用DNS轮询。
我们遇到的问题是:当用户刷新时,他可能会转到其他Web服务器。当用户已经登录时,这感觉非常糟糕。因为我们使用会话来记住登录状态,但是当刷新到其他Web服务器时,会话将丢失。
因此,最佳解决方案应该是刷新用户时仍然在同一个Web服务器上。有出路吗?
答案 0 :(得分:2)
好的,我相信你的意思是“Round Robin DNS”。那么,你所描述的是一个very common problem并且没有“正确”的解决方案,因为可能的答案取决于许多变量:你试图提供自动故障转移还是只是负载平衡?您是否愿意在负载均衡器中花费时间和/或金钱?你使用什么技术? Java EE? PHP? Apache的? IIS?
话虽如此,如果您刚刚进行负载平衡并且故障转移不是很大的问题,您可能希望为每个服务器使用不同的名称(www1,www2,www3等),并从您的“重定向到它们”主要“首次访问时的Web服务器(www)。它很简单(而且简单化)但在一些设置中很实用。
答案 1 :(得分:1)
Web服务器是否可以使用公共数据库服务器来存储会话信息?
答案 2 :(得分:1)
我知道某些基于硬件的负载均衡器会在用户和服务器之间创建“粘性”关系,以避免此类问题。
答案 3 :(得分:1)
你有很多选择。
balance source
。注意:如果节点数量发生变化,会话可能会丢失。您可以使用cookie
或url_param
功能来避免这种情况。请参阅HAProxy documentation。真的值得一读。
答案 4 :(得分:0)
四个Web服务器是否都在同一个站点和网络上,或者是否已分发?
如果是前者,您可以在HTTP响应中的某处包含服务器ID,以便真实服务器前面的反向代理可以识别哪个服务器负责会话。
答案 5 :(得分:0)
可以根据客户端的位置进行响应的DNS服务器可以解决此问题。具有geoip模块或GeoIPdns的PowerDNS就是一些例子。您需要确保IP地址集不重叠,以便客户端始终获得相同的响应。
这不会自行提供任何类型的故障转移。