3

我们正在开发一个使用 haproxy 负载均衡的 HTTP Web 服务。通过 SSL 访问 Web 服务。它是一个 RESTful HTTP 服务,只接受 JSON,做一些工作,然后返回 JSON。没有会话的概念。

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

这是一个简短的图表,显示了通过我们现有系统的客户端请求的路径。

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

我们希望任何到负载均衡器的连接都建立一个持久连接,然后由同一台服务器为通过该持久连接发送的所有后续请求提供服务。换句话说,我们不希望 haproxy 的持久连接向多个 Web 服务服务器发出请求。

你会如何建议我们让这个工作?我们如何将给定的负载均衡器连接“固定”到特定的 Web 服务服务器?我们如何防止意外加载具有多个密集请求的特定 Web 服务服务器?

4

2 回答 2

2

balance source在块中使用defaults以及删除option httpclose条目就可以了。

于 2011-11-14T20:32:39.390 回答
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

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

我们决定还添加n1和cookie 前缀...这意味着如果请求将发送到节点 1 或如果它们将发送到节点 2 n2,cookie 值将带有前缀。这在调试时非常有用。n1n2


无论哪种方式,我都建议您查看有关选项的配置文档cookie

您可能还想查看该appsession选项。这允许 HAProxy 将现有的 cookie(例如 ASPNetSessionId 或 PHPSESSIONID)用于相同目的。

我之前遇到过问题,但最近有一个服务器故障问题的答案应该可以解决这个问题。您可以试一试,因为它会在您的请求中使用额外的 cookie。无法让 HAProxy 中的 appsession 设置正常工作

于 2011-10-26T06:45:49.490 回答