Go 由于持续连接,HAProxy无法进行负载平衡

Go 由于持续连接,HAProxy无法进行负载平衡,go,haproxy,martini,Go,Haproxy,Martini,我们有一个web服务器和一个客户端,它们都是用go编写的,可以相互交互。我们希望HAProxy在服务器的多个实例之间负载平衡请求,但它不起作用。客户端将始终连接到同一台服务器,而它仍处于运行状态 如果我查看netstat-anp的输出,我可以看到客户端和服务器之间通过HAProxy建立了一个持久连接。我尝试将响应中的连接头设置为close,但根本不起作用 不用说,我完全被这搞糊涂了。我的第一个问题是,这是客户端、服务器还是HAProxy的问题?如何强制客户端断开连接?我是不是遗漏了什么?Curl

我们有一个web服务器和一个客户端,它们都是用go编写的,可以相互交互。我们希望HAProxy在服务器的多个实例之间负载平衡请求,但它不起作用。客户端将始终连接到同一台服务器,而它仍处于运行状态

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

不用说,我完全被这搞糊涂了。我的第一个问题是,这是客户端、服务器还是HAProxy的问题?如何强制客户端断开连接?我是不是遗漏了什么?Curl工作得很好,所以我知道HAProxy可以实现负载平衡,但是Curl在完成时也会完全关闭,因此我怀疑是持久连接导致了我的问题,因为客户端和服务器都在长时间运行

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


谢谢。

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

您有两个选择:

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

或者,您可以让HAPoxy通过设置http server close来更改请求,以便在每次请求后关闭后端,或者让http close在每次请求后关闭双方


http服务器关闭通常是最好的选择,因为它仍然保持客户端的持久连接,同时单独代理每个请求。

谢谢!我想我的思路是对的,但是我没有重新启动我的服务,我想我必须这么做,因为刷新HAProxy配置不起作用。http服务器close工作正常。@区块密码:重新加载haproxy会使原始进程一直运行,直到其所有活动连接关闭为止。您需要完全停止haproxy,或客户端和/或服务器,以确保连接关闭。是否有类似于TCP的http服务器关闭功能?