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 は期待どおりにラウンド ロビンにフォールバックしません。

代わりに、2 つのバックエンドを作成できます。1 つには 110 台のサーバーがあり、もう 1 つには 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_sub、またはhdr_begドキュメントを使用して、特定の Cookie を確認し、それに応じてトラフィックを転送できます。

于 2013-07-01T05:29:03.130 に答える