Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

12.2.6 サーバの状態とグローバルセッション情報の引き継ぎ

サーバの停止時,およびサーバの障害発生時のセッション情報の引き継ぎについて説明します。

ここでは,次の状態の場合のセッション情報の引き継ぎについて説明します。

<この項の構成>
(1) J2EEサーバ停止時のセッション情報の引き継ぎ
(2) SFOサーバ停止時のセッション情報の引き継ぎ
(3) WebサーバまたはJ2EEサーバの障害発生時のセッション情報の引き継ぎ
(4) SFOサーバの障害発生時のセッション情報の引き継ぎ

(1) J2EEサーバ停止時のセッション情報の引き継ぎ

J2EEサーバを停止すると,J2EEサーバ内のHTTPセッションは破棄されますが,SFOサーバ上にあるグローバルセッション情報は破棄されません。このため,別のJ2EEサーバにグローバルセッション情報を引き継いだり,停止したJ2EEサーバの再起動後にグローバルセッション情報を引き継いだりすることができます。

なお,SFOサーバ上のグローバルセッション情報は,SFOサーバを再起動したときに破棄されます。

(2) SFOサーバ停止時のセッション情報の引き継ぎ

SFOサーバを停止すると,SFOサーバ上のグローバルセッション情報はすべて破棄されます。SFOサーバの停止も,SFOサーバで障害が発生したときと同様に,J2EEサーバ上のHttpSessionオブジェクトに含まれる書き換え可能グローバルセッション情報も削除されるので注意してください。

(3) WebサーバまたはJ2EEサーバの障害発生時のセッション情報の引き継ぎ

WebサーバまたはJ2EEサーバで障害が発生したとき,リクエストは,別のJ2EEサーバに転送されます。このとき,グローバルセッション情報の引き継ぎ処理が発生します。WebサーバまたはJ2EEサーバで障害が発生したときの,セッション情報の引き継ぎについて次の図に示します。なお,この図は,HTTPリクエストヘッダのCookieヘッダにグローバルセッションIDがあるが,Cookieヘッダに含まれるJSESSIONIDに対応するHttpSessionオブジェクトがJ2EEサーバにない場合の例です。

図12-11 WebサーバまたはJ2EEサーバの障害発生時のセッション情報の引き継ぎ

[図データ]

  1. SFOサーバにグローバルセッションIDに対応するグローバルセッション情報の引き継ぎ要求をします。
  2. グローバルセッション情報を検索し,ロックします。
  3. グローバルセッション情報をJ2EEサーバに転送します。
  4. 新規HttpSessionオブジェクトを作成します。
  5. 3.で取得したグローバルセッション情報を,4.で作成した新規HttpSessionオブジェクトに格納します。
  6. J2EEアプリケーション内の処理で,引き継がれたグローバルセッション情報を使用します。
  7. J2EEアプリケーション処理の終了後,セッションフェイルオーバ用フィルタでグローバルセッション情報をSFOサーバに送信します。
  8. SFOサーバ上のグローバルセッション情報を更新します。
  9. SFOサーバ上のグローバルセッション情報のロックを解除します。

(4) SFOサーバの障害発生時のセッション情報の引き継ぎ

SFOサーバに障害が発生している間は,セッションフェイルオーバ機能が無効になり,HTTPセッションによるセッション管理で業務を続けます。このため,SFOサーバに障害が発生している間は,グローバルセッションは生成されません。

SFOサーバの障害発生中に作成されたHttpSessionオブジェクトは,SFOサーバが復旧すると,最初にリクエストが送信された時点で,対応するグローバルセッションが生成され,SFOサーバに格納されます。

SFOサーバに障害が発生すると,J2EEサーバ上にあるHttpSessionオブジェクト内の書き換え可能グローバルセッション情報を削除します。SFOサーバ障害発生時のグローバルセッション情報の削除処理の動作を次の図で説明します。

図12-12 SFOサーバ障害発生時のグローバルセッション情報の削除処理

