クラスタリング設定
1. クラスタリング方式
Cookieを用いたクラスタリング
認証済みセッション情報をCookieに埋め込むことにより、Shibboleth IdP 3を冗長化する方式です。リレーショナルデータベースを用いたクラスタリング
認証済みセッション情報をリレーショナルデータベースに保存することにより、Shibboleth IdP 3を冗長化する方式です。memcachedを用いたクラスタリング
認証済みセッション情報をmemcachedに保存することにより、Shibboleth IdP 3を冗長化する方式です。
2. Cookieを用いたクラスタリング
Cookieを用いたクラスタリング方式によるShibboleth IdP 3の冗長化設定について下記に示します。
2.1. 前提条件
前提条件は下記の通りです。
技術ガイドに従って構築する2台以上のIdPを対象とします。
マシンのホスト名は下記とします。
2.2. 設定手順
2.2.1. IdPの構築
下記の2点について変更の上、技術ガイドに従ってIdPを構築してください。
3. jdk 7、tomcat 7をインストールする > 6. httpd の設定 にあるServerNameの設定
idp1.example.ac.jpのような実ホスト名ではなく、サービス提供用ホスト名 idp.example.ac.jpを設定します。4. Shibbolethのインストール > 2. インストール にあるHostNameの入力
idp1.example.ac.jpのような実ホスト名ではなく、サービス提供用ホスト名 idp.example.ac.jpを設定します。
2.2.2. /opt/shibboleth/credentials/sealer.jksのコピー
クラスタを構成するIdPでは、同じ/opt/shibboleth/credentials/sealer.jksを使用する必要があります。
scpコマンドやrsyncコマンドなどでidp1.example.ac.jpの/opt/shibboleth/credentials/sealer.jksをidp2.example.ac.jpにコピーします。3台以上でクラスタリングする場合は3台目以降も同様にコピーします。
2.2.3. Tomcatの再起動
Tomcatを再起動します。
# service tomcat7 restart
3. リレーショナルデータベースを用いたクラスタリング
リレーショナルデータベース(以下、「RDB」とします)を用いたクラスタリング方式によるShibboleth IdP 3の冗長化設定を下記に示します。
3.1. 前提条件
前提条件は下記の通りです。
技術ガイドに従って構築する2台以上のIdPを対象とします。
RDBサーバはIdPサーバとは独立したサーバとします。
RDBサーバでは、CentOS 6付属のMySQL 5.1が起動しているものとします。MySQLがインストールされていない場合は、yumでインストールしてください。
マシンのホスト名は下記とします。
3.2. 設定手順
IdPv3はストレージを統一的に扱いますので、3.2.1、3.2.4および3.2.6で行った設定をuApproveJP等で同意情報のストレージとして用いることが可能です。
3.2.1. MySQLの設定
db.example.ac.jpのMySQLの設定を行います。
データベース shibbolethの作成
Shibboleth IdPで使用するデータベース shibbolethを作成します。ユーザ作成
IdPからデータベース shibbolethにアクセスするためのユーザ shibbolethを作成し、データベース shibbolethへの権限を付与します。StorageRecordsテーブル作成
JPAStorageServiceが使用するテーブル StorageRecordsを作成します。
3.2.2. IdPの構築
下記の2点について変更の上、技術ガイドに従ってIdPを構築してください。
3. jdk 7、tomcat 7をインストールする > 6. httpd の設定 にあるServerNameの設定
idp1.example.ac.jpのような実ホスト名ではなく、サービス提供用ホスト名 idp.example.ac.jpを設定します。4. Shibbolethのインストール > 2. インストール にあるHostNameの入力
idp1.example.ac.jpのような実ホスト名ではなく、サービス提供用ホスト名 idp.example.ac.jpを設定します。
3.2.3. /opt/shibboleth/credentials/sealer.jksのコピー
クラスタを構成するIdPでは、同じ/opt/shibboleth/credentials/sealer.jksを使用する必要があります。
scpコマンドやrsyncコマンドなどでidp1.example.ac.jpの/opt/shibboleth/credentials/sealer.jksをidp2.example.ac.jpにコピーします。3台以上でクラスタリングする場合は3台目以降も同様にコピーします。
3.2.4. MySQL Connector/Jのインストール
IdPにMySQLへのアクセスに必要なMySQL Connector/J (
mysql-connector-java.jar)をインストールします。/usr/share/java 配下にインストールされているので、
edit-webapp/配下のlib ディレクトリにシンボリックリンクを作成し、build.shコマンドを実行してidp.warに含めます。
3.2.5. idp.session.StorageServiceの設定変更
idp.sesssion.StorageServiceの設定をshibboleth.JPAStorageServiceに変更します。
3.2.6. shibboleth.JPAStorageServiceの設定
3.2.5. idp.session.StorageServiceの設定変更でidp.sesssion.StorageServiceに設定したshibboleth.JPAStorageServiceを定義します。
<bean id="Shibboleth.MySQLDataSource">のp:url, p:username, p:passwordは、3.2.1. MySQLの設定に合わせて設定します。
3.2.7. Tomcatの再起動
Tomcatを再起動します。
4. memcachedを用いたクラスタリング
memcachedを用いたクラスタリング方式によるShibboleth IdP 3の冗長化設定については、Shibboleth wikiのMemcachedStorageServiceをご参照ください。
5. 参考
クラスタリングの設定する上で、参考になるドキュメントを下記に示します。
[Shibboleth wiki] Identity Provider 3 > DeployerResources > Productionalization > Clustering
[Shibboleth wiki] Identity Provider 3 > DeployerResources > Configuration > StorageConfiguration
A1. keepalivedを使用したクラスタリング設定
A1.1. Active-Active構成
keepalivedを使用しActive-Active構成によるクラスタリング設定について下記に示します。
A1.1.1. 前提条件
前提条件は下記の通りです。
IdPサーバから独立したLVSサーバを用意します。
LVSサーバにてクライアントからのリクエストを受け付け、IdPサーバにリクエストを振り分けます。
IdPサーバからの応答は直接クライアントに返すDirect Return(DR)とします。
マシンのホスト名とIPアドレスは下記とします。
A.1.1.2.IdPサーバの設定手順
LVSサーバから割り振られたリクエストパケットを受信するために、iptablesに下記の設定を行います。
A1.1.3. LVSサーバの設定手順
LVSサーバにkeepalivedとipvsadmをインストールします。
keepalivedの設定を行います。
keepalivedを起動します。
keepalivedが正しく動作しているか確認します。
A1.2. Active-Standby構成
keepalivedを使用してVRRPによるActive-Standby構成によるクラスタリング設定について下記に示します。
A1.2.1. 前提条件
前提条件は下記の通りです。
WebサーバやIdPサーバが停止した場合は、keepalivedを停止する動作とします。復旧は手動で行います。
マシンのホスト名、IPアドレス、VRRPのpriorityは下記とします。
A1.2.2. IdPサーバの設定手順(idp1, idp2共通)
IdPサーバにkeepalivedとipvsadmをインストールします。
A.1.2.3. IdPサーバの設定手順(idp1)
keepalivedの設定を行います。
keepalivedを起動します。
keepalivedが正しく動作しているか確認します。
A.1.2.4. IdPサーバの設定手順(idp2)
keepalivedの設定を行います。
keepalivedを起動します。
keepalivedが正しく動作しているか確認します。