4.17. 各コントローラーで Identity サービス (keystone) にプロキシーの永続性を使用する
mod_auth_mellon
がセッションを確立すると、複数のサーバーでその状態情報を共有することはできません。SAML で使用されるリダイレクト数が多いため、同じサーバーがすべてのトランザクションを処理する必要があります。そのため、HAProxy を、毎回各クライアントの要求を同じサーバーに転送するように設定する必要があります。
HAProxy が同じサーバーにクライアントをバインドする方法は 2 つあります。
- Affinity
- アプリケーション層下のレイヤーからの情報を使用して、クライアント要求を 1 つのサーバーに固定する場合は、アフィニティーを使用します。
- 永続性
- アプリケーション層の情報がクライアントを 1 つのサーバースティッキーセッションにバインドする場合は、永続性を使用します。永続性はアフィニティーよりもはるかに正確です。永続を実装するには、以下の手順を使用します。
HAProxy クッキーディレクティブは、永続化のために Cookie およびそのパラメーターに名前を付けます。HAProxy サーバーのディレクティブには、クッキーの値をサーバー名に設定する cookie オプションがあります。受け取った要求にバックエンドサーバーを識別する cookie がない場合、HAProxy はその設定済みの分散アルゴリズムに基づいてサーバーを選択します。
手順
/var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg
設定ファイルのkeystone_public
ブロックで永続性を有効にするには、以下の行を追加します。cookie SERVERID insert indirect nocache
この設定は、
SERVERID
が永続 Cookie の名前です。各
server
行を編集し、追加オプションとしてcookie <server-name>
を追加します。server controller-0 cookie controller-0 server controller-1 cookie controller-1