[図データ]

  1. グローバルセッションIDのHTTP Cookie情報を削除するよう,HTTPレスポンスヘッダのSet-Cookieヘッダに,有効期限切れを示す情報をセットします。
  2. HttpSessionオブジェクトに含まれる書き換え可能グローバルセッション情報を削除します。
  3. J2EEアプリケーション内の処理では,書き換え可能グローバルセッション情報だけが削除されたHttpSessionオブジェクトが使用されます。
    参考
    書き換え可能グローバルセッション情報の削除は,SFOサーバの障害時以外にも,ロック待ちタイムアウトが発生した場合,および無効となったグローバルセッションIDを使用するリクエストが送信された場合も実施されます。

SFOサーバに障害が発生したときの,グローバルセッションIDの発行,HttpSessionオブジェクトの最大数,およびグローバルセッション情報は次のようになります。

SFOサーバの障害発生時のグローバルセッションIDの発行について

SFOサーバに障害が発生した場合,セッションフェイルオーバ機能は無効になります。このため,HttpSessionオブジェクトが生成されても,グローバルセッションIDは発行されません。なお,SFOサーバが回復すると,最初に実施されるロック処理でグローバルセッションIDが発行されます。ロックが解除されたときにSFOサーバにグローバルセッション情報が格納されます。

SFOサーバに障害が発生した場合のHttpSessionオブジェクトの最大数について

SFOサーバに障害が発生した場合,セッションフェイルオーバ機能は無効になります。SFOサーバが停止していると,J2EEサーバでは,SFOサーバで管理できるグローバルセッション情報の最大数を超えて,HTTPセッション数の上限までHttpSessionオブジェクトが生成されます。

SFOサーバが回復すると,リクエスト処理で使用されたセッション情報から順にSFOサーバに格納されます。このとき,SFOサーバに格納できない分のHttpSessionオブジェクトについては,リクエストを受信した時点で破棄され,新規リクエストとして再度生成されて,J2EEアプリケーションに送られます。

SFOサーバに障害が発生した場合のグローバルセッション情報について

SFOサーバに障害が発生したあとのグローバルセッション情報について,種類ごとに説明します。なお,グローバルセッションの種類の概要については,「12.2.3 グローバルセッション情報」を参照してください。

書き換え可能グローバルセッション情報の場合
SFOサーバに障害が発生した場合,SFOサーバによる管理ができなくなるため,書き換え可能グローバルセッション情報は使用できなくなります。

読み込み専用グローバルセッション情報の場合
継続して使用できます。

SFOサーバで障害が発生したあとのリクエストは,書き換え可能グローバルセッション情報を削除したHttpSessionオブジェクトで処理を続行します。クライアントへのレスポンスも正常に返ります。

また,セッションフェイルオーバ用フィルタがSFOサーバに対してロック要求をした延長でSFOサーバに障害が発生した場合は,次のように処理されます。

この処理が発生した場合,HttpSessionオブジェクトの属性に次に示すキー名称と値が登録されます。

なお,この属性は,SFOサーバの復旧後,グローバルセッション情報がSFOサーバに格納されると削除されます。また,この属性は,SFOサーバに冗長化されないため,引き継ぎの対象になりません。

●SFOサーバに障害が発生した場合のHTTPセッション

SFOサーバに障害が発生したあとでも,Webアプリケーションで作成された新しいHTTPセッションは使用できます。ただし,セッションフェイルオーバ機能は無効になっているため,SFOサーバには格納されません。

なお,SFOサーバ復旧後,SFOサーバに障害が発生しているときに作成されたHTTPセッションは,リクエスト処理で使用されたHTTPセッションから順に,SFOサーバに格納され,セッションフェイルオーバ機能が有効になります。このとき,SFOサーバの障害発生中に登録された書き換え可能グローバルセッション情報や読み込み専用グローバルセッション情報は,そのままSFOサーバに格納されます。