19.1.4 クラスタコネクションプールの動作
コネクションプールをクラスタ化した場合に使用できる機能と動作について説明します。クラスタコネクションプールでは次の機能を実行できます。
-
コネクションプールの一時停止
-
コネクションプールの再開
また,コネクションプールの状態,およびコネクションの取得要求を受けたときの,コネクションプールの選択方式についても説明します。
(1) コネクションプールの一時停止
メンバコネクションプールを閉塞および一時停止できます。一時停止を実行すると,メンバコネクションプールが閉塞し一時停止します。
J2EEアプリケーションがルートリソースアダプタにコネクション取得要求をした場合,閉塞または一時停止したメンバコネクションプールにはコネクション取得要求は出されません。
次の場合にメンバコネクションプールを一時停止してください。
-
データベースノードに障害が発生した場合
-
データベースノードのメンテナンスをする場合
なお,一時停止の方法には次の2とおりがあります。
-
自動一時停止
-
手動一時停止
- 参考
-
一時停止処理では,J2EEアプリケーションで使用し終わったコネクションを破棄し,コネクションプール内のすべてのコネクションを破棄してから,コネクションプールを一時停止します。ネットワーク障害やデータベースノード障害が発生した場合,ネットワークのタイムアウトまで待ってからコネクションを破棄するため,閉塞してから一時停止するまでに時間が掛かることがあります。
(a) 自動一時停止
データベースノードの障害時にメンバコネクションプールを自動で一時停止できます。障害を検知すると,メンバコネクションプールは自動的に閉塞状態になり,そのあと一時停止します。
コネクションの取得時に次の現象が発生した場合,データベースノードに障害が発生したと判断し,メンバコネクションプールが自動的に一時停止します。
-
コネクション取得時のコネクションの障害検知がタイムアウトした場合
-
物理コネクションの取得に失敗した場合
-
物理コネクションの取得がタイムアウトした場合
-
コネクション管理スレッドが枯渇した場合
この機能は,デフォルトで有効となっています。有効/無効の設定は,ルートリソースアダプタのプロパティとして設定します。リソースアダプタの設定については,マニュアル「アプリケーションサーバ アプリケーション設定操作ガイド」の「5.4 リソースアダプタのプロパティ定義」を参照してください。
(b) 手動一時停止
データベースノードのメンテナンスをする場合などに,cjsuspendpoolコマンドを実行することで,コネクションプールを手動で一時停止できます。手動一時停止は,メンバコネクションプールが開始状態,開始予約状態,自動一時停止状態,および自動一時停止予約状態の場合に実行できます。メンバコネクションプールが自動一時停止状態の場合にcjsuspendpoolコマンドを実行すると,手動一時停止状態になります。これによって,自動一時停止後に自動再開させない運用ができます。手動での一時停止手順については,「19.1.5(2) コネクションプールの一時停止」を参照してください。コマンドの詳細については,「cjsuspendpool(メンバコネクションプールの一時停止)」を参照してください。
- 注意事項
-
cjsuspendpoolコマンドで手動一時停止したコネクションプールは,自動で再開されません。手動で再開してください。
(2) コネクションプールの再開
一時停止したメンバコネクションプールを再開できます。J2EEアプリケーションからルートリソースアダプタにコネクション取得要求をした時に,再開したメンバコネクションプールには再びコネクションの取得要求が出されるようになります。
なお,コネクションプールを再開するには,未使用のコネクション管理スレッドの個数が,コネクションプールのコネクション数の最大数以上必要です。
次の場合にコネクションプールを再開してください。
-
データベースノードの障害が回復した場合
-
データベースノードのメンテナンスが終了した場合
再開の方法には次の2とおりがあります。
-
自動再開
-
手動再開
- 参考
-
-
コネクションプールが停止されている場合に,未使用のコネクション管理スレッドの個数がコネクションプールのコネクション数の最大数になると,メッセージが出力されます。cjresumepoolコマンドの実行に失敗した場合は,出力されたメッセージを確認してから再度コマンドを実行してください。
-
コネクションプールのウォーミングアップ機能が有効な場合には,コネクションプールの設定で定義した最小値までコネクションをプールしてから,メンバコネクションプールを開始します。コネクションをプーリングしているときにコネクションの生成に失敗した場合は,メンバコネクションプールは一時停止状態に戻ります。また,コネクションプールのウォーミングアップ機能が無効な場合は,すぐに開始状態になります。
-
(a) 自動再開
自動一時停止したメンバコネクションプールを自動で再開できます。
自動一時停止したメンバコネクションプールでは,データベースノードの状態をチェックするために,一定間隔で物理コネクションの取得要求を出します。このとき,コネクションの取得に成功すると,データベースノードが回復したと判断し,自動的に再開処理が行われます。また,自動一時停止したメンバコネクションプールを自動再開させない運用にするには,自動一時停止後に手動一時停止してください。再開時には,手動再開してください。
なお,ルートリソースアダプタが停止状態の場合,自動再開処理は行われません。ただし,メンバコネクションプールが自動再開中状態の場合にルートリソースアダプタを停止したときは,実行中の自動再開処理が継続されます。
この機能は,デフォルトで有効となっています。有効/無効の切り替えや,データベースノードの状態をチェックする間隔の設定は,ルートリソースアダプタのプロパティとして設定します。リソースアダプタの設定については,マニュアル「アプリケーションサーバ アプリケーション設定操作ガイド」の「5.4 リソースアダプタのプロパティ定義」を参照してください。
(b) 手動再開
自動一時停止または手動一時停止したコネクションプールを手動で再開できます。手動再開するには,cjresumepoolコマンドを使用します。手動再開は,コネクションプールが次の状態の場合に実行できます。
-
自動一時停止状態
-
手動一時停止状態
-
自動一時停止予約状態
-
手動一時停止予約状態
手動での手動再開手順については,「19.1.5(3) コネクションプールの再開」を参照してください。コマンドの詳細については,「cjresumepool(メンバコネクションプールの再開始)」を参照してください。
(3) コネクションプールの状態
コネクションプールの状態は,メンバコネクションプールの場合だけ存在するものです。なお,コネクションプールの状態は,J2EEサーバやリソースアダプタの再起動後も維持されます。
メンバコネクションプールの状態は次の方法で確認できます。手動一時停止または手動再開をする場合は,コマンドを実行する前にコネクションプールの状態を確認してください。
-
cjlistrarコマンド
cjlistrarコマンドは,デプロイされているすべてのリソースアダプタについて,リソースアダプタ名とリソースアダプタの状態を標準出力に出力します。-clusterpoolを指定した場合には,メンバコネクションプールの状態も表示できます。
コマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjlistrar(リソースアダプタの一覧表示)」を参照してください。
-
cjlistpoolコマンド
cjlistpoolコマンドは,コネクションプールの情報を表示するコマンドです。メンバリソースアダプタの場合は,メンバコネクションプールの状態も表示できます。メンバリソースアダプタのコネクション情報の表示例については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「3.15.4 コネクションプールの情報表示」を参照してください。
コマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjlistpool(コネクションプールの一覧表示)」を参照してください。
ここでは,メンバコネクションプールの状態について説明します。
メンバコネクションプールの状態は,J2EEサーバやメンバリソースアダプタを再起動しても維持されます。コネクションプールの状態を確認する方法については,「19.1.5(1) コネクションプールの状態の確認」を参照してください。
なお,メンバリソースアダプタ以外のコネクションプールには状態はありません。
(a) コネクションプールの状態遷移
メンバコネクションプールの状態遷移を次の図に示します。
なお,J2EEサーバの開始時にコネクションプールが再開中状態,または閉塞状態の場合,コネクションプールは一時停止状態に遷移します。
それぞれの状態の詳細について次の表に示します。
(b) コネクションプールの状態によるコマンド実行の可否
コネクションプールの状態によって,実行できるコマンドと実行できないコマンドがあります。コネクションプールの状態ごとに,各コマンドの実行の可否を次に示します。
コマンド |
コネクションプールの状態 |
|||||||
---|---|---|---|---|---|---|---|---|
開始 |
開始予約 |
自動再開中/手動再開中 |
自動閉塞/手動閉塞 |
自動一時停止 |
手動一時停止 |
自動一時停止予約 |
手動一時停止予約 |
|
cjstartrar |
× |
○ |
× |
× |
× |
× |
○ |
○ |
cjstoprar |
○ |
× |
△※1 |
△※2 |
○ |
○ |
× |
× |
cjclearpool |
○ |
× |
× |
× |
× |
× |
× |
× |
cjlistrar |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
cjsuspendpool |
○ |
○ |
× |
× |
○ |
× |
○ |
× |
cjresumepool |
× |
× |
× |
× |
○ |
○ |
○ |
○ |
cjstopsv(通常停止時) |
○ |
○ |
△※1 |
△※2 |
○ |
○ |
○ |
○ |
cjstopsv(強制停止時) |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
(4) コネクションプールの選択方式
J2EEアプリケーションがルートリソースアダプタにコネクションの取得要求を出した時に,メンバコネクションプールが一つ選択されます。このときメンバコネクションプールが選択される方式は,ラウンドロビン方式です。
選択対象のコネクションプールは,開始状態のメンバコネクションプールです。コネクションに空きがあるメンバコネクションプールが優先的に選択されます。
ただし,コネクション枯渇状態のメンバコネクションプールしかない場合は,コネクション取得要求が待ち状態になります。さらに,コネクション取得待ちのタイムアウトが発生すると,コネクションの取得に失敗します。また,コネクション取得要求が待ち状態の場合にコネクションプールが閉塞されたときは,コネクション取得要求が再開され,次の優先度のメンバコネクションプールからコネクションの取得を試みます。すべてのメンバコネクションプールからコネクションが取得できない場合には,コネクションの取得に失敗します。
なお,開始状態のメンバコネクションプールがない場合にコネクション取得要求があったときには,コネクションの取得に失敗します。
また,各メンバコネクションプールの最大サイズを設定する場合,次の指針に従って設定します。
メンバコネクションプールの最大サイズ(数)=システムで許容される最大同時接続数÷データベースノードの数