Haproxy“URI整体”负载均衡算法

Haproxy“URI整体”负载均衡算法

我正在 HAProxy 上运行一些关于“uri whole”负载平衡算法的测试。我的操作系统是 Ubuntu 16.04.2 LTS,我的版本是 HA-Proxy 版本 1.7.7-1ppa1~xenial 2017/06/27。

编辑:我正在使用 Server-Sent-Events (SSE) 来处理长时间运行的请求。

这是我的后端配置:

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 - 第四个无法到达任何地方,我从 HAProxy 收到“503 服务不可用 - 没有可用的服务器来处理此请求。”。向其他服务器发送请求的唯一方法是将服务器 xxxx 标记为“关闭”或“维护”。没有“哈希类型一致”或“备份”选项也一样。

5-所有健康检查都发送到同一台服务器。

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

  • 我认为“uri whole”是一种负载平衡算法。如果服务器 xxxx 无法处理第 4 个请求(我理解哈希不会改变),那么第 4 个请求是否不应该在服务器 yyyy 上进行平衡?

  • 为了绕过此行为,我尝试配置健康检查以告诉 HAProxy 将响应 503 代码的服务器标记为“关闭”。但它不起作用...我的后端定义中是否缺少某些内容?

  • 甚至健康检查也只针对一台服务器。这没什么用... 有什么我不明白的吗?

我的目标是平衡第二台服务器上的第 4 个请求(理想情况下是第 3 个请求):)

感谢您的帮助!

答案1

听起来请求 1 和 2 仍然与后端保持连接(长时间运行的请求?)。请求 3 已排队(仅允许 2 个连接),请求 4 已被丢弃,因为您将队列限制为一个请求。

后端并未关闭——仍有两个连接处于打开状态。

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

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

相关内容