基于会话cookie的负载均衡?

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

我的networking应用程序适用于这种情况,但我应该使用什么样的负载平衡器 ? 显然,我可以在应用程序级别进行负载平衡,但是我正在寻找更高效的方法。 也许专门的硬件(也许不是)? 我不能花很多钱

更新

感谢您迄今为止的答案:我现在发现, Pound和HAProxy可以configuration为查找某些cookie。 我还找不到,如果他们也允许dynamic更新映射(当会话“移动”到不同的应用程序服务器)?

那里有(便宜的)硬件解决scheme,也可以做到这一点? (这会花费less于一个额外的负载平衡服务器?)

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

你希望你的会议是dynamic的。 使用Java,它通常存储在内存中,并通过组播方式集群到所有服务器。 更常见的是,会话将被存储在数据库中。

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

就负载平衡器解决scheme而言,这里有很多,在这里已经广泛地讨论了这个问题。 我喜欢LVS 。 其他人喜欢nginx 。 被博科公司收购的网捷networking公司生产一些坚实的商业产品。 它们是硬件负载平衡器的主要商业解决scheme。 梭子鱼还有一个基于Linux / OSS的“设备”,可用于负载平衡。

几个解决scheme然后。

编写一个使用数据库存储会话信息的会话存储方法,如果它在多个服务器上可以将数据库集群。 这实际上取决于你如何决定组织的东西,其他的想法是在web服务器后面使用带有memcache的服务器,并将会话存储在那里。

这样你就可以在一个地方进行会话,而不再需要客户端指向哪个Web服务器。

POUND – 反向代理和负载平衡

Pound程序是Web服务器的反向代理,负载均衡器和HTTPS前端。 Pound开发的目的是为了在多个Web服务器之间分配负载,并为那些本来不提供它的Web服务器提供一个方便的SSL封装。 英镑是根据GPL分发 – 没有保修,它是免费使用,复制和放弃。

这可能是你要找的

http://www.apsis.ch/pound/

在花钱之前….看一下像Pound或HAProxy这样的软件开源负载均衡器。

我同意华纳和斯图的build议。

我刚刚阅读HAProxy作者Willy Tarreau撰写的“ 使应用程序可负载平衡可伸缩”一文,其中包含我需要的所有答案。

以下是我学到的个人总结:

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

这篇文章是从2006年开始的,有些东西可能从那以后就变了。