负载平衡 – 多个服务器,不同的位置

我已经非常迅速地扩展了服务,并且在平衡负载的方式中发现了一个问题。 我的服务器不需要一个完美的分布,所以我只是简单地使用循环DNS设置来引导客户端到服务器。

然而,不要在服务器之间反弹客户端,而且我发现在Ubuntu上运行他们的软件的许多客户端不会caching他们收到的DNS结果,所以他们不断地改变他们与之通信的服务器。

有没有办法强制DNSlogging坚持到底,还是必须开始考虑软件或硬件负载平衡器? 我担心的是负载均衡器的延迟。 如果LB在美国,客户是直接到英国,我的理解是,客户将永远不得不连接到美国负载平衡器,然后redirect到英国。

不幸的是,没有办法强制一个DNSlogging坚持一个特定的用户。 负载平衡器可以跟踪用户的会话并始终将其发送到同一台服务器。 但是,您似乎遇到了地理上分散的应用程序实例的问题。

在这种情况下,你最好的select将有以下设置:

  • 为要表示的每个地理区域都有一个子域,其中包含该区域中服务器的IP。 us.yourdomain.comuk.yourdomain.com
  • 有一个Web服务器处理http://www.yourdomain.comlogging,或任何用户通常input,利用地理查找系统(如GeoIP )将用户redirect到适当的子域。

使用这种体系结构,美国用户的初始HTTP请求将如下所示:

  1. 用户请求http://www.yourdomain.com
  2. 服务器处理http://www.yourdomain.com查找用户的地理区域。
  3. 服务器确定用户在美国。
  4. 服务器将用户redirect到us.yourdomain.com
  5. 用户的浏览器接受redirect,随后的所有请求都会转到us.yourdomain.com

这个设置将需要总共至less3个服务器。 一个处理美国的请求,一个处理英国的请求,一个处理redirect用户到美国/英国的网站。

粘滞的会议吸!

虽然用户在各种机器周围发送可能不方便,但使用RRDns的主要原因之一是可用性。 如果你需要保持你的用户在同一台​​服务器上,那么你就失去了好处。

当然,推动用户优先到附近的服务器提供良好的性能优势 – 大多数大型DNS提供商现在提供地理感知DNS查询(没有一个完整的内容交付networking的费用)。 如果你感觉很勇敢并且自己做了自己的名字,那么你可以configurationbind来为你做。 请注意,对于正常的RRDNS,主机是通过名称服务器以随机顺序提供的 – 很可能有一个故障转移configuration,其中“本地”服务器总是以相同的顺序呈现给相同的客户端以及故障转移列表总是出现在最后。

很多什么是合适的取决于你在工作的规模。 如果您确信每个数据中心内的可用性都很好,那么在每个数据中心使用本地负载均衡器可能是最佳select(检查HA-Proxy和Varnish)。

循环赛DNS资源logging集洗牌并没有做你认为它做的事,并没有做你想做的事情。 使用SRV资源logging或适当的负载平衡器。