我刚刚开始使用 HAProxy,我正在构建一个实时聊天应用程序。我想知道当当前后端达到其 maxconn 时是否可以将客户端发送到另一个后端(我正在使用“平衡源”)。因为有时,当后端达到其限制时,到该后端的所有连接都会排队,并且浏览器会继续加载,而其他后端则处于空闲状态。
答案1
我不知道,但是请在后端配置中尝试这个(使用你的 maxconn 调整 10):
acl too_many be_sess_rate gt 10
use_backend b_too_many if too_many be_sess_rate
答案2
试试这个,如果前端的当前连接数大于 20,它将使用另一个后端,更改数字(第 4 行)以满足您的需要,另外我写了模式 tcp,如果您需要 http 负载平衡,您可以将其更改为 http
frontend frontend_chat 127.0.0.1:8080
mode tcp
balance roundrobin
acl max_conn_reached fe_conn gt 20
default_backend be_chat1
use_backend be_chat1_and_chat2 if max_conn_reached
backend be_chat1
mode tcp
balance roundrobin
server chat1 127.0.0.1:9001 check maxconn 10
backend be_chat1_and_chat2
mode tcp
balance roundrobin
server chat1 127.0.0.1:9001 check maxconn 10
server chat2 127.0.0.1:9002 check maxconn 10