基于会话cookie的负载均衡?

Chr*_*her 5 networking web-applications load-balancing

我有一个要在多台服务器上运行的网络应用程序。我想确保使用相同会话(值为 JSESSIONID=x 的 HTTP cookie 标头)的请求始终与同一服务器通信。也就是说,直到会话在某些情况下“移动”到不同的服务器(不仅在服务器出现故障时,而且由于某些服务器端缓存和性能策略)。

我的 Web 应用程序在这种情况下运行良好,但我应该使用哪种负载均衡器?显然,我可以在应用程序级别进行负载平衡,但我正在寻找更有效的方法。也许是专门的硬件(也许不是)?我不能花很多钱...

更新

感谢您到目前为止的回答:我现在发现,可以配置PoundHAProxy来查找某些 cookie。我还没有找到,他们是否还允许动态更新映射(当会话“移动”到不同的应用程序服务器时)?

是否有(便宜的)硬件解决方案,也可以做到这一点?(这会比额外的负载平衡服务器的成本更低吗?)

War*_*ner 5

通常不建议使用“粘性(持久)会话”。如果这样做,您将失去负载平衡的许多好处。负载将无法平衡,您将失去高可用性,因为某些客户端在出现故障时将无法访问您的应用程序。

您希望您的会话是动态的。对于 Java,它通常存储在内存中并通过多播集群到所有服务器。更常见的是,会话将存储在数据库中。

如果您的 Web 应用程序需要粘性会话,则您的架构可能需要改进。

就负载均衡器解决方案而言,有很多解决方案,这里已经广泛地涵盖了该主题。我喜欢LVS。其他人喜欢nginx。 被博科收购的Foundry Networks制造了一些可靠的商业产品。它们是硬件负载平衡器的主要商业解决方案。 Barracuda还有一个基于 Linux/OSS 的“设备”,可用于负载平衡。


Chr*_*her 2

我刚刚阅读了 HAProxy 作者 Willy Tarreau 撰写的文章“通过负载均衡使应用程序可扩展”,它包含了我需要的所有答案。

以下是我个人对所学知识的总结:

  • “Cookie 学习”和“Cookie 插入”似乎是负载均衡器的常用功能。
  • 您需要 7 级负载均衡器来检查 cookie,但某些硬件负载均衡器会在数据包级别上“近似”这一点(有时甚至会导致数据损坏!)
  • 其他 7 级负载均衡器使用完整的 TCP/IP 堆栈,并且可以正常工作,但它们需要更多的处理能力。在这种情况下,具有强大 CPU 的服务器可能比硬件负载均衡器更快(?)

这篇文章是 2006 年的,之后有些内容可能发生了变化。