4.17. 各コントローラーで Identity サービス (keystone) にプロキシーの永続性を使用する

mod_auth_mellon がセッションを確立すると、複数のサーバーでその状態情報を共有することはできません。SAML で使用されるリダイレクト数が多いため、同じサーバーがすべてのトランザクションを処理する必要があります。そのため、HAProxy を、毎回各クライアントの要求を同じサーバーに転送するように設定する必要があります。

HAProxy が同じサーバーにクライアントをバインドする方法は 2 つあります。

アフィニティー
アプリケーション層下のレイヤーからの情報を使用して、クライアント要求を 1 つのサーバーに固定する場合は、アフィニティーを使用します。
Persistence
アプリケーション層の情報がクライアントを 1 つのサーバースティッキーセッションにバインドする場合は、永続性を使用します。永続性はアフィニティーよりもはるかに正確です。永続を実装するには、以下の手順を使用します。

HAProxy クッキーディレクティブは、永続化のために Cookie およびそのパラメーターに名前を付けます。HAProxy サーバーのディレクティブには、クッキーの値をサーバー名に設定する cookie オプションがあります。受け取った要求にバックエンドサーバーを識別する cookie がない場合、HAProxy はその設定済みの分散アルゴリズムに基づいてサーバーを選択します。

手順

  1. /var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg 設定ファイルの keystone_public ブロックで永続性を有効にするには、以下の行を追加します。

    cookie SERVERID insert indirect nocache

    この設定は、SERVERID が永続 Cookie の名前です。

  2. server 行を編集し、追加オプションとして cookie <server-name> を追加します。

    server controller-0 cookie controller-0
    server controller-1 cookie controller-1