Oracle Application Server 高可用性ガイド 10gリリース3(10.1.3.1.0) B31835-01 |
|
この章では、アクティブ/アクティブ・トポロジについて説明します。この章の項は次のとおりです。
アクティブ/アクティブ・トポロジは、単一インスタンスよりも優れたスケーラビリティと可用性を実現する冗長なOracle Application Serverインスタンスで構成されています。アクティブ/アクティブ・トポロジを使用すると、単一インスタンスで発生するシングル・ポイント障害を回避できます。単一のOracle Application Serverインスタンスでは、単一ホストのリソースを利用しますが、Oracle Application Serverインスタンスのクラスタでは複数のホストにわたって、多数のCPUにアプリケーションの実行を分散できます。単一のOracle Application Serverインスタンスは、ホストおよびオペレーティング・システムの障害に対して脆弱ですが、アクティブ/アクティブ・トポロジではオペレーティング・システムまたはホストの損失が発生しても引き続き機能します。クライアントがこれらの障害の影響を受けることはありません。
アクティブ/アクティブ・トポロジでは、すべてのインスタンスが同時にアクティブになります。これは、一度に1つのみのインスタンスがアクティブになるアクティブ/パッシブ・トポロジとは異なります。
アクティブ/アクティブ・トポロジのノードは、ハードウェア・クラスタには含まれていません。
アクティブ/アクティブ・トポロジではロード・バランサを使用して、トポロジ内のいずれかのOracle Application Serverインスタンスにリクエストを送信します。つまり、Oracle Application Serverインスタンスの前にはロード・バランサが配置されています。
ロード・バランサは、HTTPおよびHTTPSトラフィック用の仮想サーバー名を使用して構成します。クライアントはリクエストの中でこれらの仮想サーバー名を使用します。ロード・バランサは、使用可能なOracle Application Serverインスタンスにリクエストを送信します。
ロード・バランサに必要な機能の一覧は、第2.5項「外部ロード・バランサ」を参照してください。
次の図は、2つのアクティブ/アクティブ・トポロジを示しています。これらのトポロジの違いは、Oracle HTTP ServerとOC4Jを同じOracleホームにインストールするか、個別のOracleホームにインストールするかです。
図3-1は、Oracle HTTP ServerとOC4Jが同じOracleホームにインストールされているアクティブ/アクティブ・トポロジを示しています。図3-2は、Oracle HTTP ServerとOC4Jが個別のOracleホームにインストールされているアクティブ/アクティブ・トポロジを示しています。
アクティブ/アクティブ・トポロジ内のすべてのOracle Application Serverインスタンスは、同じクラスタに属しています。Oracle HTTP Serverは、アプリケーションのリクエストを、同じクラスタに属しているOC4Jインスタンスのみに転送します。
クラスタ内のインスタンスは、次の方法のいずれかを使用してグループ化できます。
また、OracleAS Clusterを使用すると、一部のopmnctl
コマンドで@cluster
パラメータを使用できるようになります。@cluster
パラメータを使用するコマンドは、クラスタ内のすべてのインスタンスに適用されます。たとえば、@cluster
パラメータを使用して、クラスタ内のすべてのインスタンスのコンポーネントをすべて起動できます。
クラスタ内のOC4Jインスタンスには、次の特徴があります。
詳細は、『Oracle Containers for J2EE構成および管理ガイド』の「クラスタの構成と管理」を参照してください。
OC4Jで実行されているステートフルWebアプリケーションとステートフル・セッションEJBに対し、クライアントは一連のHTTPリクエストとレスポンスにおいて同じOC4Jプロセスを使用して通信します。ただし、アプリケーションを実行しているOC4Jプロセスが停止またはハングするか、ノードに障害が発生した場合、クライアントのリクエストに関連付けられている状態は失われます。
このようなソフトウェアやハードウェアの障害から保護するには、次の手順を実行する必要があります。
OracleAS Cluster(OC4J)のアプリケーションレベルのクラスタリングでは、OC4Jプロセスがセッション状態を互いにレプリケートします。この構成では、異なるOracle Application Serverインスタンスで実行している複数のOC4Jプロセス間で状態をレプリケートすることにより、フェイルオーバーと高可用性が実現します。障害が発生した場合、Oracle HTTP Serverは、OracleAS Cluster(OC4J)内のアクティブなOC4Jプロセスにリクエストを転送します。
ノードの障害などのハードウェア障害から保護するには、1つのOracleAS Cluster(OC4J)内の各ノード上のOC4Jインスタンスをクラスタリングします。1つのOracleAS Cluster(OC4J)内の異なるノードで実行されるOC4Jプロセスは、セッションの状態情報を共有できます。OC4Jインスタンスに障害が発生するか、使用不可になると、Oracle HTTP Serverは使用可能なOC4Jプロセスにリクエストを転送します。Oracle HTTP Serverは、クラスタ内のアクティブな(動作中の)OC4Jプロセスにのみリクエストを転送します。
OracleAS Cluster(OC4J)をmod_oc4jリクエスト・ルーティングとともに使用すると、ソフトウェアまたはハードウェアに問題が発生したときにステートフル・フェイルオーバーを利用できます。たとえば、OracleAS Cluster(OC4J)の一部であるOC4Jプロセスで障害が発生すると、OPMNによってこの障害がmod_oc4jに通知され、リクエストはmod_oc4jによって同じクラスタ内の別のOC4Jプロセスにルーティングされます。クライアントのセッション状態は維持されます。サービスの損失はクライアントからは見えません。
図3-3は、2つのOracle Application Serverインスタンスに構成されているOracleAS Cluster(OC4J)を示しています。OC4Jプロセスは各インスタンスで実行されています。Oracle Application Serverのインスタンス1に障害が発生した場合、インスタンス2のOC4Jプロセスはセッション状態情報を含んでいるので、リクエストを処理できます。この構成により、OracleAS Cluster(OC4J)におけるWebアプリケーションのセッション状態レプリケーションのフェイルオーバーが可能になります。
最小のOC4Jプロセス数を維持しつつ、ソフトウェアまたはハードウェア障害から保護するには、同じクラスタ内に少なくとも2つのOC4Jプロセスを構成する必要があります。たとえば、インスタンス1とインスタンス2の2つのOracle Application Serverインスタンスがある場合は、それぞれのインスタンスに2つのOC4Jプロセスを構成できます。この構成では、ステートフル・セッションのアプリケーションがハードウェアおよびソフトウェア障害から保護され、次のいずれかのタイプの障害が発生しても、クライアントの状態は維持されます。
OracleAS Cluster(OC4J-EJB)では、ステートフル・セッションEJBの高可用性が実現します。EJBクラスタでは、同じマルチキャスト・アドレス経由で通信する複数のOC4Jプロセス間でこれらのEJBをフェイルオーバーできます。このように、ステートフル・セッションEJBでレプリケーションを使用すると、プロセスとノードの障害から保護し、Oracle Application Serverで実行されているステートフル・セッションEJBの高可用性を実現できます。
詳細は、『Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド』の第24章「OC4JのEJBアプリケーション・クラスタリング・サービスの構成」を参照してください。
ロード・バランサはトポロジ内の任意のOracle Application Serverインスタンスにリクエストを送信できるため、どのインスタンスがリクエストを処理してもクライアントが同じレスポンスを取得するように、各インスタンスの構成を同じにする必要があります。これには次の作業が含まれます。
OC4Jインスタンスをグループに配置することで、いくつかの一般的な管理タスクをグループ・レベルで実行できます。たとえば、Application Server Controlの「グループ」ページで、グループ内のすべてのメンバーに対して次の作業を実行できます。
「グループ」ページを表示するには、「クラスタ・トポロジ」ページの「グループ」セクションでグループ名をクリックします。
各OC4Jインスタンスは、グループに属している必要があります。Oracle Application Serverをインストールすると、"default_group
"というグループが自動的に作成されます。
図3-4に、Oracle Application Serverの3つのインスタンスを示します。これらOracle Application Serverの各インスタンスには、"home"というOC4Jインスタンスがあり、"Apps"というグループに属しています。この図は、3つのOracle Application Serverインスタンスのうちの2つに"sales"というOC4Jインスタンスが存在することも示しており、これらのOC4Jインスタンスは"finance"というグループに属しています。
グループには、クラスタ内のすべてのOracle Application ServerインスタンスのOC4Jインスタンスが含まれている必要はありません。たとえば、図3-4では、"sales" OC4Jインスタンスは2つのOracle Application Serverインスタンスにのみ存在します。これは有効です。
Oracle Application Serverでは、グループ内のインスタンスを同一に構成する必要はありません。ただし、一部の構成(データソース、JMSリソース、セキュリティ・プロバイダ設定など)は同一にして、どのインスタンスがリクエストを処理しても、同じレスポンスがアプリケーションから返されるようにしてください。
グループの詳細は、Application Server Controlのオンライン・ヘルプにあるOC4Jインスタンスとグループの作成のガイドラインに関する項を参照してください。
グループは、Application Server Controlを使用して作成できます。「クラスタ・トポロジ」ページには「グループ」セクションがあり、グループの起動、停止、削除、作成などの操作を実行できます。
OC4Jインスタンスの作成時にグループを作成することもできます。Application Server Controlを使用してOC4Jインスタンスを作成する場合、OC4Jインスタンス名の入力に加えて、この新しいOC4Jインスタンスがどのグループに属しているかを指定する必要があります。既存のグループまたは新しいグループのいずれかを指定できます。第3.1.5.2項「追加のOC4Jインスタンスの作成」を参照してください。
createinstance
コマンドを使用してOC4Jインスタンスを作成する場合は、groupName
パラメータでグループの名前を指定します。createinstance
コマンドについては、第3.1.5.2項「追加のOC4Jインスタンスの作成」を参照してください。
グループの作成手順、OC4Jインスタンスの作成手順や削除手順など、グループの詳細は、『Oracle Containers for J2EE構成および管理ガイド』の第8章「クラスタおよびOC4Jグループの構成と管理」、Oracle Application Serverクラスタ内のOC4Jグループの作成と管理に関する項を参照してください。
追加のOC4Jインスタンスを作成するには、Application Server ControlまたはORACLE_HOME/bin/createinstance
コマンドを使用します。
「クラスタ・トポロジ」ページでOracle Application Serverインスタンスの名前をクリックすると、「Application Server: instance_name」ページが表示されます。「OC4Jインスタンスの作成」ボタンをクリックして、「OC4Jインスタンスの作成」ページを表示します(図3-5)。
「OC4Jインスタンスの作成」ページでは、作成するOC4Jインスタンスの名前と、そのOC4Jインスタンスが属するグループを入力します。既存のグループまたは新しいグループのいずれかを指定できます。
追加のOC4Jインスタンスを作成するには、ORACLE_HOME/bin/createinstance
コマンドを使用します。構文は次のとおりです。
createinstance -instanceName name [-port httpPort] [-groupName groupName]
name
には、作成するOC4Jインスタンスの名前を指定します。
オプションのport
パラメータは、Oracle Application ServerインスタンスにOracle HTTP Serverが含まれていない場合に役立ちます。HTTPポートを設定すると、新しいOC4Jインスタンスのホームページに直接アクセスできるようになります。
オプションのgroupName
パラメータを使用すると、指定したグループに新しいOC4Jインスタンスを追加できます。このパラメータを指定しない場合、インスタンスはdefault_group
グループに追加されます。指定したグループが存在しない場合は、そのグループが作成されます。
たとえば、OC4Jインスタンス"sales"を作成して"finance"グループに追加するには、次のコマンドを使用します。
createinstance -instanceName sales -groupName finance
コマンドによって、"sales"インスタンスのoc4jadminユーザー・パスワードを設定するように求められます。このパスワードは、"home"インスタンスのパスワードとは異なるものに設定できますが、お薦めできません。パスワードを"home"インスタンスのoc4jadminユーザー・パスワードと同じものに設定して、OPMNの問題を回避してください。
パスワードの詳細は、『Oracle Containers for J2EE構成および管理ガイド』の第8章「クラスタの構成と管理」、createinstanceユーティリティによるOC4Jインスタンスの作成に関する項を参照してください。
このコマンドによってインスタンスが作成されますが、起動はされません。起動はApplication Server Controlコンソールまたはopmnctl
コマンドで行います。
インスタンスを作成したら、OPMNをリロードし、新しいインスタンスが認識されるようにします。
opmnctl reload
createinstance
コマンドの詳細は、『Oracle Containers for J2EE構成および管理ガイド』の第8章「クラスタの構成と管理」、追加のOC4Jインスタンスの作成と管理に関する項を参照してください。
OC4Jインスタンスのグループは、一括管理することも、個別に管理することもできます。すべてのアプリケーションとインスタンスは、一度にまたは個別に起動および停止でき、またアプリケーションは、グループ内のすべてのインスタンスまたは一部のインスタンスにデプロイ、再デプロイ、アンデプロイすることもできます。
グループ内の一部のインスタンスのみにアプリケーションをデプロイすることはお薦めできません。グループ内のすべてのインスタンスに同じアプリケーションをデプロイするようにしてください。
グループは、Application Server Controlコンソールまたはadmin_client.jar
を使用して管理できます。Application Server Controlコンソールでは、グループに対して次のような操作を実行できます。
admin_client.jar
ユーティリティを使用して、アプリケーションをグループにデプロイできます。構文は次のとおりです。
> cd ORACLE_HOME/j2ee/home > java admin_client.jar deployer:cluster:opmn://<host>:<opmnPort>/<groupName> <adminID> <adminPassword> -deploy -file <pathToArchiveFile> -deploymentName <appName>
<host>
には、グループ内の任意のホストを指定できます。
<opmnPort>
には、OPMNがリスニングするポートを指定します。このポートは、opmn.xml
ファイルに記載されています。
<groupName>
には、グループの名前を指定します。これは、OC4Jインスタンスの名前(home
など)です。
<adminID>
と<adminPassword>
には、管理者のIDとパスワードを指定します。通常、adminIDはoc4jadmin
です。
<pathToArchiveFile>
には、デプロイするEAR、WAR、またはJARファイルへのフルパスを指定します。
<appName>
には、アプリケーション名を指定します。
デプロイについては、コマンドラインで指定できるオプションが他にもあります。詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。
Oracle HTTP Serverでは、J2EEアプリケーションに対するリクエストを受信すると、そのリクエストをOracle HTTP Server内にあるmod_oc4jモジュールに転送します。ロード・バランシング・アルゴリズムに従って、mod_oc4jではリクエストを同じクラスタ内のOC4Jインスタンスに転送します。図3-6を参照してください。
リクエストの分散にmod_oc4jが使用するデフォルトのロード・バランシング・アルゴリズムは、単純なラウンド・ロビン・アルゴリズムです。別のアルゴリズムを使用する場合は、mod_oc4j.confファイルにディレクティブを設定します。詳細は、第3.2.12項「mod_oc4jのロード・バランシング・オプションの設定」を参照してください。
セッションの一部であるリクエストは、同じOC4Jインスタンスに送信されます。最初のリクエスト後にOC4Jインスタンスが使用不可になった場合は、リクエストを処理する別のインスタンスがmod_oc4jによって検索され、同じセッション内の後続リクエストがそのインスタンスに送信されます。
Oracle Application Server 10gリリース3(10.1.3.1.0)にはOracle Identity Managementは含まれていませんが、Oracle Application Server 10gリリース3(10.1.3.1.0)を、リリース9.0.4、リリース2(10.1.2)またはリリース10.1.4のOracle Identity Managementとともに使用することはできます。
Oracle Internet Directory、OracleAS Single Sign-On、OracleAS Certificate Authority、Oracle Directory Integration and ProvisioningなどのOracle Identity Managementサービスが必要な場合は、アクティブ/アクティブ・トポロジをOracle Identity Managementに関連付けることができます。
リリース3(10.1.3.1.0)のアクティブ/アクティブ・トポロジとOracle Identity Managementインスタンスは個別にインストールします。インストール後に、Application Server Controlコンソールを使用してリリース3(10.1.3.1.0)のインスタンスをOracle Identity ManagementのOracle Internet Directoryに関連付けます。
Oracle Identity Managementをリリース3(10.1.3.1.0)のインスタンスに関連付ける方法の詳細は、『Oracle Application Server管理者ガイド』の「10.1.4および10.1.2のOracle Identity Managementを使用するためのインスタンスの構成」を参照してください。
高可用性環境では、高可用性を実現するために、リリース3(10.1.3)のインスタンスとOracle Identity Managementインスタンスの両方が必要になります。このガイドでは、リリース3(10.1.3)のインスタンス用の高可用性についてのみ説明します。Oracle Identity Managementの高可用性の詳細は、使用しているOracle Identity Managementリリースの『Oracle Application Server高可用性ガイド』を参照してください。
図3-7は、リリース2(10.1.2)のOracle Identity Managementを使用して実行されているアクティブ/アクティブ・トポロジのOracle Application Server 10gリリース3(10.1.3)のインスタンスを示しています。
アクティブ/アクティブ・トポロジでは、リリース3(10.1.3.1.0)のOracle HTTP Serverを使用するかわりに、リリース2(10.1.2)のOracle HTTP Serverを使用できます。これは次のような理由で行います。
リリース2(10.1.2)のOracle HTTP Serverは、分散アクティブ/アクティブ・トポロジ(図3-2)に対してのみ使用できます。
図3-7に示すように、Oracle Application Server 10gリリース3(10.1.3)で、リリース2(10.1.2)のOracleAS Web Cacheを使用できます。
OracleAS Web Cacheは、リバース・プロキシ・サーバーとして使用します。リバース・プロキシ・サーバーは、OracleAS Web Cacheの1つのインスタンスまたはクラスタ(OracleAS Web Cacheクラスタ)として構成されている複数のインスタンスで構成できます。
リバース・プロキシ・サーバーとしてのOracleAS Web Cache(単一インスタンスまたはクラスタ)の構成方法の詳細は、『Oracle Application Server管理者ガイド』の「リバース・プロキシとしての10.1.2 OracleAS Web Cacheの構成」を参照してください。
この項では、アクティブ/アクティブ・トポロジの管理に必要な一般的な手順について説明します。
OracleAS Clusterの作成には、いくつかの方法があります。この項では、2つの方法についてのみ説明します。
その他の方法については、『Oracle Containers for J2EE構成および管理ガイド』の「クラスタの構成と管理」を参照してください。
この方法では、クラスタ内の各Oracle Application Serverインスタンスに対して同じマルチキャスト・アドレスとポートを定義します。この方法の利点は、クラスタ内の各Oracle Application Serverインスタンスの名前を指定する必要がないことです。クラスタのインスタンスの追加または削除は、マルチキャスト・アドレスおよびポートを編集することで実行できます。
opmnctl config topology update discover="*<multicastAddress>:<multicastPort>"
multicastAddress
は、このクラスタに使用するマルチキャスト・アドレスを指定します。マルチキャスト・アドレスは、224.0.1.0〜239.255.255.255の有効なアドレス範囲内で指定する必要があります。コマンドでは、マルチキャスト・アドレスの前に*
文字を付けます。
multicastPort
には、未使用のポート番号を指定できます。
例:
> ORACLE_HOME/opmn/bin/opmnctl config topology update discover="*225.0.0.20:8001"
分散インストール(異なるOracleホームにOracle HTTP ServerおよびOC4Jがインストールされている場合)では、すべてのOracle Application Serverインスタンスを同じクラスタにクラスタリングする必要があります。すべてのインスタンスには同じマルチキャストIPとポートを使用する必要があります。
opmnctl
config
topology
update
コマンドを実行するOracle Application Serverインスタンスごとにopmnctl
reload
コマンドを実行し、更新されたopmn.xml
ファイルのOPMNによる読取りを強制します。
> ORACLE_HOME/opmn/bin/opmnctl reload
マルチキャスト方法を使用しない場合は、Oracle Application Serverインスタンスを実行するノードの名前を各インスタンスのopmn.xml
ファイルで指定して、クラスタを定義できます。
例: 4つのインスタンス(inst1.node1.mycompany.com、inst2.node2.mycompany.com、inst3.node3.mycompany.com、inst4.node4.mycompany.com)をクラスタリングする場合は、次の手順を実行します。
この例では、inst1.node1.mycompany.comとinst2.node2.mycompany.comがクラスタの検出サーバーになることを前提としています。
分散インストール(異なるOracleホームにOracle HTTP ServerおよびOC4Jがインストールされている場合)では、Oracle HTTP ServerまたはOC4Jのどちらを実行するインスタンスでも検出サーバーとして機能できます。
opmn.xml
ファイルで、検出サーバーを実行しているノード(この例ではnode1.mycompany.comとnode2.mycompany.com)を指定します。この例では、次の行を含むようにopmn.xml
ファイルを変更します。
<notification-server> <topology> <discover list="node1.mycompany.com:6201,node2.mycompany.com:6201"/> </topology> ... </notification-server>
6201は、通知サーバーがリスニングするポート番号を示します。この値はそのインスタンスのopmn.xml
ファイルに含まれています。
複数の検出サーバーを使用する場合は、これらをカンマで区切ります。
opmnctl
reload
を実行して、更新されたopmn.xml
ファイルのOPMNによる読取りを強制します。
> ORACLE_HOME/opmn/bin/opmnctl reload
マルチキャスト・レプリケーションは、デフォルトのレプリケーション・タイプです。マルチキャスト・レプリケーションを使用するようにアプリケーションを設定するには、空の<cluster/>
タグをアプリケーションのorion-application.xml
ファイルまたはグローバルのORACLE_HOME/j2ee/home/config/application.xml
ファイルに追加します。次に、例を示します。
<orion-application ... > ... <cluster/> </orion-application>
<cluster/>
タグは、アプリケーションのデプロイ先のノードすべてに追加する必要があります。
デフォルトでは、マルチキャスト・レプリケーションには230.230.0.1のマルチキャスト・アドレスと45566のポートが使用されます。これらの値を変更する場合は、multicast
要素のip
属性とport
属性に必要な値を指定します。たとえば次のコードでは、ip
属性とport
属性に、カスタマイズされた値が設定されています。
<orion-application ... > ... <cluster allow-colocation="false"> <replication-policy trigger="onShutdown" scope="allAttributes"/> <protocol> <multicast ip="225.130.0.0" port="45577" bind-addr="226.83.24.10"/> </protocol> </cluster> </orion-application>
マルチキャスト・アドレスには、224.0.1.0〜239.255.255.255の範囲の値を指定する必要があります。
上のコードで使用されている他のタグと属性を次に説明します。
allow-colocation
: アプリケーション状態が、同じホストで実行されている他のOracle Application Serverインスタンスにレプリケートされるかどうかを指定します。デフォルトはtrueです。
trigger
およびscope
: 第3.2.5項「レプリケーション・ポリシーの設定」を参照してください。
bind-addr
: バインド先のネットワーク・インタフェース・カード(NIC)のIPを指定します。これは、ホスト・マシンに複数のNICがあり、各NICに独自のIPアドレスが指定されている場合に役立ちます。
Oracle Application Serverでは、動的と静的の2種類のpeer-to-peerレプリケーションをサポートしています。
動的なpeer-to-peerレプリケーションを指定するには、空の<opmn-discovery/>
タグをアプリケーションのorion-application.xml
ファイルまたはグローバルのORACLE_HOME/j2ee/home/config/application.xml
ファイルに追加します。
<orion-application ... > ... <cluster allow-colocation="false"> <replication-policy trigger="onShutdown" scope="allAttributes"/> <protocol> <peer> <opmn-discovery/> </peer> </protocol> </cluster> </orion-application>
OPMNによるクラスタ内のインスタンスの検出方法は、OracleAS Clusterの設定時に定義しました。詳細は、第3.2.1項「OracleAS Clusterの設定」を参照してください。
静的なpeer-to-peerレプリケーションを指定するには、ホスト名のリストをアプリケーションのorion-application.xml
ファイルまたはグローバルのORACLE_HOME/j2ee/home/config/application.xml
ファイルの<node>
要素に含めます。ノードごとにアクティブ/アクティブ・トポロジ内の別のノードを指定し、トポロジ内のすべてのノードが連鎖の中で接続されるようにします。たとえば、トポロジに3つのOracle Application Serverインスタンスがある場合、ノード1はノード2を指定し、ノード2はノード3を指定し、ノード3はノード1を指定できます。
例:
ノード1では、<node>
タグによってノード2が指定されます。
<orion-application ... > ... <cluster allow-colocation="false"> <replication-policy trigger="onShutdown" scope="allAttributes"/> <protocol> <peer start-port="7900" range="10" timeout="6000"> <node host="node2.mycompany.com" port="7900"/> </peer> </protocol> </cluster> </orion-application>
ノード2では、<node>
タグによってノード3が指定されます。
<orion-application ... > ... <cluster allow-colocation="false"> <replication-policy trigger="onShutdown" scope="allAttributes"/> <protocol> <peer start-port="7900" range="10" timeout="6000"> <node host="node3.mycompany.com" port="7900"/> </peer> </protocol> </cluster> </orion-application>
ノード3では、<node>
タグによってノード1が指定されます。
<orion-application ... > ... <cluster allow-colocation="false"> <replication-policy trigger="onShutdown" scope="allAttributes"/> <protocol> <peer start-port="7900" range="10" timeout="6000"> <node host="node1.mycompany.com" port="7900"/> </peer> </protocol> </cluster> </orion-application>
これを実現する別の方法は、すべてのノードで同じノードを指定することです。3つのノードを含む例では、ノード1とノード2がノード3を指定し、ノード3がノード1またはノード2のどちらかを指定することもできます。
上の例で使用されているタグと属性を次に説明します。
start-port
: ピア通信用にOracle Application Serverがバインドするローカル・ノード上の最初のポートを指定します。このポートが使用中の場合は、使用可能なポートが見つかるまでOracle Application Serverによってポート番号が増加されます。デフォルトは7800です。
timeout
: 指定したピア・ノードからのレスポンスを待機する時間をミリ秒で指定します。デフォルトは3000ミリ秒です。
host
: ピア・ノードの名前を指定します。
port
: 指定したホスト(host
属性で指定)でピア通信に使用するポートを指定します。デフォルトは7800です。
range
: port
(start-port
ではない)属性で指定したポートの番号を増加する回数を指定します。デフォルトは5です。
次の点に注意してください。
orion-application.xml
ファイルはインスタンスごとに異なります。アプリケーションをデプロイするときは、それに伴ってorion-application.xml
を更新する必要があります。
このレプリケーション・メカニズムでは、レプリケートされたデータはデータベースに保存されます。データベースはアプリケーションのorion-application.xml
ファイルまたはグローバルのORACLE_HOME/j2ee/home/config/application.xml
ファイルの<database>
タグに指定します。次に、例を示します。
<orion-application ... > ... <cluster allow-colocation="false"> <replication-policy trigger="onShutdown" scope="allAttributes"/> <protocol> <database data-source="jdbc/MyOracleDS"/> </protocol> </cluster> </orion-application>
data-source
属性の値は、data-sources.xml
ファイルに指定されているデータソースのjndi-name
に一致する必要があります。データソースの作成と使用の詳細は、『Oracle Containers for J2EEサービス・ガイド』を参照してください。
<replication-policy>
タグの属性を使用すると、レプリケートするデータおよびデータをレプリケートする頻度を指定できます。
trigger
属性は、レプリケーションを行う時期を指定します。表3-2では、この属性でサポートされている値について説明しています。
scope
属性は、レプリケートするデータを指定します。表3-3では、この属性でサポートされている値について説明しています。
レプリケート先のノードの数を指定するには、<cluster>
タグのwrite-quota
属性を使用します。たとえば、次のコードでは、レプリケート・データが2つの他のノードにレプリケートされることを指定しています。
<orion-application ... > ... <cluster allow-colocation="false" write-quota="2"> <replication-policy trigger="onShutdown" scope="allAttributes"/> <protocol> <peer> <opmn-discovery/> </peer> </protocol> </cluster> </orion-application>
デフォルトは1です。
推奨事項: 2つのノードを含むアクティブ/アクティブ・トポロジでは、write-quota
を1
に設定し、データが他方のノードにレプリケートされるようにします。
3つ以上のノードを含むトポロジでは、write-quota
を2
以上に設定し、データが少なくともその他2つのノードにレプリケートされるようにします。
トポロジ内のノードすべてにデータをレプリケートするには、write-quota
をトポロジ内のノードの合計数に設定します。そのノードで別のインスタンスが実行されていると、同じノードに書込みが行われる場合があります。
データベースにレプリケートする場合、write-quota
属性は使用されません。
アクティブ/アクティブ・トポロジのインスタンスのステータスをチェックするには、トポロジ内の任意のインスタンスから次のコマンドを実行します。
> cd ORACLE_HOME/opmn/bin > opmnctl @cluster status
opmnctl
コマンドを使用すると、トポロジ内のコンポーネントを起動および停止できます。トポロジ内のすべてのOracle Application Serverインスタンスのコンポーネントを起動および停止するには、opmnctl
で@cluster
パラメータを使用する必要があります。opmnctl
コマンドは、トポロジ内の任意のインスタンスから実行できます。
たとえば、トポロジ内のすべてのインスタンスのOracle HTTP Serverコンポーネントを起動するには、トポロジ内の任意のインスタンスから次のコマンドを実行します。
> cd ORACLE_HOME/opmn/bin > opmnctl @cluster startproc ias-component=HTTP_Server
アプリケーションは、Application Server Controlコンソールを使用するか、コマンドラインから実行するコマンドを使用してデプロイできます。
アプリケーションをクラスタ内のすべてのインスタンスにデプロイする場合は、次のようにadmin_client.jar
を使用できます。
> cd ORACLE_HOME/j2ee/home > java admin_client.jar deployer:cluster:opmn://<host>:<opmnPort>/<oc4jInstanceName> <adminID> <adminPassword> -deploy -file <pathToArchiveFile> -deploymentName <appName>
<host>
には、クラスタ内の任意のホストを指定できます。
<opmnPort>
には、OPMNがリスニングするポートを指定します。このポートは、opmn.xml
ファイルに記載されています。
<oc4jInstanceName>
には、アプリケーションのデプロイ先のOC4Jインスタンスを指定します。たとえば、"home"インスタンスにデプロイするには、home
を指定します。
<adminID>
と<adminPassword>
には、管理者のIDとパスワードを指定します。通常、adminIDはoc4jadmin
です。
<pathToArchiveFile>
には、デプロイするEAR、WAR、またはJARファイルへのフルパスを指定します。
<appName>
には、アプリケーション名を指定します。
デプロイについては、コマンドラインで指定できるオプションが他にもあります。詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。
インスタンスを既存のトポロジに追加する手順は次のとおりです。
インスタンスをトポロジから削除する手順は次のとおりです。
Oracle HTTP Server内のmod_oc4jモジュールは、リクエストをOC4Jプロセスに委任します。Oracle HTTP ServerがOC4Jに対するURLのリクエストを受信すると、Oracle HTTP Serverではそのリクエストをmod_oc4jモジュールにルーティングします。mod_oc4jモジュールでは、このリクエストをOC4Jプロセスにルーティングします。OC4Jプロセスで障害が発生すると、OPMNはその障害を検出し、mod_oc4jは、障害の発生したOC4Jプロセスが再起動されるまでそのOC4Jプロセスにリクエストを送信しません。
mod_oc4jは、OC4Jプロセスに対するリクエストをロード・バランシングするように構成できます。Oracle HTTP Serverでは、mod_oc4jを経由して、各種のロード・バランシング・ポリシーをサポートしています。ロード・バランシング・ポリシーは、ネットワーク・トポロジやホスト・マシンの性能に応じて、パフォーマンス上のメリットだけでなく、フェイルオーバーや高可用性も実現します。
mod_oc4jには、必要なルーティングのタイプと複雑さに応じて、異なるロード・バランシング・ルーティング・アルゴリズムを指定できます。ステートレス・リクエストは、mod_oc4j.conf
で指定されたアルゴリズムに基づいて使用可能な宛先にルーティングされます。ステートフルHTTPリクエストは、セッションIDを使用して前回のリクエストを処理したOC4Jプロセスに転送されます。ただし、mod_oc4jがOPMNとの通信によってそのプロセスが使用不可であると判断した場合を除きます。その場合、mod_oc4jは、指定されたロード・バランシング・プロトコルに従って使用可能なOC4Jプロセスにそのリクエストを転送します。
デフォルトでは、すべてのOC4Jインスタンスに同じ重みが付けられており(すべてのインスタンスに1の重みが付けられている)、mod_oc4jではラウンド・ロビン方法を使用して、リクエストの転送先のOC4Jインスタンスを選択します。OC4Jインスタンスの重みは、トポロジ内の他の使用可能なOC4Jインスタンスの重みに対する比率として扱われ、インスタンスが処理するリクエストの数が定義されます。リクエストが確立済のセッションに属する場合、mod_oc4jでは、そのセッションを開始したのと同じOC4Jインスタンスおよび同じOC4Jプロセスにそのリクエストを転送します。
mod_oc4jのロード・バランシング・オプションでは、リクエストの送信先OC4Jインスタンスを判断するとき、OC4Jインスタンス上で実行されているOC4Jプロセスの数を考慮しません。OC4Jインスタンスの選択は、インスタンスに対して構成済の重みと、その可用性に基づいて行われます。
mod_oc4jロード・バランシング・ポリシーを変更するには、ORACLE_HOME/Apache/Apache/conf/mod_oc4j.conf
ファイル内のOc4jSelectMethod
ディレクティブとOc4jRoutingWeight
ディレクティブを設定します。
mod_oc4j.conf
ファイルの<IfModule mod_oc4j.c>
セクションで、Oc4jSelectMethod
ディレクティブを表3-4に示す値のいずれかに設定します。Oc4jSelectMethod
ディレクティブをroundrobin:weighted
またはrandom:weighted
に設定した場合は、Oc4jRoutingWeight
ディレクティブも設定して重みを指定します(次の手順を参照)。
ルーティング・アルゴリズムを選択する際のヒントについては、「mod_oc4jのロード・バランシング・アルゴリズムの選択」を参照してください。
例:
Oc4jSelectMethod random:local
メトリックベースのロード・バランシングの設定方法の詳細は、『Oracle HTTP Server管理者ガイド』の付録「mod_oc4jを使用したロード・バランシング」を参照してください。
Oc4jSelectMethod
ディレクティブを重みベースの方法(つまりroundrobin:weighted
またはrandom:weighted
)に設定した場合は、Oc4jRoutingWeight
ディレクティブも設定して重みを指定します。Oc4jRoutingWeight
の構文は次のとおりです。
Oc4jRoutingWeight
hostname
weight
Oc4jRoutingWeight
ディレクティブを設定しない場合は、デフォルトの重みの1が使用されます。
例: 3つのインスタンス(A、BおよびC)で構成されるトポロジがあり、BとCがAの2倍のリクエストを受信するように設定するには、すべてのインスタンスに対して次のディレクティブを設定します。
Oc4jSelectMethod roundrobin:weighted Oc4jRoutingWeight hostB 2 Oc4jRoutingWeight hostC 2
hostAのOc4jRoutingWeight
の設定はオプションです。指定しない場合はデフォルト値の1が使用されるためです。
> opmnctl @cluster restartproc ias-component=HTTP_Server
mod_oc4jで使用するロード・バランシング・オプションを決定する際は、次のガイドラインが役に立ちます。
JMSの高可用性の構成方法の詳細は、『Oracle Containers for J2EEサービス・ガイド』の第4章「Oracle Enterprise Messaging Serviceの使用」を参照してください。
表3-5は、Oracle HTTP ServerおよびOC4Jにおける高可用性機能の要約を示しています。
EJBクラスタリングを有効にすると、中間層OracleAS ClusterのOC4Jインスタンス間のJNDIネームスペースのレプリケーションも有効になります。1つのOC4Jインスタンス内のJNDIネームスペースへの新規バインドは、中間層OracleAS Cluster内の他のOC4Jインスタンスに伝播されます。再バインドとアンバインドはレプリケートされません。
このレプリケーションは、各OracleAS Cluster(OC4J)の有効範囲外で行われます。つまり、OC4Jインスタンス内の複数のOracleAS Cluster(OC4J)は、同じレプリケート済JNDIネームスペースへの可視性を持ちます。
JNDIの詳細は、『Oracle Containers for J2EEサービス・ガイド』を参照してください。
EJBクライアント・ルーティングでは、Oracle HTTP ServerとサーブレットおよびJSP間でmod_oc4jが提供するルーティング機能は、EJBクラスによって実行されます。クライアントは、Remote Method Invocation(RMI)プロトコルを使用してEJBを起動します。RMIプロトコル・リスナーは、RMI構成ファイルrmi.xml
によってOC4Jインスタンスごとに設定されます。これはWebサイト構成とは別です。EJBクライアントとOC4Jツールは、構成されたRMIポートを使用してOC4Jサーバーにアクセスします。OPMNによって、RMIリスナーが使用できる一連のポートが指定されます。
EJBルックアップで「opmn:ormi://
」接頭辞文字列を使用すると、クライアントは割り当てられたRMIポートを自動的に取得します。ロード・バランシングとクライアント・リクエスト・ルーティングは、使用可能な様々なOC4Jプロセスを選択するOPMNによって提供されます。このロード・バランシングに使用されるアルゴリズムは、ランダム・アルゴリズムです。高可用性を確保するために、カンマで区切られた複数のOPMN URLを使用できます。
Oracle Application Server Java Object Cacheでは、OC4Jにデプロイされたアプリケーションに対する高可用性ソリューションとして機能する分散キャッシュを提供します。Java Object Cacheは、あらゆるJavaプラットフォーム上のあらゆるJavaアプリケーションで使用可能なJavaオブジェクトのインプロセス・キャッシュです。これにより、アプリケーションで、複数のリクエストおよびユーザー間でオブジェクトを共有し、複数のプロセス間でオブジェクトのライフサイクルを調整することが可能になります。
Java Object Cacheは、同じOracleAS Cluster(OC4J)、Oracle Application Serverインスタンスまたは全般的なOracle Application Server Clusterに属していないプロセスも含めた、OC4Jプロセス間でのデータ・レプリケーションを可能にします。
Java Object Cacheを使用すると、オブジェクトの生成元のアプリケーションがどれであるかにかかわらず、共有Javaオブジェクトがローカルにキャッシュされるため、パフォーマンスが向上します。これにより、可用性も向上します。オブジェクトのソースが使用できなくなっても、ローカルにキャッシュされたバージョンは引き続き使用できます。
Java Object Cacheの使用方法の詳細は、『Oracle Containers for J2EEサービス・ガイド』の「Java Object Cache」を参照してください。
|
![]() Copyright © 2006, Oracle. All Rights Reserved. |
|