Haproxy“URI全”负载均衡algorithm

我正在对HAProxy上的“uri whole”负载平衡algorithm进行一些testing。 我的操作系统是Ubuntu 16.04.2 LTS,我的版本是HA-Proxy版本1.7.7-1ppa1〜xenial 2017/06/27。

编辑:我正在使用服务器发送事件(SSE)长时间运行的请求。

这是我的后端configuration:

backend Proxy mode http balance uri whole hash-type consistent http-reuse safe http-request set-header X-Forwarded-Port %[dst_port] http-request add-header X-Forwarded-Proto https if { ssl_fc } option http-server-close option httpchk http-check expect ! rstatus ^503 timeout tunnel 24h server xxxx 192.168.0.10:8080 check maxconn 2 maxqueue 1 server yyyy 192.168.0.11:8080 check maxconn 2 maxqueue 1 

这是我观察到的:

1 – 请求A被发送到这些服务器之一,这取决于问号和其他一些选项之后的散列。 假设在服务器xxxx上。

2 – 下一个请求目标完全相同的URI将在服务器xxxx与maxconn在2。

3 – 第三将保持队列。

4 – 第四个不会达到任何东西,我得到了“503服务不可用 – 没有服务器可用于处理此请求。 来自HAProxy。 将请求发送到其他服务器的唯一方法是将服务器xxxx标记为“closures”或“维护”。 没有“散列types一致”或“备份”选项的情况也是如此。

5 – 所有运行状况检查都发送到同一台服务器。

我关于第4点和第5点的问题:

  • 我认为“整个”是一个负载均衡algorithm。 如果第四个请求不平衡的服务器上yyyy如果服务器xxxx不能处理它(我明白,哈希不会改变)?

  • 为了绕过这个行为,我尝试configuration健康状况检查来告诉HAProxy标记“Down”服务器回答503代码。 它不工作…我在我的后端定义丢失的东西?

  • 即使健康检查坚持一台服务器。 这没有用…在这里有什么我不明白的吗?

我的目标是在第二台服务器上平衡第四层请求(理想的是第三层)

感谢您的帮助!

这听起来像请求1和2仍然有一个连接打开到后端(长期运行的请求?)。 请求3已排队(仅允许2个连接),请求4因为将队列限制为一个请求而被丢弃。

后端没有closures – 仍然有两个连接打开。

在503上标记后端不会触发,因为503来自haproxy,而不是后端。

对不起,如果这不能真正解决你的问题,但也许它可以帮助你更好地理解它:)