为了账号安全,请及时绑定邮箱和手机立即绑定

由于持久连接,HAProxy 未进行负载平衡

由于持久连接,HAProxy 未进行负载平衡

Go
慕码人8056858 2021-09-21 16:16:33
我们有一个 web 服务器和一个客户端,都是用 go 编写的,它们相互交互。我们希望 HAProxy 在服务器的多个实例之间对请求进行负载平衡,但它不起作用。客户端将始终连接到同一台服务器,而它仍在运行。如果我查看“netstat -anp”的输出,我可以看到客户端和服务器之间通过 HAProxy 建立了持久连接。我尝试将响应中的连接头设置为“关闭”,但这根本不起作用。不用说,我对此完全感到困惑。我的第一个问题是,这是客户端、服务器还是 HAProxy 的问题?如何强制客户端断开连接?我错过了什么吗?Curl 工作正常,所以我知道 HAProxy 会进行负载平衡,但是 curl 在完成后也会完全关闭,因此我怀疑是持久连接导致了我的问题,因为客户端和服务器长时间运行。仅供参考,我在服务器上使用 go-martini。
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

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

您有几个选择:

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

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

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


查看完整回答
反对 回复 2021-09-21
  • 1 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信