由于持久连接,HAProxy 没有负载均衡

blo*_*her 2 haproxy go martini

我们有一个 Web 服务器和一个客户端,两者都是用 Go 编写的,可以相互交互。我们希望 HAProxy 在服务器的多个实例之间负载平衡请求,但它不起作用。当服务器仍在运行时,客户端将始终连接到同一服务器。

如果我查看“netstat -anp”的输出,我可以看到客户端和服务器之间通过 HAProxy 建立了持久连接。我尝试将响应中的连接标头设置为“关闭”,但这根本不起作用。

不用说,我对此完全感到困惑。我的第一个问题是,这是客户端、服务器还是 HAProxy 的问题吗?如何强制客户端断开连接?我是否遗漏了一些与此相关的内容?Curl 工作正常,所以我知道 HAProxy 可以进行负载平衡,但curl 在完成后也会完全关闭,因此我怀疑是持久连接导致了我的问题,因为客户端和服务器长时间运行。

仅供参考,我在服务器上使用 go-martini。

谢谢。

Jim*_*imB 5

HTTP/1.1 默认使用 KeepAlive。由于连接未关闭,HAProxy 无法平衡不同后端之间的请求。

您有几个选择:

在代码中的每个请求后强制关闭连接。Request.Close = true客户端或服务器上的设置都会发送一个Connection: close标头,告诉双方关闭 tcp 连接。

或者,您可以让 HAPoxy 通过设置更改请求,http-server-close以便在每个请求后关闭后端,或者http-close在每个请求后关闭两侧。

http-server-close通常是最好的选择,因为它仍然为客户端维护持久连接,同时单独代理每个请求。