3

我想这样做,看看我的 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,客户端可以通过循环访问所有 3 个服务器(5001,5002,5003)

4

1 回答 1

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
        # ...

看:

使用 ACL文档。

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

于 2013-07-01T05:29:03.130 回答