关于DNS轮询

时间:2009-05-09 22:38:54

标签: dns polling

目前,我们对四个网络服务器使用DNS轮询。

我们遇到的问题是:当用户刷新时,他可能会转到其他Web服务器。当用户已经登录时,这感觉非常糟糕。因为我们使用会话来记住登录状态,但是当刷新到其他Web服务器时,会话将丢失。

因此,最佳解决方案应该是刷新用户时仍然在同一个Web服务器上。有出路吗?

6 个答案:

答案 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)

你有很多选择。

  • 您可以将会话存储在密钥中:值存储,即f.e。 memcached(我个人最喜欢的)
  • 您可以在数据库中存储会话
  • 您可以将DNS和您的服务器中的反向代理负载均衡器放在后面。然后将其设置为使来自相同IP的所有请求都转到相同的服务器,无论它们通过哪个负载均衡器。在HAProxy中,此选项称为balance source。注意:如果节点数量发生变化,会话可能会丢失。您可以使用cookieurl_param功能来避免这种情况。

请参阅HAProxy documentation。真的值得一读。

答案 4 :(得分:0)

四个Web服务器是否都在同一个站点和网络上,或者是否已分发?

如果是前者,您可以在HTTP响应中的某处包含服务器ID,以便真实服务器前面的反向代理可以识别哪个服务器负责会话。

答案 5 :(得分:0)

可以根据客户端的位置进行响应的DNS服务器可以解决此问题。具有geoip模块或GeoIPdns的PowerDNS就是一些例子。您需要确保IP地址集不重叠,以便客户端始终获得相同的响应。

这不会自行提供任何类型的故障转移。