Sun ONE Application Server 7, Enterprise Edition 管理者ガイド |
第 18 章
セッション持続性の設定この章では、SunTM Open Net Environment (Sun ONE) Application Server 7, Enterprise Edition のセッション持続性の設定方法について説明します。
この章には次の節が含まれます。
セッション持続性についてアプリケーションのセッションが進行する過程で、セッションの一部として、旧来のデータベースに保存されないデータが発生することがよくあります。このようなデータの一例として、ショッピングカートのコンテンツなどがあります。Sun ONE Application Server では、アプリケーションサーバーインスタンスに障害が発生した場合でも、セッション状態を復元して、情報が失われることなくセッションを続行できるように、このようなセッションデータをリポジトリに保存 (つまり、保持) することができます。
Sun ONE Application Server は、HTTP セッションの持続性をサポートしています。HTTP セッションに保存される特定の J2EE オブジェクト参照のフェイルオーバーもサポートしています。
Sun ONE Application Server にバンドルされている高可用性データベース (High-Availability Database : HADB) は、アプリケーションの高可用性を実現するための持続性ストアとして機能します。
注
付録 B 「フェイルオーバーのシナリオ」では、フェイルオーバーの一般的なシナリオについて詳しく説明しています。
この節には次の項目があります。
持続型について
持続型によって、Sun ONE Application Server で HTTP セッションの持続性およびフェイルオーバーを使用するかどうか、およびその方法を定義します。持続型には、ha、memory、および file があります。
持続型を ha に設定すると、HADB は持続性ストアとして使用されます。ha は、HTTP セッションの持続性とフェイルオーバー機能が必要となる本稼働環境でサポートされる持続型です。
memory はデフォルトの持続型であり、これに設定されている場合、フェイルオーバーは行われません。memory は、HTTP セッションの持続性とフェイルオーバー機能を必要としない本稼働環境にもっとも適した持続型です。
また、memory と file の持続型は、開発環境で開発者が HADB をインストールおよび設定しないでセッション持続性とフェイルオーバーのテストを実行したい場合に役立ちます。
持続型については、「持続型の設定」を参照してください。
アプリケーションサーバーインスタンスとアプリケーションのセッション持続性の設定
管理インタフェースまたはコマンド行インタフェースを使って、クラスタ内のアプリケーションサーバーインスタンスのセッション持続性を設定できます。この設定は、そのアプリケーションサーバーインスタンス上に配備されているすべてのアプリケーションに適用されます。
注
セッション持続性の設定に加えられた変更を有効にするには、設定を手動で適用して、アプリケーションサーバーインスタンスを再起動する必要があります。
上記の操作の際にインスタンスが要求を処理中である場合は、インスタンスが進行中の要求の処理を終えるまでの十分な時間を確保できるように、インスタンスを再起動する前に、まずインスタンスを静止する必要があります。詳細は、「静止について」および「クラスタ内のアプリケーションサーバーインスタンスの停止」を参照してください。
あらゆるアプリケーションについて、それぞれの対応する sun-web.xml ファイルを編集することでセッション持続性の設定を指定できます。
注
アプリケーションレベルのセッション持続性の設定は、インスタンスレベルのセッション持続性の設定に優先します。
アプリケーションの配備後にインスタンスレベルの設定を変更した場合でも、アプリケーションサーバーインスタンスの設定はアプリケーションの設定にオーバーライドされます。
たとえば、あるアプリケーションで、同じクラスタ上に配備されているほかのアプリケーションにはない固有のパフォーマンス要件や信頼性要件が要求される場合などに、アプリケーションのセッション持続性の設定を指定する必要性が生じることがあります。
例として、クラスタ上に配備されているアプリケーションの 1 つ (アプリケーション A) で、ほかのアプリケーションよりも確実に最新のセッション状態を利用できるようにする必要があるとします。このような場合には、次の手順に従います。
- 管理インタフェースまたはコマンド行インタフェースを使って、インスタンスレベルの持続性頻度を time-based に設定します (これにより、定期的かつ設定可能な時間間隔でセッション状態が保存されます)。
この結果、クラスタ上に配備されているすべてのアプリケーションの持続性頻度が time-based に設定されます。
- sun-web.xml ファイルを編集して、アプリケーション A の持続性頻度を web-method に変更します (これにより、各 Web 要求の終了時にセッション状態が保存されるため、最新のセッション情報をもっとも迅速かつ確実に得ることができます)。
この結果、アプリケーション A の持続性頻度は web-method に変更されます。一方、ほかのすべてのアプリケーションの持続性頻度は time-based に設定されたままです。
持続性頻度の詳細は、「持続性頻度の設定」を参照してください。
注
ユーザーが可用性を有効化し、クラスタ内のすべてのインスタンスの持続型を ha に設定しないかぎり、クラスタ内のセッション状態の定期的なフェイルオーバーは行われません。アプリケーションサーバーインスタンスの可用性を有効化する方法の詳細は、「アプリケーションサーバーインスタンスの可用性の有効化」を参照してください。持続型の設定方法の詳細は、「持続型の設定」を参照してください。
HTTP セッションに保存される J2EE オブジェクト参照のフェイルオーバー
Sun ONE Application Server は、HTTP セッションに保存される J2EE オブジェクト参照のフェイルオーバーをサポートしています。表「J2EE Web アプリケーションのセッション状態のフェイルオーバーをサポートするオブジェクトタイプ」は、サポートされている J2EE オブジェクト参照のリストです。
J2EE オブジェクト参照の復元には、次の条件が適用されます。
- Web クライアントから受信した要求のみが復元可能。RMI クライアントまたは IIOP クライアントから受信した要求のフェイルオーバーはサポートされていない
- セッションにバインドされているユーザー定義のオブジェクトはすべて、java.io.Serializable インタフェースを実装しているか、サポートされている J2EE オブジェクト参照の型のいずれか 1 つに属している必要がある (表 18-1 を参照)
これらの制限の一部を回避する方法の詳細は、『Sun ONE Application Server Application Design Guidelines for Storing Session State』を参照してください。
次の表で、左側の列は Java オブジェクトタイプを示し、右側の列はフェイルオーバーのサポートの有無を示しています。「フェイルオーバーのサポート」列が Yes の場合はフェイルオーバーがサポートされていて、No の場合はサポートされていません。
セッション持続性の基本的な設定手順
セッション持続性の設定を成功させるためには、後続の手順では、以前の手順に前提条件が含まれていることから、以降に示す手順を順番どおりに実施すべきであることをご確認ください。
注
次の手順の中には、clsetup コマンドおよび cladmin コマンドを使って実行する操作もあります。
clsetup コマンドでは、基本的なクラスタの標準的な設定を、自動的にセットアップできます。clsetup コマンドの使用方法の詳細は、『Sun ONE Application Server インストールガイド』を参照してください。cladmin コマンドは、クラスタ内でのアプリケーションサーバーインスタンスの設定と管理に対し、その手順を合理化します。cladmin コマンドの使用方法の詳細は、第 19 章「cladmin コマンドの使用」を参照してください。
- クラスタの HADB データベースを作成します。これについては、第 20 章「高可用性データベースの管理」で説明しています。
- 各クラスタの HADB データベース用として、セッションデータのセッションストアを作成します。これについては、「セッションストアの作成」で説明しています。
- 各クラスタ内のアプリケーションサーバーインスタンスのセッション状態が正しく保存されるように、JDBC 接続プールを設定し、HADB データベースの JDBC データソースを指定します。これについては、「JDBC 接続プールの設定」で説明しています。
- セッション持続性をサポートする必要があるアプリケーションサーバーインスタンスの可用性を有効化します。これについては、「アプリケーションサーバーインスタンスの可用性の有効化」で説明しています。
- 本稼働システムを使っているかどうか、およびフェイルオーバー機能が必要かどうかに応じて、アプリケーションサーバーインスタンスまたはアプリケーションの持続型を指定します。持続型では、基本的にセッションデータの保存方法と保存場所を定義します。これについては、「持続型の設定」で説明しています。
- ha 持続型を使う場合は、アプリケーションサーバーインスタンスまたはアプリケーションの持続性頻度 (セッションの保存を行う頻度) および持続範囲 (保存するセッションの量) を指定します。これについては、「持続性頻度の設定」および「持続範囲の設定」で説明しています。
- セッション持続性の設定を細かく調整したい場合は、必要に応じて追加プロパティを変更します。たとえば、期限切れのセッションを確認する間隔を秒単位で設定できます。これについては、「セッション持続性のその他のプロパティの設定」で説明しています。
- HADB データベース用として作成した JDBC リソースの JNDI 名を指定します。これについては、「HADB データベースに JDBC リソースの JNDI 名を指定」で説明しています。
- 1 つのセッションストアと複数のクラスタを使う場合は、アプリケーションサーバーインスタンスが属するクラスタの名前を指定します。これについては、「アプリケーションサーバーインスタンスのクラスタ名の指定」で説明しています。
- 高可用性が必要な各アプリケーションを分散可能にします。これについては、「アプリケーションを分散可能にする」で説明しています。
セッションストアの作成この節では、セッションストアの作成方法について説明します。この節には次の項目があります。
セッションストアの作成について
HADB を持続性ストアとして使っている場合、セッションデータを保存するセッションストアを各クラスタに作成する必要があります。
セッションストアを作成する前に、HADB データベースを作成しておく必要があります。詳細は、第 20 章「高可用性データベースの管理」を参照してください。
クラスタのセッションストアを作成するには、asadmin create-session-store コマンドを使います。これは、クラスタ用の HADB データベースに対して実行される asadmin コマンドであり、特定のアプリケーションサーバーインスタンスに対して実行されるものではありません。このコマンドは、設定する各クラスタに対して 1 回だけ実行します。
複数のクラスタのセッションストアの作成
複数のクラスタを作成する場合は、各クラスタに別々のセッションストアを作成します。複数のクラスタの使用方法の詳細は、「複数のクラスタの設定」を参照してください。
次の 2 つの方法のいずれかで、セッションストアを設定できます。
次の表に、それぞれの方法の長所と短所をまとめます。左側の列は方法、中央の列は各方法の長所、右側の列は各方法の短所を示しています。
注
2 つ以上のクラスタに同じセッションストアを使うことはお勧めできません。ただし、そのようにする場合は、各クラスタがそれぞれ異なるクラスタ名で設定されていることを確認してください。これについては、「アプリケーションサーバーインスタンスのクラスタ名の指定」で説明しています。
asadmin create-session-store コマンドの使用によるセッションストアの作成
asadmin create-session-store コマンドの構文は、次のとおりです。
asadmin create-session-store [--storeurl persistent-store-url --storeuser username [--storepassword userpassword] [--dbsystempassword systempassword]] | [--optionsfile file-name]
このコマンドで、特定のデータベースユーザーが使うセッションストアを作成します。
create-session-store コマンドのオプションは、次のとおりです。
HADB コマンドの使用方法の詳細は、第 20 章「高可用性データベースの管理」を参照してください。
コマンド構文の詳細は、コマンド行インタフェースのヘルプを参照してください。
asadmin の使用方法の詳細は、付録 A 「コマンド行インタフェースの使用」を参照してください。
また、storeurl、storeuser、storepassword、および dbsystempassword を、それぞれに対応する環境変数とともにファイルに指定することもできます。このファイルの名前は、optionsfile オプションの値として使用できます。
環境変数は、次の表のとおりです。この表では、左側の列にオプション、右側の列に対応する環境変数を示しています。
表 18-3 create-session-store コマンドオプションの環境変数
オプション
環境変数
storeurl
AS_ADMIN_STOREURL
storeuser
AS_ADMIN_STOREUSER
storepassword
AS_ADMIN_STOREPASSWORD
dbsystempassword
AS_ADMIN_DBSYSTEMPASSWORD
これらの環境変数は、asadmin set コマンドを使って設定できます。asadmin set コマンドの使用方法の詳細は、付録 A 「コマンド行インタフェースの使用」を参照してください。
一般に、ユーザー名およびパスワードの環境変数はほかのユーザーが比較的容易に見ることができるため、これらの環境変数の使用時には注意が必要です。安全性を高めるには、このような環境変数の値をファイルに保管して、このファイルへのアクセス権を適切に設定します。これらの環境変数の値を指定するファイルの使用が有効な場合があります。このようなファイルを使うと、ほかのユーザーは現在実行中のプロセスの詳細情報を得るためのコマンドを使って、これらの環境変数の値を見つけることができないためです。
このファイルは、マシン上のどこにでも置くことができます。このファイルは、1 行ごとに name=value のペアを記述する形式の標準テキストファイルにする必要があります。この後に示す例のように、このファイルの場所を指定することができます。ファイル内に指定された name=value ペアの例を次に示します。
AS_ADMIN_STOREURL = jdbc:sun:hadb:host1:4045,host2:4085
AS_ADMIN_STOREUSER = MyUser
AS_ADMIN_STOREPASSWORD = MyPassword
AS_ADMIN_DBSYSTEMPASSWORD = SuperUserPassword
例 : セッションストアの作成
次のコマンドでセッションストアを作成します。storeurl は jdbc:sun:hadb:myhost1:4045,myhost2:4085、storeuser は haadmin、storepassword は hapassword、dbsystempassword は dbhapassword です。
asadmin create-session-store --storeurl jdbc:sun:hadb:myhost1:4045,myhost2:4085 --storeuser haadmin --storepassword hapassword --dbsystempassword dbhapassword
例 : ファイルでのオプションの指定によるセッションストアの作成
次のコマンドで、/space/hadetails.txt ファイルに定義されたオプションに従ってセッションストアを作成します。
asadmin create-session-store --optionsfile /space/hadetails.txt
HADB データベースの JDBC パラメータの設定各クラスタ内のアプリケーションサーバーインスタンスのセッション状態が正しく保存されるように、JDBC 接続プールを設定し、HADB データベースの JDBC データソースを指定する必要があります。
この操作の詳細は、「JDBC 接続プールの設定」を参照してください。
アプリケーションサーバーインスタンスの可用性の有効化デフォルトでは、アプリケーションサーバーインスタンスの可用性は無効化されています。これは、Sun ONE Application Server のインストール時に HADB を設定していない場合でも、HADB で可用性を正常に機能させる必要があるためです。HADB を設定した後は、アプリケーションサーバーインスタンスの可用性を有効化できます。
アプリケーションサーバーインスタンスの可用性を有効化すると、そのアプリケーションサーバーインスタンス内にあるすべての仮想サーバーとアプリケーションのセッション持続性が有効化されます。
管理インタフェースを使ってアプリケーションサーバーインスタンスの可用性を有効化するには、次の手順に従います。
コマンド行インタフェースを使ってインスタンスの可用性を有効化するには、目的のインスタンスに対して asadmin set コマンドを使って availability-service 要素の availability-enabled 属性の値を true に設定します。
例 : アプリケーションサーバーインスタンスの可用性の有効化
次のコマンドで、アプリケーションサーバーインスタンス server1 のセッション持続性を有効化します。
asadmin set --user admin_user [--password admin_password] [--host host] [--port port] server1.availability-service.availabilityEnabled=true
シングルサインオンのセッション状態の可用性
1 つのアプリケーションサーバーインスタンス内では、ユーザーが 1 つのアプリケーションから認証された後、そのユーザーは同じインスタンス内で実行中のほかのアプリケーションから個別に再認証を受ける必要はありません。この仕組みをシングルサインオンと呼びます。シングルサインオンの詳細は、「Web アプリケーションの配備」を参照してください。
この機能はセッションがクラスタ内の別のインスタンスにフェイルオーバーされたときでも継続されるので、HADB にシングルサインオンの情報を保持する必要があります。HADB は、アプリケーションサーバーインスタンスの可用性を有効化したときに、同時に有効化されます。
シングルサインオングループに属するアプリケーションのセッション可用性
ユーザー名とパスワードの 1 つの組み合わせでアクセス可能な複数のアプリケーションは、シングルサインオングループを構成します。
シングルサインオングループに属するアプリケーションに対応するセッションでは、いずれか 1 つのセッションがタイムアウトになっても、ほかのセッションは無効化されず、利用可能な状態が維持されます。これは、1 つのセッションのタイムアウトがほかのセッションの可用性に影響を及ぼさないためです。
このような動作の結果、1 つのセッションがタイムアウトした場合、そのセッションを実行していた同じブラウザウィンドウから対応するアプリケーションへのアクセスを試みるときに、もう一度認証を行う必要はありません。ただし、タイムアウトになる前のセッションは失われるため、新しいセッションが作成されます。
例として、ほかの 2 つのアプリケーションとともにシングルサインオングループを構成するショッピングカートアプリケーションを取り上げます。ほかの 2 つのアプリケーションのセッションタイムアウト値が、ショッピングカートとアプリケーションのセッションタイムアウト値よりも大きい値に設定されているとします。ショッピングカートアプリケーションのセッションがタイムアウトになった場合、そのセッションを実行していた同じブラウザウィンドウからショッピングカートアプリケーションの実行を試みるときに、もう一度認証を行う必要はありません。ただし、タイムアウトになる前のショッピングカートは失われているので、新しいショッピングカートを作成する必要があります。ショッピングカートアプリケーションを実行しているセッションがタイムアウトになった場合でも、ほかの 2 つのアプリケーションは通常どおりに継続して実行されます。
上記の例で、ほかの 2 つのアプリケーションに対応するセッションがタイムアウトになったとします。そのセッションを実行していた同じブラウザウィンドウからアプリケーションに接続していても、もう一度認証を行う必要はありません。
アプリケーションサーバーインスタンスの可用性の無効化アプリケーションサーバーインスタンスの可用性を無効化すると、そのアプリケーションサーバーインスタンス内にあるすべての仮想サーバーとアプリケーションのセッション持続性が無効化されます。そのアプリケーションサーバーインスタンスに対応するシングルサインオンのセッション状態の持続性も無効化されます。
管理インタフェースを使ってアプリケーションサーバーインスタンスの高可用性を無効化するには、次の手順に従います。
コマンド行インタフェースを使ってインスタンスの可用性を無効化するには、目的のインスタンスに対して asadmin set コマンドを使って availability-service 要素の availability-enabled 属性の値を false に設定します。
例 : アプリケーションサーバーインスタンスの可用性の無効化
次の例では、アプリケーションサーバーインスタンス server1 のセッション持続性が無効化されています。
セッション持続性のオプションの設定Sun ONE Application Server のセッション持続性は、パフォーマンス、信頼性、および高可用性に対する個別のニーズが調和するように設定できます。たとえば、データが保存されるたびにセッション全体が保存されるように設定することも、セッションが変更された場合にのみセッションを保存するように設定することもできます。あるいは、セッションの属性のうち、変更された属性だけが保存されるように持続性を設定することもできます。さらに、各 Web 要求の終了時にセッションを保存するか (これにより、更新されたセッション状態の高可用性と信頼性が実現)、指定した時間間隔の経過後にセッションを保存するか (これにより、パフォーマンスが向上) を選択できます。
インスタンスレベルの設定を指定するには、管理インタフェースを使うか、コマンド行から configure-session-persistence コマンドを実行します。
個々のアプリケーションでそれぞれ固有のセッション持続性を設定する場合は、各アプリケーションに対応する sun-web.xml ファイルの該当する設定を変更することで、インスタンスレベルの設定をオーバーライドできます。
注
任意のアプリケーションのセッション持続性の設定は、1 つのクラスタ内のすべてのインスタンスに対して同一である必要があります。一定の設定でアプリケーションをクラスタ内のインスタンスの 1 つのセグメントに配備して、別の設定でアプリケーションを同じクラスタ内のインスタンスの別のセグメントに配備しないでください。
この節には次の項目があります。
configure-session-persistence コマンドについて
アプリケーションサーバーインスタンスのセッション持続性のオプションを指定するには、管理インタフェースのほかに、configure-session-persistence コマンドを使用できます。configure-session-persistence コマンドの構文は次のとおりです。
asadmin configure-session-persistence standard-options [ --type persistence-type ] [ --frequency frequency ] [ --scope scope ] [ --store jdbc-resource-jndi-name ] [ --property name=value[:name=value]* ] instance_name
- type は、セッションデータの保存場所を定義する持続型。持続型については、この節の「持続型の設定」を参照
- frequency は、セッションの保存を行う持続性頻度。持続性頻度については、この節の「持続性頻度の設定」を参照
- scope は、保存されるセッションの量。持続範囲については、この節の「持続範囲の設定」を参照
- jdbc-resource-jndi-name は、HADB データベースに指定した JDBC リソースの JNDI 名。詳細は、「HADB データベースの JDBC パラメータの設定」を参照
- property オプションは、セッション持続性の設定に関するその他のプロパティを細かく調整するために使用する。詳細は、「セッション持続性のその他のプロパティの設定」を参照
- instance_name は、セッション持続性を設定するアプリケーションサーバーインスタンスの名前
コマンド構文の詳細は、コマンド行インタフェースのヘルプを参照してください。
asadmin コマンドの使用方法の詳細は、付録 A 「コマンド行インタフェースの使用」を参照してください。
cladmin コマンドの使用によるセッション持続性の設定
クラスタ内のすべてのインスタンスにセッション持続性を設定するには、cladmin コマンドを次のように使用します。
各変数の意味は次のとおりです。
clinstance.conf ファイルおよび clpassword.conf ファイルが Sun ONE Application Server の設定ディレクトリ (デフォルトでは etc/opt/SUNWappserver7) にある場合は、instancefile オプションおよび passwordfile オプションを省略できます。
cladmin コマンドの詳細は、第 19 章「cladmin コマンドの使用」を参照してください。
持続型の設定
持続型 の設定により、セッション状態の保存場所を定義します。次の 3 つのオプションから、いずれか 1 つを選択できます。
これらの持続型については、この後の各節で説明しています。各持続型の比較および各持続型がサポートする設定オプションについては、「持続型の各オプションの比較」で説明しています。
持続型を ha に設定
持続型を ha に設定すると、セッションデータを HADB データベースに保存できます。クラスタ内のアプリケーションサーバーインスタンス間におけるセッション状態のフェイルオーバーを有効化する場合は、この持続型を使う必要があります。この持続型だけが、HTTP セッションの持続性とセッション状態のフェイルオーバーが必要となる本稼働システムでサポートされます。
ha 持続型では、クラスタ内の各アプリケーションサーバーインスタンスのセッション状態が HADB データベースに保存されます。クラスタ内の各インスタンスのセッション状態は、同じクラスタ内のほかのインスタンスのすべてで利用できます。したがって、クラスタ内の 1 つのインスタンスが利用できなくなった場合、同じクラスタ内のほかのインスタンスでは利用できなくなったインスタンスを処理していたセッションに対する操作を続行できます。
クラスタ内のアプリケーションサーバーインスタンスが利用できなくなった場合、次のような対応が行われます。
監視の詳細は、「ロードバランスプラグインの監視」を参照
- ロードバランサは、利用できなくなったインスタンスへの未割り当て要求の送信を停止する。未割り当ての要求とは、新しいセッションの要求のことである。詳細は、「割り当て済みの要求と未割り当ての要求について」を参照
- アプリケーションサーバーインスタンスに送信されたが処理されなかった要求は失われ、クライアントにエラーが返される
- そのアプリケーションサーバーインスタンスに割り当てられているセッションに対する後続の要求はすべて、クラスタ内の別のインスタンスにフェイルオーバーされる
クラスタの詳細は、第 17 章「クラスタの管理」を参照してください。
ha 持続型を使う場合は、持続性頻度 (セッションデータの保存を行う頻度を指定) および持続範囲 (保存するセッションの量を指定) も正しく設定する必要があります。持続性頻度の設定の詳細は、「持続性頻度の設定」を参照してください。持続範囲の設定の詳細は、「持続範囲の設定」を参照してください。
管理インタフェースを使ってアプリケーションサーバーインスタンスの持続型を ha に設定するには、次の手順に従います。
コマンド行インタフェースを使って持続型を ha に設定するには、configure-session-persistence コマンドの type オプションの値を ha に指定します。
例 : インスタンスの持続型を ha に設定
configure-session-persistence --user admin --password MyPassword --host localhost --port 4848 --type ha --frequency web-method --scope modified-session --store jdbc_hastore instance1
アプリケーションの持続型を ha に設定するには、sun-web.xml ファイルで session-manager 要素の persistence-type 属性の値を ha に設定します。
例 : アプリケーションの持続型を ha に設定
例として、サンプル sun-web.xml ファイルの一部を次に示します。関連する部分は、強調表示されています。
持続型を memory に設定
アプリケーションサーバーインスタンスのセッション持続性が無効化されている場合、memory がデフォルトの持続型になります。
持続型が memory の場合、クラスタ化された環境でセッション持続性が得られません。
ただし、インスタンスの定期的な停止の前にすべてのセッション状態がファイルに書き込まれるように、1 つのアプリケーションサーバーインスタンスの持続型を memory に設定することがあります。そのためには、停止の際にセッション状態が保存されるディレクトリを指定する必要があります。このディレクトリを指定するには、server.xml ファイルで session-manager の sessionFilename プロパティの値としてディレクトリのパスを指定します。sessionFilename の値の設定の詳細は、「セッション持続性のその他のプロパティの設定」を参照してください。
アプリケーションサーバーインスタンスが突然、利用できなくなった場合、ファイルに保存された対応するセッション状態は失われます。したがって、アプリケーションサーバーインスタンスで予定外の停止が生じた場合、そのインスタンスではセッション状態を復元できません。
管理インタフェースを使ってアプリケーションサーバーインスタンスの持続型を memory に設定するには、次の手順に従います。
コマンド行インタフェースを使ってアプリケーションサーバーインスタンスの持続型を memory に設定するには、configure-session-persistence コマンドの type オプションの値を memory に指定します。
例 : インスタンスの持続型を memory に設定
アプリケーションの持続型を memory に設定するには、該当するアプリケーションの sun-web.xml ファイルで session-manager 要素の persistence-type 属性の値を memory に設定します。
例 : アプリケーションの持続型を memory に設定
例として、サンプル sun-web.xml ファイルの一部を次に示します。関連する部分は、強調表示されています。
持続型を file に設定
持続型が file の場合、クラスタ化された環境でセッション持続性が得られません。
アプリケーションサーバーインスタンスに file 持続型を使うと、セッション状態がファイルに保存されます。Sun ONE Application Server は、各セッションの情報をそれぞれ別個のファイルに保存します。これらのファイルのパスを指定する必要はありません。これらのファイルが書き込まれるパスは変更できます。詳細は、表 18-8を参照してください。
インスタンスが利用できなくなって、これを再起動した場合、インスタンスは最後にファイルに書き込まれたセッション状態を復元できます。
保存を行うバックグラウンドスレッドが実行されるときに、セッション状態が定期的にファイルに書き込まれます。つまり、インスタンスが適切に停止したとき、または予定外の停止が生じたときに、セッションデータの一部が失われる可能性があります。
server.xml ファイル (インスタンスレベルの設定) または sun-web.xml ファイル (アプリケーションレベルの設定) 内にある manager-properties 要素の reapIntervalSeconds プロパティを設定することで、バックグラウンドスレッドを実行する頻度を設定できます。詳細は、「セッション持続性のその他のプロパティの設定」を参照してください。
注
file 持続型には、開発システムのみで使用するための限定的なフェイルオーバー機能が備えられています。file 持続型は、HTTP セッションの持続性とフェイルオーバー機能が必要となる本稼働システムでの使用を意図したものではなく、サポートもされていません。
開発環境で file 持続型を使う可能性があるのは、開発時に HADB を実行せずにフェイルオーバーをシミュレートする場合などです。
管理インタフェースを使ってアプリケーションサーバーインスタンスの持続型を file に設定するには、次の手順に従います。
コマンド行インタフェースを使って持続型を file に設定するには、configure-session-persistence コマンドの type オプションの値を file に指定します。
例 : インスタンスの持続型を file に設定
asadmin configure-session-persistence --user admin --password MyPassword --host localhost --port 4848 --type file instance1
アプリケーションの持続型を file に設定するには、sun-web.xml ファイルで session-manager 要素の persistence-type 属性の値を file に設定します。
例 : アプリケーションの持続型を file に設定
例として、サンプル sun-web.xml ファイルの一部を次に示します。関連する部分は、強調表示されています。
持続型の各オプションの比較
次の表では、持続型の各オプションを比較するとともに、持続型の各オプションでサポートされている組み合わせを示しています。左端の列には持続型の各オプション、左から 2 番目の列には本稼働システムにおけるフェイルオーバーのサポートの有無、左から 3 番目の列には各オプションの一般的な用途、左から 4 番目の列には各オプションがサポートしている持続性頻度オプション、右端の列には各オプションがサポートしている持続範囲オプションが示されています。
持続性頻度の設定
セッション状態の保存に HADB データベースを使う場合、高可用性およびパフォーマンスに関する各ユーザーの要件に応じて、HADB データベースへのセッション状態の保存を実行する頻度を設定できます。次の 2 つのオプションのいずれか 1 つを選択できます。
持続性頻度を web-method に設定
持続性頻度を web-method に設定すると、セッションは各 Web 要求の終了時に保存されます。
このモードは、更新されたセッション状態に対する高可用性が必要とされる場合に役立ちます。この持続性頻度に設定することで、インスタンスに障害が発生した後に元のセッション状態を利用できることがもっとも確実に保証されます。
管理インタフェースを使ってアプリケーションサーバーインスタンスの持続性頻度を web-method に設定するには、次の手順に従います。
コマンド行インタフェースを使って持続性頻度を web-method に設定するには、configure-session-persistence コマンドの frequency オプションの値を web-method に指定します。
例 : インスタンスの持続性頻度を web-method に設定
configure-session-persistence --user admin --password MyPassword --host localhost --port 4848 --type ha --frequency web-method --scope modified-session --store jdbc_hastore instance1
アプリケーションの持続性頻度を web-method に設定するには、sun-web.xml ファイルで manager-properties 要素の persistenceFrequency プロパティの値を web-method に設定します。
例 : アプリケーションの持続性頻度を web-method に設定
例として、サンプル sun-web.xml ファイルの一部を次に示します。関連する部分は、強調表示されています。
持続性頻度を time-based に設定
持続性頻度を time-based に設定すると、server.xml ファイル (インスタンスレベルの設定) または sun-web.xml ファイル (アプリケーションレベルの設定) 内にある manager-properties 要素の reapIntervalSeconds プロパティに定義した間隔でセッション状態の保存が実行されます。
reapIntervalSeconds の値の設定の詳細は、「セッション持続性のその他のプロパティの設定」を参照してください。
持続性頻度が time-based の場合、セッション状態に関する比較的高い可用性が保証されます (ただし、持続型が web-method の場合の可用性よりは低い)。セッションは、各 Web 要求の終了後ではなく、設定可能な時間間隔の経過後に保存されるので、応答時間が短縮されます。
time-based 持続性頻度を使うと、インスタンスに障害が発生した場合に、最後にセッションを保存した後でセッション状態に対して加えられた変更が失われるリスクが少しあります。
管理インタフェースを使ってアプリケーションサーバーインスタンスの持続性頻度を time-based に設定するには、次の手順に従います。
コマンド行インタフェースを使って持続性頻度を time-based に設定するには、configure-session-persistence コマンドの frequency オプションの値を time-based に指定します。
例 : インスタンスの持続性頻度を time-based に設定
configure-session-persistence --user admin --password MyPassword --host localhost --port 4848 --type ha --frequency time-based --scope modified-session --store jdbc_hastore instance1
アプリケーションの持続性頻度を time-based に設定するには、sun-web.xml ファイルで manager-properties 要素の persistenceFrequency プロパティの値を time-based に設定します。
例 : アプリケーションの持続性頻度を time-based に設定
例として、サンプル sun-web.xml ファイルの一部を次に示します。関連する部分は、強調表示されています。
持続性頻度の各オプションの比較
次の表に、持続性頻度の各オプションの長所と短所をまとめます。左側の列には持続性頻度のオプション、中央の列にはそのオプションの長所、右側の列にはそのオプションで予測される短所を示しています。
持続範囲の設定
HADB を持続性ストアとして使っている場合、保存されるセッション状態の量を示す持続範囲を設定する必要があります。次の 3 つのオプションから、いずれか 1 つを選択する必要があります。
これらのオプションについては、次の各節で説明します。
持続範囲を modified-session に設定
modified-session モードでは、セッションは変更された場合にのみ保存されます。したがって、持続性頻度が web-method の場合、セッションがその最後の保存後に変更されているときにのみ、各 Web 要求の終了時、つまりクライアントに応答を送信する直前にセッション全体が保存されます。また、持続性頻度が time-based の場合、セッションがその最後の保存後に変更されているときにのみ、指定した時間ベースの頻度が経過するたびにセッション全体が保存されます。
Web メソッド (通常は doGet または doPost) の実行中にセッションで setAttribute メソッド (属性の変更) または removeAttribute メソッド (属性の削除) が呼び出された場合にのみ、セッションが変更されたとみなされます。
管理インタフェースを使ってアプリケーションサーバーインスタンスの持続範囲を modified-session に設定するには、次の手順に従います。
- 管理インタフェースの左側のペインで、アプリケーションサーバーインスタンスの下にある「Containers (コンテナ)」コンポーネントを開きます。
- 「Web Container (Web コンテナ)」をクリックします。
- 「Session Manager (セッションマネージャ)」タブをクリックします。
- 「Session Store Properties (セッションストアのプロパティ)」の下にある「Properties (プロパティ)」ボタンをクリックします。
- 「Name (名前)」フィールドに次のように入力します。
persistenceScope
- 「Value (値)」フィールドに次のように入力します。
modified-session
コマンド行インタフェースを使って持続範囲を modified-session に設定するには、configure-session-persistence コマンドの scope オプションの値を modified-session に指定します。
例 : インスタンスの持続範囲を modified-session に設定
asadmin configure-session-persistence --user admin --password MyPassword --host localhost --port 4848 --type ha --frequency web-method --scope modified-session --store jdbc_hastore instance1
アプリケーションの持続範囲モードを modified-session に設定するには、sun-web.xml ファイルで store-properties 要素の persistenceScope プロパティの値を modified-session に設定します。
例 : アプリケーションの持続範囲を modified-session に設定
例として、サンプル sun-web.xml ファイルの一部を次に示します。関連する部分は、強調表示されています。
持続範囲を session に設定
持続範囲が session の場合、常にセッション全体が保存されます。したがって、持続性頻度が web-method の場合、各 Web 要求の終了時、つまりクライアントに応答を送信する直前にセッション全体が保存されます。また、持続性頻度が time-based の場合、指定した時間ベースの頻度が経過するたびにセッション全体が保存されます。
属性が変更されるたびに setAttribute または removeAttribute を呼び出さないアプリケーションがある場合、使用可能な唯一の持続範囲オプションは session であり、それ以外の持続範囲オプションは使用できません。
管理インタフェースを使ってアプリケーションサーバーインスタンスの持続範囲を session に設定するには、次の手順に従います。
- 管理インタフェースの左側のペインで、アプリケーションサーバーインスタンスの下にある「Containers (コンテナ)」コンポーネントを開きます。
- 「Web Container (Web コンテナ)」をクリックします。
- 「Session Manager (セッションマネージャ)」タブをクリックします。
- 「Session Store Properties (セッションストアのプロパティ)」の下にある「Properties (プロパティ)」ボタンをクリックします。
- 「Name (名前)」フィールドに次のように入力します。
persistenceScope
- 「Value (値)」フィールドに次のように入力します。
session
コマンド行インタフェースを使って持続範囲を session に設定するには、configure-session-persistence コマンドの scope オプションの値を session に指定します。
例 : 持続範囲を session に設定
configure-session-persistence --user admin --password MyPassword --host localhost --port 4848 --type ha --frequency web-method --scope session --store jdbc_hastore instance1
アプリケーションの持続範囲モードを session に設定するには、sun-web.xml ファイルで store-properties 要素の persistenceScope プロパティの値を session に設定します。
例 : アプリケーションの持続範囲を session に設定
例として、サンプル sun-web.xml ファイルの一部を次に示します。関連する部分は、強調表示されています。
持続範囲を modified-attribute に設定
持続範囲が modified-attribute の場合、セッションの最後の保存後に変更 (挿入、更新、または削除) された属性のみが保存されます。何らかの要求に対応して変更されるセッション状態は全体の僅かな部分であるため、このモードを使うと、アプリケーションのスループットと応答時間が大幅に改善されることがあります。
modified-attribute 持続範囲を使う場合、アプリケーションが次のガイドラインに準拠している必要があります。
管理インタフェースを使ってアプリケーションサーバーインスタンスの持続範囲を modified-attribute に設定するには、次の手順に従います。
- 管理インタフェースの左側のペインで、アプリケーションサーバーインスタンスの下にある「Containers (コンテナ)」コンポーネントを開きます。
- 「Web Container (Web コンテナ)」をクリックします。
- 「Session Manager (セッションマネージャ)」タブをクリックします。
- 「Session Store Properties (セッションストアのプロパティ)」の下にある「Properties (プロパティ)」ボタンをクリックします。
- 「Name (名前)」フィールドに次のように入力します。
persistenceScope
- 「Value (値)」フィールドに次のように入力します。
modified-attribute
コマンド行インタフェースを使って持続範囲を modified-attribute に設定するには、configure-session-persistence コマンドの scope オプションの値を modified-attribute に指定します。
例 : インスタンスの持続範囲を modified-attribute に設定
configure-session-persistence --user admin --password MyPassword --host localhost --port 4848 --type ha --frequency web-method --scope modified-attribute --store jdbc_hastore instance1
アプリケーションの持続範囲モードを modified-attribute に設定するには、sun-web.xml ファイルで store-properties 要素の persistenceScope プロパティの値を modified-attribute に設定します。
例 : アプリケーションの持続範囲を modified-attribute に設定
例として、サンプル sun-web.xml ファイルの一部を次に示します。関連する部分は、強調表示されています。
持続範囲の各オプションの比較
次の表に、持続範囲の各オプションの長所と短所をまとめます。左側の列には持続範囲のオプション、中央の列にはそのオプションの長所、右側の列にはそのオプションで予測される短所を示しています。
セッション持続性のその他のプロパティの設定
セッション持続性の動作を細かく調整するには、server.xml ファイル (インスタンスレベルの設定) または sun-web.xml ファイル (アプリケーションレベルの設定) で、manager-properties 要素のプロパティおよび session-manager 要素の store-properties サブ要素のプロパティを変更します。これらのプロパティは、asadmin set コマンドを使って変更できます。次の表 18-7 および表 18-8 では、これらのプロパティについてまとめています。それぞれの表では、左の列にプロパティの名前、中央の列に各プロパティのデフォルト値、右の列に各プロパティの説明を示します。
例 : maxSessions プロパティと reapIntervalSeconds プロパティを設定
次の例では、maxSessions の値は 1000 に設定されていて、reapIntervalSeconds の値は 60 に設定されています。
configure-session-persistence --user admin --password MyPassword --host localhost --port 4848 --type ha --property maxSessions=1000:reapIntervalSeconds=60 instance1
HADB データベースに JDBC リソースの JNDI 名を指定セッション持続性の設定時に、HADB データベース用として作成した JDBC リソースの JNDI 名を指定する必要があります。HADB を持続性ストアとして使う場合、この情報は HADB データベースへの接続に使われます。
注
configure-session-persistence コマンドを使ってセッション持続性を設定した場合は、すでに --store オプションに JNDI 名を指定しているので、再び指定する必要はありません。
HADB データベース用として作成した JDBC リソースの JNDI 名を管理インタフェースで指定するには、次の手順に従います。
- 管理インタフェースの左側のペインで、アプリケーションサーバーインスタンスの下にある「Containers (コンテナ)」コンポーネントを開きます。
- 「Web Container (Web コンテナ)」をクリックします。
- 「Availability Service (可用性サービス)」タブをクリックします。
- 「Persistence Store Properties (持続性ストアのプロパティ)」の下にある「Properties (プロパティ)」ボタンをクリックします。
- 「Name (名前)」フィールドに次のように入力します。
store-pool-jndi-name
- 「Value (値)」フィールドに、HADB データベースの JDBC パラメータを設定したときに HADB データベース用として作成した JDBC リソースの JNDI 名を入力します。詳細は、第 20 章「高可用性データベースの管理」を参照してください。
コマンド行インタフェースを使って JDBC リソースの JNDI 名を指定するには、次の例のように、該当するインスタンスの store-pool-jndi-name プロパティの値を JDBC URL の JNDI 名の値に設定します。
例 : HADB に JDBC リソースの JNDI 名を指定
set instance1.availability-service.persistence-store.property.store-pool-jndi-name = jdbc_ha
この例で、instance1 はアプリケーションサーバーインスタンスの名前、jdbc_ha は HADB データベースの JDBC パラメータを設定するときに作成した JDBC URL の JNDI 名の値です。JDBC パラメータの設定の詳細は、「HADB の設定」を参照してください。
アプリケーションサーバーインスタンスのクラスタ名の指定2 つ以上のクラスタに同じセッションストアを使うことはお勧めできません。ただし、そのようにする場合は、各クラスタがそれぞれ異なるクラスタ名で設定されていることを確認してください。
複数のクラスタ内の各アプリケーションサーバーインスタンスに、それぞれ異なるクラスタ名で各クラスタを設定するには、各インスタンスが属するクラスタの名前を指定します。
注
各クラスタに別々の HADB データベースを使っている場合、または各クラスタに対応する同一の HADB データベース内で別々のセッションストアを使っている場合は、次の手順を実行する必要はありません。
たとえば、2 つのクラスタに同じセッションストアを使っている場合、一方のクラスタ内のインスタンスに cluster1 という名前をつけて、別のクラスタ内のインスタンスに cluster2 という名前をつけることができます。
管理インタフェースを使ってアプリケーションサーバーインスタンスのクラスタの名前を指定するには、次の手順に従います。
- 管理インタフェースの左側のペインで、アプリケーションサーバーインスタンスの下にある「Containers (コンテナ)」コンポーネントを開きます。
- 「Web Container (Web コンテナ)」をクリックします。
- 「Availability Service (可用性サービス)」タブをクリックします。
- 「Persistence Store Properties (持続性ストアのプロパティ)」の下にある「Properties (プロパティ)」ボタンをクリックします。
- 「Name (名前)」フィールドに次のように入力します。
cluster-id
- 「Value (値)」フィールドに、アプリケーションサーバーインスタンスのクラスタの名前を入力します。
クラスタの詳細は、第 17 章「クラスタの管理」を参照してください。
コマンド行インタフェースを使ってクラスタの名前を指定するには、該当するインスタンスの cluster-id プロパティの値を該当するクラスタの名前に設定します。
例 : インスタンスのクラスタ名の指定
次の例では、アプリケーションサーバーインスタンス instance1 に対して cluster2 というクラスタ名が指定されています。
set instance1.availability-service.persistence-store.property.cluster-id = cluster2
アプリケーションを分散可能にするセッション持続性をアプリケーションに適用するには、そのアプリケーションが分散可能である必要があります。
アプリケーションを分散可能にするには、対応する web.xml ファイルで web-app 要素に distributable サブ要素を指定します。
例 : アプリケーションを分散可能にする
例として、サンプル web.xml ファイルの一部を次に示します。関連する部分は、強調表示されています。
<web-app>
<display-name>webapps-simple</display-name>
<description>
サンプルアプリケーション
</description>
<distributable></distributable>
<servlet>
<servlet-name>HelloWorldExample</servlet-name> <servlet-class>samples.webapps.simple.servlet.HelloWorldExample
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldExample</servlet-name> <url-pattern>/helloworld</url-pattern>
</servlet-mapping>
</web-app>
アプリケーションを分散可能にするには、Java サーブレット仕様バージョン 7.7.2 で分散可能なアプリケーションについて規定している動作と規則にアプリケーションが準拠している必要があります。詳細は、『Java Servlet Specification, v2.3』を参照してください。
アプリケーションの web.xml ファイルの web-app 要素に distributable サブ要素が指定されていない場合、そのアプリケーションは非分散型アプリケーションと呼ばれます。非分散型アプリケーションでは、高可用性に関する設定はできません。
セッション持続性のデフォルト値高可用性が無効化されている場合、持続型は memory に設定されます。高可用性が有効化されている場合、持続型は ha に設定されます。インスタンスレベルまたはアプリケーションレベルでその他の項目が設定されていない場合、セッション持続性のデフォルトの設定は次のとおりです。
これらのデフォルト設定は、アプリケーションサーバーインスタンスまたはアプリケーションの持続性に関するその他の設定にオーバーライドされます。
セッションストアのクリアすべてのアプリケーションサーバーインスタンスのセッションを HADB データベースからクリアする必要性が生じることがあります。たとえば、アプリケーションサーバーインスタンスが突然、停止して、不要になったデータが入っているセッションが HADB データベース内に数多く残っている場合などに、セッションをクリアする必要性が生じます。HADB データベースからすべてのセッションをクリアするには、asadmin clear-session-store コマンドを使います。
この節には次の項目があります。
セッションストアをクリアする前の注意点
クラスタ内のアプリケーションサーバーインスタンスがセッションデータを HADB データベースに保持している場合には、asadmin clear-session-store コマンドを使わないでください。
したがって、asadmin clear-session-store コマンドを使う前に、「アプリケーションサーバーインスタンスの可用性の無効化」の説明に従って、クラスタ内のすべてのインスタンスについて高可用性を無効化する必要があります。
asadmin clear-session-store コマンドの使用
asadmin clear-session-store コマンドの構文は、次のとおりです。
asadmin clear-session-store [--storeurl persistent-store-url] [--storeuser username] [--storepassword userpassword] [--optionsfile file_name]
storeurl、storeuser、および storepassword の値は、「セッションストアの作成」に記載されている値と同じです。
HADB コマンドの使用方法の詳細は、第 20 章「高可用性データベースの管理」を参照してください。
コマンド構文の詳細は、コマンド行インタフェースのヘルプを参照してください。
asadmin の使用方法の詳細は、付録 A 「コマンド行インタフェースの使用」を参照してください。
また、storeurl、storeuser、および storepassword を、それぞれに対応する環境変数とともにファイルに指定することもできます。このファイルの名前は、optionsfile オプションの値として使用できます。環境変数は、次の表のとおりです。この表では、左側の列にオプション、右側の列に対応する環境変数を示しています。
表 18-9 create-session-store コマンドオプションの環境変数
オプション
環境変数
--storeurl
AS_ADMIN_STOREURL
--storeuser
AS_ADMIN_STOREUSER
--storepassword
AS_ADMIN_STOREPASSWORD
このファイルは、1 行ごとに name=value のペアを記述する形式の標準テキストファイルにする必要があります。この後に示す例のように、このファイルの場所を指定することができます。ファイル内に指定された name=value ペアの例を次に示します。
AS_ADMIN_STOREURL = jdbc:sun:hadb:host1:4045,host2:4085
AS_ADMIN_STOREUSER = MyUser
AS_ADMIN_STOREPASSWORD = MyPassword
例 : HADB データベースからすべてのセッションを削除
次の例で、storeurl は jdbc:sun:hadb:myhost1:7676,myhost2:6767、storeuser は haadmin、storepassword は hapassword、dbstorepassword は dbhapassword です。
asadmin clear-session-store --storeurl jdbc:sun:hadb:myhost1:4045,myhost2:4085 --storeuser haadmin --storepassword hapassword --dbstorepassword dbhapassword
例 : 必要なオプションをファイルに指定することによりすべてのセッションを HADB データベースから削除
次のコマンドにより、/space/hadetails.txt ファイルに定義されたオプションに従って、持続性ストア内のすべてのセッションが削除されます。
asadmin clear-session-store --optionsfile /space/hadbdetails.txt
セッションストアをクリアした後の注意点
セッションが復元された後で、「アプリケーションサーバーインスタンスの可用性の有効化」の説明に従って、クラスタ内のすべてのインスタンスについて可用性を有効化します。