![]() ![]() ![]() ![]() |
以下の節では、一連の Oracle CEP サーバの管理と可用性に関連する使用例と用語について説明します。
Oracle CEP マルチサーバ ドメインは、管理上の目的から論理的に接続され、共有のユーザ データグラム プロトコル (UDP) マルチキャスト アドレスおよびマルチキャスト ポートを使用して物理的に接続された、複数のサーバの集まりです。Oracle CEP マルチサーバ ドメインのあらゆるサーバが、ドメインのその他すべてのサーバを認識します。また、ドメイン内のデプロイメントに変更を加えるためのアクセス ポイントとして、いずれか 1 つのサーバを使用できます。
マルチサーバ インフラストラクチャの管理はドメイン レベルで実行されます。このため、サーバのエラー、起動、または再起動は、マルチサーバ ドメインのどのメンバーでも検出されます。マルチサーバ ドメインの各メンバーは、マルチサーバ インフラストラクチャで使用されるドメイン メンバシップについて、一貫性のある一致した認識を保持します。
複数のサーバが同じマルチサーバ ドメインに属すると見なされるには、サーバ間で同じマルチキャスト アドレスとマルチキャスト ポートおよび同じドメイン名を共有する必要があります。
マルチサーバ ドメインのサーバは均一である必要があります。たとえば、2 つのサーバの一方を IPv6 (Internet Protocol version 6) プロトコルで、他方を IPv4 プロトコルでコンフィグレーションして、同じドメインのメンバーにすることはできません。
マルチサーバ ドメインへのデプロイメントおよびマルチサーバ ドメインの管理をドメインよりも細かいレベルでサポートするために、Oracle CEP ではグループという概念を取り入れています。グループは 1 つまたは複数のサーバの集まりです。グループはドメイン内でユニークな名前を持ちます。Oracle CEP ドメイン内では、コンフィグレーション可能なグループ メンバシップを持つ任意の数のグループを共存させることができます。1 つのサーバが複数のグループのメンバーになっている場合があります。ただし、通常、この情報はユーザからは意識されません。常に存在するグループとして、以下のグループが事前定義されています。
マルチサーバ ドメインにアプリケーションをデプロイするときは、特定のグループにデプロイします。ドメイン グループまたはカスタム グループにデプロイされるアプリケーションの名前は、ドメイン内でユニークである必要があります。
アダプタおよびイベント Bean の実装において高可用性 (HA) と同等の機能を実現するために、Oracle CEP ではグループレベルおよびドメインレベルの両方で、数多くの通知 API およびメッセージング API を提供しています。これらの API を使用して、管理者による意図的な変更またはサーバ エラーのためにグループまたはドメイン メンバシップが変更された場合に通知を受け取るように、サーバをコンフィグレーションできます。同様に、これらの API を使用して個々のグループおよびドメインの両方にメッセージを送信できます。
Oracle CEP ドメインのサーバは単一のディレクトリにファイルを格納します。通常、マルチサーバ ドメイン内のサーバのディレクトリは、ドメイン ディレクトリのサブディレクトリです。また、サーバ名とドメイン名はそれぞれ、サーバ ディレクトリ名とドメイン ディレクトリ名に対応します。これは単に一般的な構造であり必須ではありませんが、わかりやすさと一貫性を保つために、この方法でドメインを設定することをお勧めします。マルチサーバ ドメインのサーバが別々のコンピュータに配置されている場合も、わかりやすさと一貫性を保つために、両方のコンピュータにディレクトリ構造をレプリケートすることをお勧めします。
次の図は、3 つのサーバがあるマルチサーバ ドメイン ディレクトリを示しています。myServer1
のコンフィグレーション ファイルから抜粋したコード例では、ドメイン ディレクトリとドメイン オブジェクトが同じ名前でコンフィグレーションされ、サーバ ディレクトリとサーバ名が同じ名前でコンフィグレーションされています。ドメイン ディレクトリは、Oracle CEP ドメインのデフォルトの場所である ORACLE_CEP_HOME
/user_projects/domains
ディレクトリにあります。
この節では、複数の Oracle CEP サーバからなる単純なマルチユーザ ドメインを作成してコンフィグレーションする方法を説明します。マルチサーバ ドメインは、カスタム グループを使用せず、事前定義されている 2 つのグループ (シングルトン グループとドメイン グループ) だけを使用してコンフィグレーションするので単純です。マルチサーバ ドメイン内にカスタム グループをコンフィグレーションする方法については、「マルチサーバ ドメインのカスタム グループのコンフィグレーション」を参照してください。
注意 : | この節では、単一のサーバからなるドメインを作成済みであり、そのドメインにサーバを追加してマルチサーバ ドメインにすると想定します。ドメイン作成の詳細については「Oracle CEP スタンドアロンサーバ ドメインの作成と更新」を参照してください。 |
以下に、マルチサーバ ドメインをコンフィグレーションする手順の概要を示します。
注意 : | Configuration Wizard ではマルチサーバ ドメインへの新規サーバの追加はサポートされていませんが、Configuration Wizard を使用して新しいスタンドアロン サーバを生成し、生成したサーバのコンフィグレーションを手動で更新することにより、サーバをマルチサーバ ドメインに追加できます。 |
「Configuration Wizard を使用した既存ドメインへの新規サーバの追加」を確認してください。
config.xml
ファイルを編集し、<cluster>
要素を追加して特定の情報を指定します。
詳細については、「マルチサーバ ドメインのサーバのコンフィグレーション」を参照してください。
Configuration Wizard を使用して既存のスタンドアロン サーバ ドメインに新しいサーバを追加し、後からそのドメインをマルチサーバ ドメインに変換します。その手順は新しいドメインを作成する手順と似ています。そのため、この節の手順は「Configuration Wizard を使用したスタンドアロンサーバ ドメインの作成」を読んでから実行してください。
Configuration Wizard は、グラフィカル モードまたはサイレント モードで使用できます。
グラフィカル モードで既存のドメインに新規サーバを追加するには、以下の手順を実行します。
注意 : アプリケーションをドメイン内のグループにデプロイすると、Oracle CEP はグループのメンバーである各サーバにアプリケーションをレプリケートします。つまり、アプリケーションでデータソースを使用しており、ドメイン内でサーバごとにデータ ソースのコンフィグレーションが異なる場合は、このデータ ソースでのデータの格納および取得は、アプリケーションを実行しているサーバによって異なります。
上のセクションで、データソース名を入力します。次に、データベース タイプ (Oracle または Microsoft SQL Server) と該当のドライバを選択します。[Browse/Append] ボタンを使用して、新しいドライバを参照することもできます。
下のセクションで、データベース名、データベース サーバをホストするコンピュータ名、ポート、およびデータベースに接続するユーザの名前とパスワードなど、このデータ ソースから接続するデータベースの詳細を入力します。この情報に基づいて、使用する JDBC 接続 URL が自動的に生成されます。
myDomain
を、ドメインの場所として C:\oracle_cep\user_projects\domains
を入力しています。[Create] をクリックします。Domain created successfully!
Domain location: C:\oracle_cep\user_projects\domains\myDomain
サイレント モードで既存のドメインに新しいサーバを追加する手順は、「サイレント モードでのドメインの作成」で説明した新しいドメインを作成する手順に似ています。違いは、silent.xml
ファイルに入力するオプションの値のみです。特に、以下の情報を入力します。
createDomain
を設定します。myDomain
と C:\oracle_cep\user_projects\domains です。myServer1
です。
「Configuration Wizard を使用した既存ドメインへの新規サーバの追加」に示した想定に基づく silent.xml ファイルは、次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<bea-installer xmlns="http://www.bea.com/plateng/wlevs/config/silent">
<input-fields>
<data-value name="CONFIGURATION_OPTION" value="createDomain" />
<data-value name="USERNAME" value="wlevs" />
<data-value name="PASSWORD" value="wlevs" />
<data-value name="SERVER_NAME" value="myServer1" />
<data-value name="DOMAIN_NAME" value="myDomain" />
<data-value name="DOMAIN_LOCATION" value="C:\oracle_cep\user_projects\domains" />
<data-value name="NETIO_PORT" value="9102" />
<data-value name="RMI_REGISTRY_PORT" value="9104" />
<data-value name="RMI_JRMP_PORT" value="9998" />
<data-value name="KEYSTORE_PASSWORD" value="my_keystore_password" />
<data-value name="PRIVATEKEY_PASSWORD" value="my_privatekey_password" />
<data-value name="DB_URL" value="jdbc:bea:oracle://localhost:1521:XE" />
<data-value name="DB_USERNAME" value="db_user" />
<data-value name="DB_PASSWORD" value="db_password" />
</input-fields>
</bea-installer>
マルチサーバ ドメインのサーバをコンフィグレーションするには、各メンバー サーバの config.xml
ファイルを更新します。具体的には、ルート要素である <config>
の子要素 <cluster>
を追加します。<cluster>
の子要素として <server-name>
、<multicast-address>
、<identity>
、および <enabled>
を含めます。要素の順序は重要です。詳細については、「<cluster> 要素の順序とその他の子要素」を参照してください。可能なコンフィグレーションの例を以下に示します。
<config>
<domain>
<name>myDomain</name>
</domain>
<cluster>
<server-name>myServer1</server-name>
<multicast-address>239.255.0.1</multicast-address>
<identity>1</identity>
<enabled>true</enabled>
</cluster>
...
</config>
例では、サーバは myDomain
というドメインに属しています。
マルチサーバ ドメインの各サーバについて、<multicast-address>
要素に同じ値が設定されている必要があります。ただし、<identity>
および <server-name>
要素は、マルチサーバ ドメインのサーバごとに異なる必要があります。
<multicast-address>
要素は必須です。ただし、マルチサーバ ドメインのすべてのサーバを同じコンピュータでホストする場合は例外です。その場合、<multicast-address>
要素は省略可能で、マルチサーバ ドメインにはコンピュータの IP アドレスに基づくマルチキャスト アドレスが自動的に割り当てられます。サーバを別々のコンピュータでホストする場合は、ドメインのローカル アドレスを適切に指定する必要があります。239.255.X.X
形式のアドレスを使用することをお勧めします。自動的に割り当てられるマルチキャスト アドレスは、この形式に基づいています。
<identity>
要素はサーバの ID を識別し、1 から INT_MAX までの整数である必要があります。Oracle CEP では、マルチサーバの操作時にサーバ ID の数値を比較します。ID の値が最も小さいサーバがドメイン コーディネータになります。マルチサーバ ドメイン内の各サーバの ID は必ず異なる値にする必要があります。サーバの ID が重複している場合、マルチサーバ操作の結果は予測できません。
<cluster>
の <server-name>
子要素には、サーバのユニークな名前を指定します。Visualizer でコンソールにサーバを表示するときに、この要素の値が使用されます。この要素を設定しない場合、デフォルト値は Server-<identity>
です。
最後に、マルチサーバ ドメイン内のサーバのクラスタ化はデフォルトで無効になっているため、<enabled>
要素を使用してこの機能を明示的に有効にする必要があります。
myServer2
という 2 つ目のサーバを myDomain
マルチサーバ ドメインにコンフィグレーションする例を以下に示します。ID が 2 である点に注意してください。
<config>
<domain>
<name>myDomain</name>
</domain>
<cluster>
<server-name>myServer2</server-name>
<multicast-address>239.255.0.1</multicast-address>
<identity>2</identity>
<enabled>true</enabled>
</cluster>
...
</config>
マルチサーバ関連の他のコンフィグレーション要素および子要素の順序の要件については、「<cluster> 要素の順序とその他の子要素」の概要説明を参照してください。
マルチサーバ ドメインで均一なサーバの集まり全体にアプリケーション ロジックを簡単にレプリケートできない場合があります。さまざまな価格設定エンジンの提示価格から最適価格を判定するアプリケーションや、値の位置がしきい値を超えた場合に警告を送信するアプリケーションは、このタイプのアプリケーションの例です。このような場合、アプリケーションは冪等ではなく、1 回だけ値を算出したり、単一のイベントを送信したりする必要があります。モニタ アプリケーションや HTTP pub-sub サーバなど、その他の場合は、アプリケーションはシングルトンの性質を持ちます。
もっと複雑な例として、次の 2 つのアプリケーションを使用するドメインがあるとします。strategies
アプリケーションで複数の方法を使用してデリバティブ商品のさまざまな価格を計算し、selector
アプリケーションに計算結果を送信します。selector
アプリケーションは strategies
アプリケーションの結果から提示されるさまざまな選択肢から最適価格を選択します。フォールト トレランスを実現するために strategies
アプリケーションをレプリケートできます。しかし、selector
アプリケーションは、最適価格を決定するために状態を保持できる必要があります。そのため、selector
アプリケーションは双方向ではレプリケートできません。
これらの理由により、完全に均一ではない複数のサーバをドメインでサポートする必要があります。このコンフィグレーションのためにカスタム グループを作成します。
グループをコンフィグレーションするには、グループの各メンバーの config.xml
ファイルを更新します。そのためには、<cluster>
の <groups>
子要素をまだ追加していない場合は追加し、グループ名を <groups>
要素の値として指定します。サーバが複数のグループのメンバーである場合は、<groups>
要素に複数のグループ名を含めることができます。カンマを使用して複数のグループ名を区切ります。<groups>
要素は省略可能です。サーバ コンフィグレーションにこの要素が含まれていない場合、そのサーバはデフォルト グループ (ドメインおよびシングルトン) のメンバーになります。
例として、myServer1
、myServer2
、および myServer3
という 3 つのサーバを作成したとします。myServer1
は selector
グループのメンバーに、myServer2
と myServer3
は strategy
グループのメンバーにします。config.xml
ファイルから抜粋した各サーバに対応するコード例を以下に示します。
<config>
<domain>
<name>myDomain</name>
</domain><cluster>
<server-name>myServer1</server-name>
<multicast-address>239.255.0.1</multicast-address>
<identity>1</identity>
<enabled>true</enabled>
<groups>selector</groups>
</cluster>
...
</config>
<config>
<domain>
<name>myDomain</name>
</domain><cluster>
<server-name>myServer2</server-name>
<multicast-address>239.255.0.1</multicast-address>
<identity>2</identity>
<enabled>true</enabled>
<groups>strategy</groups>
</cluster>
...
</config>
<config>
<domain>
<name>myDomain</name>
</domain><cluster>
<server-name>myServer3</server-name>
<multicast-address>239.255.0.1</multicast-address>
<identity>3</identity>
<enabled>true</enabled>
<groups>strategy</groups>
</cluster>
...
</config>
マルチサーバ関連の他のコンフィグレーション要素および子要素の順序の要件については、「<cluster> 要素の順序とその他の子要素」の概要説明を参照してください。
マルチサーバ ドメインのサーバを起動するには、起動スクリプトを実行して各サーバを個別に起動します。これは、スタンドアロン サーバ ドメインのサーバを起動する方法と同じです。詳細については、「サーバの停止と起動」を参照してください。
マルチサーバ ドメインのカスタム グループをコンフィグレーションしなかった場合、単純にすべてのサーバは事前定義されたドメイン グループ (マルチサーバ ドメイン内のすべてのサーバが含まれる) とシングルトン グループ (メンバーのサーバごとに 1 つ) のメンバーになります。つまり、マルチサーバ ドメインに 3 つのサーバが存在する例では、シングルトン グループも 3 つになります。
これに対し、マルチサーバ ドメインにカスタム グループをコンフィグレーションした場合、サーバは事前定義されたグループのメンバーであると同時に、コンフィグレーションされたグループのメンバーにもなります。
マルチサーバ ドメインにアプリケーションをデプロイする場合、通常はユーザがターゲット グループを指定すると、Oracle CEP によって、そのグループで実行されている一連のサーバにアプリケーションがデプロイされます。Oracle CEP は、実行中のサーバに基づくグループ メンバシップを動的に維持します。つまり、グループ内で新しいサーバが起動されると、Oracle CEP によって、新しいサーバに対して適切なデプロイメント セットが自動的に伝播されます。
例として、「単純なマルチサーバ ドメインの作成とコンフィグレーション」でコンフィグレーションした単純なマルチサーバ ドメインについて説明します。myServer1
のみが起動済みであり、myServer1
と myServer2
が属するドメイン グループにアプリケーションがデプロイされると想定します。その場合、マルチサーバ ドメインの myServer1
のみが起動済みであるため、アプリケーションは myServer1
のみにデプロイされます。その後 myServer2
が起動されると、Oracle CEP によってアプリケーションのデプロイメントが自動的に myServer2
にレプリケートされ、伝播されます。ユーザが明示的にアプリケーションをデプロイする必要はありません。
デプロイメントの伝播は、サーバに必要なデプロイメントがない場合にのみ行われます。サーバにローカル デプロイメントがすでに存在する場合は、そのデプロイメントが使用されます。つまり、マルチサーバ ドメインの 1 つのサーバでデプロイメントを変更しても、他のサーバにそのデプロイメントがすでに存在する場合は、変更が他のサーバに自動的に伝播されることはありません。これは、アプリケーションの jar ファイルをコピーして手動でデプロイメントをコンフィグレーションした場合は、同じデプロイメントのわずかに異なるバージョンが他のサーバに存在する可能性があることを意味します。
1 つのアプリケーションについて、別のサーバで異なるコンフィグレーションが必要な場合は、システム プロパティを使用するのが現時点での最適な方法です。
Deployer コマンドライン ツールの詳細なリファレンス情報については、「Deployer コマンドライン リファレンス」を参照してください。
アプリケーションをデプロイするときにグループを指定しないと、アプリケーションは、デプロイ先として指定したサーバのみで構成されるシングルトン サーバ グループにデプロイされます。これは単一サーバ ドメインの標準仕様ですが、マルチサーバ ドメインにも当てはまります。
注意 : | 2.0 ドメインをマルチサーバ ドメインで実行できるようにアップグレードした場合、アプリケーションをデプロイすると、すべてのアプリケーションがシングルトン サーバ グループにデプロイされます。 |
次の例は、シングルトン グループへのデプロイ方法を示しています。コマンドに -group
オプションを指定していない点に注意してください。
prompt> java -jar wlevsdeploy.jar -url http://ariel:9002/wlevsdeployer -install myapp_1.0.jar
この例では、myapp_1.0.jar
アプリケーションは単一サーバで構成されるシングルトン サーバ グループにデプロイされます。サーバを実行しているホストは ariel
、リスン ポートは 9002
です。マルチサーバ ドメインで他のサーバがドメイン グループのメンバーである場合、アプリケーションは他のサーバにデプロイされません。
ドメイン グループは常に存在する有効化されたグループであり、ドメイン内のすべてのサーバで構成されます。言い換えると、すべてのサーバは常にドメイン グループのメンバーです。ただし、ドメイン グループに対してもアプリケーションを明示的にデプロイする必要があります。その主な理由は、使用方法のわかりやすさと一貫性を保つためです。
アプリケーションをドメイン グループに明示的にデプロイすると、この均一な環境のすべてのサーバにこのデプロイメントが確実に伝播されます。
ドメイン グループにデプロイするには、-group all
オプションを使用します。次の例は、ドメイン グループへのデプロイ方法を示しています。
prompt> java -jar wlevsdeploy.jar -url http://ariel:9002/wlevsdeployer -install myapp_1.0.jar -group all
この例では、ポート 9002
をリスンしているホスト ariel
上のドメイン グループのすべてのサーバに myapp_1.0.jar
アプリケーションがデプロイされます。
カスタム グループにデプロイするには、デプロイ コマンドの -group
groupname
オプションを使用します。
次の例では、「マルチサーバ ドメインのカスタム グループのコンフィグレーション」の説明に従ってマルチサーバ ドメインがコンフィグレーションされていると想定しています。
次の例は、strategies_1.0.jar
というアプリケーションを strategygroup
にデプロイする方法を示しています。
prompt> java -jar wlevsdeploy.jar -url http://ariel:9002/wlevsdeployer -install strategies_1.0.jar -group strategygroup
このコマンドでは、マルチサーバ ドメインのコンフィグレーションに基づいて、strategygroup
グループのメンバーである myServer2
と myServer3
にアプリケーションがデプロイされます。
次の例は、selector_1.0.jar
というアプリケーションを selectorgroup
にデプロイする方法を示しています。
prompt> java -jar wlevsdeploy.jar -url http://ariel:9002/wlevsdeployer -install selector_1.0.jar -group selectorgroup
このコマンドでは、マルチサーバ ドメインのコンフィグレーションに基づいて、selectorgroup
グループの単一メンバーである myServer1
のみにアプリケーションがデプロイされます。
どちらのコマンドも同じサーバ (ホスト ariel
、リスン ポート 9002
のサーバ) に対して実行されている点に注意してください。ただし、デプロイ コマンドではドメイン内の任意のサーバを指定できます。指定するサーバがアプリケーションのデプロイ先のグループに属していなくてもかまいません。
アクティブ/アクティブ システムでは、アプリケーションは複数のサーバに均一にデプロイされ、アクティブに実行されます。
しかし、均一にデプロイされたこれらのアプリケーションからコーディネータ (リーダー) となるプライマリ アプリケーションを選択する必要が生じる場合があります。この場合、コーディネータ アプリケーションから発生したイベントは保持され、EPN の次のコンポーネントに渡されます。セカンダリ サーバの結果は削除されます。ただし、コーディネータにエラーが発生した場合は、いずれかのセカンダリ サーバが新しいコーディネータとして選択される必要があります。
アプリケーションでこれを実現するには、一般的にイベント シンクのロールに属するアダプタまたはイベント Bean が、com.bea.wlevs.ede.api.cluster.GroupMembershipListener
インタフェースを実装する必要があります。それにより、マルチサーバ ドメイン グループのメンバシップの変更をイベント シンクがリスンできるようになります。実行時には、メンバシップに変更が発生するたびに、Oracle CEP が onMembershipChange
コールバック メソッドを自動的に呼び出します。
onMembershipChange(Server localIdentity, Configuration groupConfiguration);
この onMembershipChange
コールバック メソッドの実装では、イベント シンクが Server
オブジェクト (localIdentity
) を使用してそのサーバがリーダーかどうかを検証します。この検証は、localIdentity
と、2 番目のパラメータ groupConfiguration
での Configuration.getCoordinator()
の実行結果を比較して行うことができます。また、このパラメータを使用すると、Configuration.getMembers()
を実行して、現在のグループのメンバーが何であるかをサーバに知らせることもできます。
メンバーがコーディネータである場合にのみイベントを保持するために、イベント シンクはグループのメンバシップに変更があるたびに新しい Server
ID を取得する必要があります。グループ メンバシップに変更が発生するのは、たとえば、グループ内の別のサーバでエラーが発生し、そのサーバがコーディネータではなくなった場合です。
グループに対する変更だけではなくドメイン全体に対するメンバシップの変更をリスンするための、同様のインタフェース com.bea.wlevs.ede.api.cluster.DomainMembershipListener
があります。
サーバ コンフィグレーションの XSD スキーマで指定しているように、config.xml ファイルで使用する <cluster> 要素の子要素の順序は重要です。誤った順序で要素を指定すると、エラーが発生する可能性があります。子要素を指定トする順序を以下に示します。まだ説明していない要素については、この節の終わりを参照してください。
config.xml
ファイルの <cluster>
要素のいくつかの子要素 (特に<server-name>
、<multicast-address>
、<identity>
、<groups>
、および<security>
) については、これまでの節で説明しました。
この節では、その他の子要素について簡単に説明します。<cluster>
要素の説明を含む、config.xml ファイルの XSD スキーマ全体については、サーバ コンフィグレーションの XSD スキーマを参照してください。
マルチサーバ ドメインをさらに詳細にコンフィグレーションするには、config.xml
の <cluster>
要素に省略可能な以下の子要素を追加できます。
質問 : マルチサーバ ドメインにアプリケーションをデプロイすると、約 30 秒後に Oracle CEP によってアプリケーションが停止されます。
回答 : マルチサーバ ドメインをホストしている同一コンピュータ上に複数の VPN ソフトウェア パッケージをインストールしていないか確認してください。
![]() ![]() ![]() |