機械翻訳について

HAProxyのセッション永続性の追加

HAProxyには、多数のロード・バランシング・アルゴリズムがあり、その一部では、Webセッションが同じバックエンド・サーバーへの永続的な接続を保持することを自動的に保証する機能が用意されています。 hdrrdp-cookiesourceuriまたはurl_paramなどのbalanceアルゴリズムを構成して、セッション中の特定の受信接続に対してトラフィックが常に同じWebサーバーにルーティングされるようにできます。 たとえば、sourceアルゴリズムは、ソースIPアドレスのハッシュを作成し、それを特定のバックエンド・サーバーにマップします。 rdp-cookieまたはurl_paramアルゴリズムを使用する場合は、これらのメカニズムを効率的に実行するために、バックエンドWebサーバーまたはWebアプリケーションを構成することが必要な場合があります。

実装でleastconnroundrobinまたはstatic-rrアルゴリズムを使用する必要がある場合は、サーバー依存Cookieを使用してセッションの永続性を実現できます。

  1. 標準または重み付けラウンドロビン負荷分散用にサーバーを構成します。
  2. HAProxy構成を編集して、構成内の各サーバーにcookieディレクティブを追加します。

    1つのWebサーバーですべてのページのセッションの永続性を有効にするには、cookieディレクティブを使用して、挿入するCookieの名前を定義し、cookieオプションとサーバー名をserverの行に追加します。たとえば:

    cookie WEBSVR insert
    server websrv1 192.168.1.71:80 weight 1 maxconn 512 cookie 1 check
    server websrv2 192.168.1.72:80 weight 1 maxconn 512 cookie 2 check

    HAProxyは、Webサーバーを識別するSet-Cookie:ヘッダーをクライアントへの応答に含めます(たとえば: Set-Cookie: WEBSVR=N; path=page_path )。 クライアントがリクエストでWEBSVR Cookieを指定すると、HAProxyは、server cookieの値がWEBSVRの値と一致するWebサーバーにリクエストを転送します。

    Webサーバーで選択的に永続性を有効にするには、cookieディレクティブを使用して、指定したCookie (通常はセッションID Cookieまたはその他の既存のCookie)の前にserver cookie値および~デリミタが付くことをHAProxyが必要とすることを指定します。次に例を示します。

    cookie SESSIONID prefix
    server websrv1 192.168.1.71:80 weight 1 maxconn 512 cookie 1 check
    server websrv2 192.168.1.72:80 weight 1 maxconn 512 cookie 2 check

    SESSIONIDの値の前にserver cookie値を付けると(たとえば: Set-Cookie: SESSIONID=N~Session_ID;)、HAProxyは、SESSIONID Cookieから接頭辞とデリミタを取り除いてから、server cookie値がその接頭辞と一致するWebサーバーにリクエストを転送します。

  3. HAProxy systemdサービスをリロードします。
    sudo systemctl reload haproxy
  4. セッション永続性が機能していることを確認します。

    次の例は、curlリクエストにcookieを含めることで、curlを使用してセッション永続性をテストする方法を示しています。 シェルでwhileループを使用して、一定期間テストを繰り返すことができます。 ループから取り消すには、CtrlキーとCキーの組合せを使用します:

    while true; do curl http://10.0.0.10 --cookie "SESSIONID=1~1234;"; sleep 1; done

    この出力は、重み付けラウンドロビン・ロード・バランシング用に構成されたロード・バランサを介してリクエストが渡される場合でも、セッション永続性が維持されるため、リクエストは常に同じwebサーバーに送信されることを示しています。

    This is HTTP server websrv1 (192.168.1.71).
    This is HTTP server websrv1 (192.168.1.71).
    This is HTTP server websrv1 (192.168.1.71).
    ...

    ノート:

    これらの例では、webサーバーは、Webサーバー名とIPアドレスを説明するページを提供するように構成されています。 実環境構成での出力は異なる可能性があります。

    実際のWebアプリケーションは通常、サーバー側にセッションIDを設定し、この場合、最初のHAProxyレスポンスでSet-Cookie:ヘッダーに接頭辞付きのCookieが含められます。