我想这样做,看看我的haproxy:
backend app
balance roundrobin
cookie ha_gray_cookie insert indirect nocache
server app1 127.0.0.1:5001 cookie 110 check
server app2 127.0.0.1:5002 cookie 110 check
server app3 127.0.0.1:5003 cookie 110 check
server app4 127.0.0.1:5004 cookie 120 check
server app5 127.0.0.1:5005 cookie 120 check
server app6 127.0.0.1:5006 cookie 120 check
server app7 127.0.0.1:5007 cookie 120 check
server app8 127.0.0.1:5008 cookie 120 check
server app9 127.0.0.1:5009 cookie 120 check
当用户来到这里时,有3/9的机会访问新版本(5001 5002 5003)和6/9的机会访问旧版本。
以上配置有一些问题,即当我将cookie设置为110,然后客户端总是访问app1时,当我将cookie设置为120时,客户端总是访问app4。
我想这样做:如果我将cookie设置为110,客户端可以通过roundrobin访问所有3台服务器(5001,5002,5003)
答案 0 :(得分:1)
cookie
关键字是针对特定服务器的粘性,因此haproxy不会像您期望的那样回归循环。
相反,您可以创建两个后端,一个用于110个服务器,另一个用于120个服务器。使用ACL根据cookie将流量定向到后端。像这样:
frontend cookie_balancer
bind :80
mode http
acl is_110 hdr(Cookie) 110
acl is_120 hdr(Cookie) 120
use_backend backend_110 if is_110
use_backend backend_120 if is_120
default_backend backend_110
backend backend_110
balance roundrobin
server app1 127.0.0.1:5001 check
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
backend backend_120
balance roundrobin
server app4 127.0.0.1:5004 check
# ...
请参阅:
Using ACLs文档。
hdr,hdr_sub
或hdr_beg
文档,可用于检查特定Cookie并相应地引导流量。