2011-10-25 79 views
3

我们正在使用haproxy进行负载平衡的HTTP Web服务。 Web服务通过SSL访问。它是一个RESTful HTTP服务,只是接受JSON,做了一些工作,并返回JSON。没有一个会话的概念。如何将持久连接支持添加到负载平衡HTTP Web服务

我们在一对冗余Web服务器服务器前设置了冗余负载均衡器。每个服务器都位于Apache后面,Apache用作代理来处理SSL和日志记录。如果它很重要,我们的webservice是一个使用compojure(jetty)来处理HTTP的Clojure(java)应用程序。

这是通过我们现有系统显示客户端请求路径的简图。

client request -> haproxy (load balancing) -> apache (ssl, logging) -> webservice

我们希望负载平衡器任何连接建立持久连接,然后通过该永久连接发送的所有后续请求相同的服务器提供服务。换句话说,我们不希望持久连接haproxy向多个webservice服务器发送请求。

您会如何建议我们这样做?我们如何将一个给定的负载均衡器连接“绑定”到特定的web服务器?我们如何防止意外加载具有多个密集请求的特定Web服务服务器?

回答

2

defaults块中使用balance source,以及删除option httpclose条目的技巧。

1

在我们的HAProxy配置中,我们使用cookie选项在后端级别执行此操作。这是因为他有许多网站,其中一些网站我们确实希望坚持 - 其他网站我们没有。

在那些我们做后端看起来像这样在haproxy.cfg

backend examplesite 
cookie STK insert indirect nocache maxidle 30m maxlife 8h 
server server1 192.168.0.1:80 cookie n1 
server server2 192.168.0.2:80 cookie n2 

这将设置一个cookie与第一个请求的名称STK。 Haproxy会自动为这个cookie分配一个值,然后它将使用它发送后续请求到同一个节点。

我们决定也添加n1n2饼干前缀......这意味着cookie值将与任何n1为前缀,如果请求将节点1或n2如果他们要到节点2.这是调试时非常有帮助。


无论哪种方式,我建议采取看看configuration documentation左右cookie选项。

您可能还想看看appsession选项。这允许HAProxy使用现有的cookie(例如ASPNetSessionId或PHPSESSIONID)来达到同样的目的。

我以前遇到问题,但最近有一个服务器故障问题的答案应该解决这个问题。您可以放弃它,因为它会在您的请求中使用额外的Cookie进行保存。 Can't get appsession setting in HAProxy to work

+0

谢谢。我们正在运行一个接受并返回JSON的HTTP webservice。连接到webservice的客户端不是浏览器,所以我怀疑cookie在这种情况下可能会有用。 – jkndrkn

相关问题