我需要设置一个 HAProxy 以按以下方式工作。假设我只有 10 个用户和 10 台后端服务器。我的目标是根据自定义 http 标头将每个用户粘贴到自己的服务器上user_id
。这意味着,带有标头的用户请求user_id=1
将仅发送到server1
(或任何空闲服务器),并且在连接关闭之前,没有人能够再连接到此服务器。我尝试使用此类配置进行测试
defaults
mode http
option http-server-close
option http-buffer-request
timeout client 25s
timeout connect 5s
timeout server 25s
timeout http-keep-alive 60s
timeout http-request 15s
frontend http-in
bind *:5000
default_backend servers
backend servers
balance hdr(user_id)
option httpchk GET /check HTTP/1.0
server server1 localhost:5001 check
server server2 localhost:5002 check
server server3 localhost:5003 check
然后我用
curl -XPOST --header "user_id=1" http://127.0.0.1:5000
但这种平衡的工作原理是roundrobin
,请求不会被坚持到一台服务器上。balance source
对我来说这不是一个选项,因为用户可以使用相同的 IP 地址。总结:我的目标是根据自定义user_id
标头平衡请求,任何唯一请求user_id
每次都会使用相同的后端服务器。有人能帮帮我吗?