haproxy cookie不能圆形?

时间:2013-06-24 02:54:32

标签: cookies config haproxy

我想这样做,看看我的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)

1 个答案:

答案 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文档。

hdrhdr_subhdr_beg文档,可用于检查特定Cookie并相应地引导流量。