是否可以为 HAProxy 编写自定义路由逻辑。我需要这样一种方式,即为每个应用程序服务器分配最多 1000 个 TCP 连接,然后负载均衡器才应尝试将下一个 TCP 请求路由到下一个应用程序服务器。
如果不能使用 HAProxy,是否有其他可以做到的负载均衡器,请告诉我。
持久性是否可以应用于 TCP 连接。不会有 HTTP 请求。
谢谢
答案1
是的,这是可能的。您需要balance first
在backend
orlisten
部分中使用该语句。您还需要maxconn
为每个后端服务器分配一个值。
以下是一个示例配置:
listen kumarServer
bind *:80
mode tcp
balance first
default-server maxconn 1000
server kumar1 10.0.1.21
server kumar2 10.0.1.22
server kumar3 10.0.1.23
是的,tcp 连接可以具有持久性。但您只能使用源 ip 地址。
根据您的评论,您需要监视服务器上的某些参数,以决定将客户端负载平衡到哪个服务器,您应该option httpchk
结合http-check expect
或来查看http-check disable-on-404
。您也可以使用option lb-agent-chk
。
让我们看看option httpchk
和http-check disable-on-404
。为了实现这一点,您的应用程序应该公开一个简单的状态网页,如果服务器可用于新连接,则返回 HTTP 状态 200,如果不应打开新连接,则返回 404。stick on src
将允许已有活动连接的用户保持其连接,并在连接丢失时重新连接。
listen kumarServer
bind *:7000
mode tcp
balance first
stick on src
default-server maxconn 1000
option httpchk
http-check disable-on-404
server kumar1 10.0.1.21 check port 80
server kumar2 10.0.1.22 check port 80
server kumar3 10.0.1.23 check port 80
答案2
HAproxy 的内置负载平衡算法均不能满足您的使用情况,也不提供任何创建您自己的自定义算法的方法。
在 HAproxy 中能够执行此操作的唯一方法是修改源以提供此功能。