クラスタリング設定
1. クラスタリング方式
Cookieを用いたクラスタリング
認証済みセッション情報をCookieに埋め込むことにより、Shibboleth IdP 3を冗長化する方式です。リレーショナルデータベースを用いたクラスタリング
認証済みセッション情報をリレーショナルデータベースに保存することにより、Shibboleth IdP 3を冗長化する方式です。memcachedを用いたクラスタリング
認証済みセッション情報をmemcachedに保存することにより、Shibboleth IdP 3を冗長化する方式です。
2. Cookieを用いたクラスタリング
Cookieを用いたクラスタリング方式によるShibboleth IdP 3の冗長化設定について下記に示します。
2.1. 前提条件
前提条件は下記の通りです。
技術ガイドに従って構築する2台以上のIdPを対象とします。
マシンのホスト名は下記とします。
サービス提供用ホスト名
idp.example.ac.jp
1台目の実ホスト名
idp1.example.ac.jp
2台目の実ホスト名
idp2.example.ac.jp
2.2. 設定手順
2.2.1. IdPの構築
下記の2点について変更の上、技術ガイドに従ってIdPを構築してください。
3. jdk 7、tomcat 7をインストールする > 6. httpd の設定 にあるServerNameの設定
idp1.example.ac.jpのような実ホスト名ではなく、サービス提供用ホスト名 idp.example.ac.jpを設定します。/etc/httpd/conf/httpd.conf の修正(省略)ServerName idp.example.ac.jp:443 ←サービス提供用ホスト名(省略)/etc/httpd/conf.d/ssl.conf の修正(省略)<VirtualHost _default_:443>(省略)ServerName idp.example.ac.jp:443 ←サービス提供用ホスト名ProxyPass /idp/ ajp://localhost:8009/idp/ ←追加(省略)4. Shibbolethのインストール > 2. インストール にあるHostNameの入力
idp1.example.ac.jpのような実ホスト名ではなく、サービス提供用ホスト名 idp.example.ac.jpを設定します。install.shの実行Source (Distribution) Directory: [/root/PKG/shibboleth-identity-provider-3.2.0][Enter] ←入力なしInstallation Directory: [/opt/shibboleth-idp][Enter] ←入力なしHostname: [idp1.example.ac.jp]idp.example.ac.jp[Enter] ←サービス提供用ホスト名SAML EntityID: [https://idp.example.ac.jp/idp/shibboleth][Enter] ←入力なしAttribute Scope: [example.ac.jp][Enter] ←入力なし ※表示されたスコープが違う場合、設定してください。TLS Private Key Password: tlspass[Enter] ←任意のパスワードRe-enter password: tlspass[Enter]Cookie Encryption Key Password: cookiepass[Enter] ←任意のパスワードRe-enter password: cookiepass[Enter](省略)BUILD SUCCESSFULTotal time: 2 minutes 9 seconds
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でインストールしてください。
マシンのホスト名は下記とします。
サービス提供用ホスト名
idp.example.ac.jp
1台目の実ホスト名
idp1.example.ac.jp
2台目の実ホスト名
idp2.example.ac.jp
RDBサーバのホスト名
db.example.ac.jp
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を作成します。データベース shibbolethの作成db$ mysql -u rootmysql>CREATE DATABASE shibboleth;ユーザ作成
IdPからデータベース shibbolethにアクセスするためのユーザ shibbolethを作成し、データベース shibbolethへの権限を付与します。ユーザ shibbolethの作成db$ mysql -u rootmysql>CREATE USER 'shibboleth'@'localhost' IDENTIFIED BY 'shibpassword'; # ←任意のパスワードCREATE USER 'shibboleth'@'idp1.example.ac.jp' IDENTIFIED BY 'shibpassword'; # ←上記と同一のパスワードCREATE USER 'shibboleth'@'idp2.example.ac.jp' IDENTIFIED BY 'shibpassword'; # ←上記と同一のパスワードGRANT INSERT, SELECT, UPDATE, DELETE ON shibboleth.* TO 'shibboleth'@'localhost';GRANT INSERT, SELECT, UPDATE, DELETE ON shibboleth.* TO 'shibboleth'@'idp1.example.ac.jp';GRANT INSERT, SELECT, UPDATE, DELETE ON shibboleth.* TO 'shibboleth'@'idp2.example.ac.jp';StorageRecordsテーブル作成
JPAStorageServiceが使用するテーブル StorageRecordsを作成します。
テーブル StorageRecordsの作成db$ mysql -u rootmysql>use shibboleth;CREATE TABLE `StorageRecords` (`context` varchar(255) NOT NULL,`id` varchar(255) NOT NULL,`expires` bigint(20) DEFAULT NULL,`value` longtext NOT NULL,`version` bigint(20) NOT NULL,PRIMARY KEY (`context`,`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.2.2. IdPの構築
下記の2点について変更の上、技術ガイドに従ってIdPを構築してください。
3. jdk 7、tomcat 7をインストールする > 6. httpd の設定 にあるServerNameの設定
idp1.example.ac.jpのような実ホスト名ではなく、サービス提供用ホスト名 idp.example.ac.jpを設定します。/etc/httpd/conf/httpd.conf の修正(省略)ServerName idp.example.ac.jp:443 ←サービス提供用ホスト名(省略)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アドレスは下記とします。
ホスト名
IPアドレス
LVSサーバのホスト
lvs.example.ac.jp
203.0.113.1
サービス提供用ホスト
idp.example.ac.jp
203.0.113.10
1台目の実ホスト
idp1.example.ac.jp
203.0.113.11
2台目の実ホスト
idp2.example.ac.jp
203.0.113.12
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は下記とします。
ホスト名
IPアドレス
VRRPのpriority
サービス提供用ホスト
idp.example.ac.jp
203.0.113.10
-
1台目の実ホスト
idp1.example.ac.jp
203.0.113.11
200
2台目の実ホスト
idp2.example.ac.jp
203.0.113.12
100
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が正しく動作しているか確認します。