我使用HA代理作为负载均衡器。 我已经以循环方式为负载平衡指定了两个节点。如果我手动发布请求,事情工作正常我可以看到req以循环方式被路由到每个节点。当我使用curl来激发5000个req然后我看到大约100个req将转到一个节点然后100个转到另一个节点。所以它不是基于req交替。我不认为这是正确的行为准则。是否有一些我需要更改的配置? 还是卷曲行为?
curl -k <url>?name=[1-5000]
答案 0 :(得分:1)
您指导curl使用递增计数器发出顺序请求,URL中的括号中的这些数字,curl将通过http keep-alive重用与HAProxy的连接。< / p>
默认情况下,HAProxy也将重用连接到后端,因为这是最有效的行为,避免了建立新TCP连接的开销。当所有请求来自重用连接上的单个客户端并且并发为1时,没有理由人工强制循环分发。
您可以使用多个选项之一强制更改此行为,但它应该是不必要的,因为这主要是测试方法的工件。
默认情况下,HAProxy在持久性的保持活动模式下运行 连接:对于每个连接,它处理每个请求和响应,以及 在响应的结束和两端之间使连接空闲 新请求的开始。这种模式可以通过几种选择来改变 as&#34;选项http-server-close&#34;,&#34;选项forceclose&#34;,&#34;选项httpclose&#34;要么 &#34;选项http-tunnel&#34;。设置&#34;选项http-server-close&#34;启用HTTP 服务器端的连接关闭模式,同时保持支持能力 客户端的HTTP保持活动和流水线操作。这提供了最低的 客户端(慢速网络)的延迟和最快的会话重用 服务器端保存服务器资源,类似于&#34;选项forceclose&#34;。 它还允许非keepalive服务器以保持活动模式提供服务 如果客户符合RFC7230的要求。请注意 有些服务器在看到时并不总是符合这些要求 &#34;连接:关闭&#34;在请求中。效果将是保持活力的意志 永远不会被使用。解决方法包括启用&#34;选项 HTTP的假装-存活&#34;
http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4-option%20http-server-close
那为什么每100个交替一次呢?保持活动连接通常无限期使用,因此客户端或服务器将最终关闭连接并建立新连接。