基于 http 标头的 HAProxy 自定义平衡规则

基于 http 标头的 HAProxy 自定义平衡规则

我需要设置一个 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每次都会使用相同的后端服务器。有人能帮帮我吗?

相关内容