この章では、Oracle Data Integratorコンポーネントについて高可用性の観点から説明し、高可用性トポロジの設定手順を示します。この章の各項では、高可用性を備えたデプロイメントの設計に重要な単一インスタンスの概念について概要を説明します。
この章の内容は次のとおりです。
注意: 高可用性の概要および手順の詳細は、高可用性ガイドを参照してください。 |
Oracle Data Integratorのランタイム・エージェントは、統合プロセスを管理します。Oracle Data Integratorエージェントは、リポジトリに格納されているシナリオに従って統合ジョブを実行する、本番構成にデプロイされたコンポーネントです。
Oracle Data Integratorエージェントは、各シナリオ実行インスタンスをセッションとして処理します。各セッションは、エージェントのJavaプロセスの別のスレッドとしてエージェント内に存在します。
エージェントには、実行するセッションに関する非常に基本的な情報が格納されます。ほとんどのセッション・データは、リポジトリに格納されます。エージェントでシナリオが実行される際、エージェントは、リポジトリ内にこのシナリオのインスタンスに対応するセッションを作成します。エージェントは、リポジトリからこのセッションの各タスクを読み取り、それを処理して、リポジトリに結果(リターン・コード、メッセージ、および処理にかかった時間や処理された行の数などのタスク・メトリック)を書き込みます。
リポジトリは、2つのデータベース・スキーマで構成されています。1つはマスター・リポジトリを含み、もう1つは作業リポジトリを含みます。マスター・リポジトリには、トポロジとセキュリティに関連するすべての情報(ソース・データ・サーバー定義、ターゲット・データ・サーバー定義、ユーザーの資格証明など)が含まれます。作業リポジトリには、開発データおよびランタイム・データ(セッションやシナリオなど)が含まれます。マスター・リポジトリには、作業リポジトリへの接続情報も含まれます。作業リポジトリに接続するには、エージェントは、まずマスター・リポジトリに接続し、Oracle Data Integratorユーザーの資格証明をチェックして、作業リポジトリの接続情報を読み取ってから、作業リポジトリに接続します。通常のトポロジには、1つのマスター・リポジトリと、場合によっては複数の作業リポジトリ(テスト用と本番用など)が含まれます。
エージェントでセッションを開始する方法は次のとおりです。
別のOracle Data Integratorコンポーネント(エージェントやOracle Data Integrator Studioなど)からHTTP経由で
エージェントのWebサービス・インタフェースから
外部スケジューラまたはコマンドラインから
Agent Invocation SDKを使用してJavaプログラムから
エージェントは常に、マスター・リポジトリにアタッチされます。これは、起動時にこのマスター・リポジトリに接続し、このマスターにアタッチされた作業リポジトリのいずれかでセッションを開始できます。また、スケジューラとしても機能します。起動時、エージェントは、複数の作業リポジトリからそのエージェント用に定義されているスケジュールを読み取り、このスケジューリング情報を格納します。エージェントは、適切な作業リポジトリでこのインメモリー・スケジュールからセッションを開始できます。
エージェントは、リモートのシナリオ起動(HTTP経由)を通じて、またはロード・バランシング機能によって相互に対話できます。ロード・バランシングでは、親/子エージェントの階層を定義できます。この階層内で、親エージェントは、自分のセッションの処理を各自の子エージェントに委任できます。
エージェントは、Java EEエージェントまたはスタンドアロン・エージェントとして提供されるJavaプログラムです。Java EEエージェントは、同じJVM内の他のWebアプリケーションとともに、Java EEアプリケーション・サーバーにデプロイ可能なWebアプリケーションです。このエージェントは、このサーバーのデータ・ソースを使用して、ソース、ターゲットおよびリポジトリ・データベースに接続できます。
スタンドアロン・エージェントは、コマンドライン・インタフェースから起動されるスタンドアロンJavaプロセスとして提供されます。このスタンドアロン・エージェントは、Java EEエージェントに似ていますが、軽量コンテナに組み込まれます。主な違いは、スタンドアロン・エージェントは、Java EEエージェントとは異なり、直接JDBC接続のみを使用してソース・データ・サーバーとターゲット・データ・サーバーに接続できるというところです。
ランタイム・エージェントに実行リクエストが到着すると、エージェントは、マスター・リポジトリに接続してユーザーの資格証明をチェックしてから、作業リポジトリに接続してセッションとそのすべてのタスクを作成し、それらを「待機中」としてマークします。次に、このセッションで使用されるすべてのデータ・サーバーへの接続を作成します。
実行が開始されると、エージェントは、作業リポジトリ内の最初の実行対象タスクを読み取り、セッションとこのタスクの両方を「実行中」としてマークします。このタスクは、データ・サーバーまたはオペレーティング・システムで操作を開始できます。タスクが完了すると、エージェントは、このタスクの実行結果を作業リポジトリに書き込み、それを終了済の状態(「終了」、「警告」または「エラー」)に移動します。エラーについてはODIパッケージで処理でき、エラーが必ずしもセッションを停止させるわけではないことに注意してください。セッションが(管理対象外のエラーのため、または最終手順に達したため)完了すると、エージェントは、そのセッションを終了済の状態(「終了」、「警告」または「エラー」)に移動し、すべての接続を解放します。この時点で、セッションは終了します。
セッションは、次の場合に中断することがあります。
ユーザーがエージェントにセッションの停止をリクエストしたとき。
管理者によってエージェントが停止されたとき。選択されたエージェント停止モードに応じて、このエージェントのすべてのセッションは停止されます。
エージェントまたはリポジトリでクリティカル・イベントが発生したとき。
ユーザーまたは管理者のアクションによって停止されたすべてのセッションは、エラー状態に移動され、「停止済」としてマークされます。
エージェントまたはリポジトリがクラッシュした場合、正常に停止できなかったセッションは、リポジトリ内で実行状態として表示されます。これらのセッションは、実行中としてマークされてはいますが、どのエージェントによっても処理されないため、失効セッションと呼ばれます。エージェントが再起動され、失効セッションがリポジトリ内でこのエージェントによる実行状態を正しく反映していないことが検出されると、これらのセッションは自動的にエラー状態に移動されます。
Oracle Data Integratorは、ソース・データ・サーバーおよびターゲット・データ・サーバーとの対話時にJDBCトランザクションを使用し、セッションがエラー状態で終了した場合、オープン・トランザクションの状態は永続化されません。適切な再起動ポイントは、未完了のトランザクションを起動したタスクです。そのような再起動ポイントが特定できない場合、エラー状態にある既存のセッションを再開するのではなく、シナリオを実行することで新たなセッションを開始することをお薦めします。
デフォルトで、セッションは、実行に失敗した最後のタスク(通常は、エラー状態または待機状態のタスク)から再開されます。既存のステージング表での処理を続行し、長い時間のかかるロード・フェーズの再実行を回避するために、セッションを再開する必要がある場合もあります。その場合、ユーザーは、KM固有のトランザクション管理を考慮に入れる必要があります。一般的なガイドラインとしては、ロード・タスクでクラッシュが発生した場合、失敗したロード・タスクから再起動できます。統合フェーズでクラッシュが発生した場合、ターゲットへの統合はトランザクション内で行われるため、最初の統合タスクから再起動します。このガイドラインは、一度に1つのインタフェースにのみ適用されます。複数のインタフェースが連鎖しており、最後のインタフェースのみがコミットされている場合、トランザクションは複数のインタフェースにわたって実行されるため、それらの複数のインタフェースをすべて再起動する必要があります。
特定のタスクまたは手順から再起動する手順は次のとおりです。
オペレータ・ナビゲータで、このタスクまたは手順に移動し、それを編集して、「待機中」状態に切り替えます。
「オペレータ」ツリー・ビューで、これ以降のすべてのタスクおよび手順を「待機中」状態に設定します。
セッションを右クリックし、「再起動」をクリックします。
セッションが、待機状態の最初のタスクから再開されます。
図4-1は、エージェントの起動のサイクルを示しています。
Oracle Data Integratorエージェントの起動時、まず、マスター・リポジトリの接続情報を含む構成を読み取ります。次に、エージェントは、このマスター・リポジトリにアタッチされたそれぞれの作業リポジトリに接続し、失効セッションを削除します。失効セッションは、この特定のエージェントで実行中であると、作業リポジトリで誤って示されているセッションです。失効セッションは、これらのセッションを正常に停止できずにエージェントが停止されたことで生じる場合があります。エージェントが再起動されると、そのセッションは、失効セッションとして識別され、エラー状態に移動されます。
その時点で、エージェントは、各作業リポジトリで使用可能なスケジュールを取得して計算できます。このフェーズが終了すると、エージェントは、受信セッション・リクエストを待機してそれらの処理を開始し、さらに、スケジュールに基づいてセッションを開始できます。
Oracle Data Integratorは、Oracle Data Integratorのマスター・リポジトリおよび作業リポジトリ・データベース・スキーマに依存します。
拡張機能が使用されている場合、次のような他の依存性が存在する可能性があります。
他のOracle Data Integratorエージェント: ロード・バランシング機能が構成されており、エージェントがセッションの実行をその子エージェントに委任する必要がある場合。
このエージェントのマスター・リポジトリに対して外部パスワード記憶域が有効な場合、エージェントは、セッションの実行時にソース・データ・サーバーとターゲット・データ・サーバーに接続するためのパスワードを取得する際、資格証明ストアに依存します。
このエージェントのマスター・リポジトリに対して外部認証が有効な場合、ラインタイム・エージェントとOracle Data Integratorコンソールは、Oracle Data Integratorのユーザー・アカウントを格納するアイデンティティ・ストア・サービスに依存します。
Oracle Data Integratorシステムが適切に起動し、実行されるためには、これらのコンポーネントが使用可能である必要があります。
起動およびシャットダウン・プロセスの詳細は、『Oracle Data Integratorのインストールと構成』の次の各項を参照してください。
Java EEエージェント: 「Java EEエージェントのドメインの構成」
スタンドアロン・エージェント: 「スタンドアロン・エージェントのドメインの構成」
スタンドアロン・コロケート・エージェント: 「スタンドアロン・コロケート・エージェントのドメインの構成」
この項では、Oracle Data Integratorの構成アーティファクトについて説明します。
Java EEエージェント、スタンドアロン・エージェント、スタンドアロン・コロケート・エージェントの構成の詳細は、『Oracle Data Integratorのインストールと構成』を参照してください。
Oracle Data Integratorコンソールの構成は、このWebアプリケーションを使用して参照可能なマスター・リポジトリと作業リポジトリへの接続定義で構成されます。
接続のリストは、次のディレクトリにあるrepositories.xmlファイルに格納されます。
user_projects/domains/domainName/config/oracledi
接続は、Oracle Data Integratorコンソールの管理ページで追加、編集または削除できます。
注意: Oracle Data Integratorコンソールは、ドメイン内のOracle Data Integratorターゲットを検出するためのEnterprise Managerのエントリ・ポイントとして使用されます。検出プロセスは、次のような方法で動作します。Enterprise ManagerがOracle Data Integratorコンソールを識別します。Oracle Data Integratorコンソールの構成を使用して、Enterprise Managerは、マスター・リポジトリと作業リポジトリ、ドメイン内のおよびランタイム・エージェントを識別します。詳細は、「Oracle Data Integratorコンソールの使用」を参照してください。 |
この項では、Oracle Data Integratorのログの場所と構成について説明します。
Oracle Data Integratorのセッション実行ログは、セッションが起動される対象となった作業リポジトリに格納されます。このセッションには、処理された行の数や実行済コードなど、Oracle Data Integratorのセッションの詳細が表示されます。このログは、Oracle Data Integrator Studioのオペレータ・ナビゲータ、セッション・リストアコーディオン、または「参照」タブ(Oracle Data Integratorコンソールのランタイム→セッションの下)から表示できます。
Oracle Data Integrator Java EEエージェントにより実行される操作は、エージェント・アプリケーションが実行されているOracle WebLogic管理対象サーバーによってログに記録されます。これらのログは、次の場所にあります。
DOMAIN_HOME/servers/WLS_ServerName/logs/oracledi/odiagent.log
別のOracle WebLogic Server管理対象サーバーのログ・ファイルも、Oracle WebLogic Server管理コンソールで使用できます。ログを確認するには、admin_server_host:port
/consoleからOracle WebLogic Server管理コンソールにアクセスします。「診断-ログ・ファイル」をクリックします。
Oracle Data Integratorが実行されているOracle WebLogic管理対象サーバーの出力を確認することも重要です。この情報は次の場所に格納されています。
DOMAIN_HOME/servers/WLS_ServerName/logs/WLS_ServerName.out
さらに、管理対象サーバーのログ・ディレクトリに診断ログが作成されます。このログの粒度とロギング・プロパティは、次のファイルで変更できます。
DOMAIN_HOME/config/fmwconfig/logging/oraclediagent-logging.xml
Oracle Data Integratorスタンドアロンおよびスタンドアロン・コロケート・エージェントにより実行される操作は、エージェントを実行している軽量コンテナによってログに記録されます。デフォルトでは、ログがコンソールおよび<DOMAIN_HOME>/system_components/ODI/<AgentName>/logs/
フォルダでトレースされます。
ロギング方法およびロギング・レベルは、<DOMAIN_HOME>/config/fmwconfig/components/ODI/<AgentName>/ODI-logging-config.xml
ファイルを編集することで構成できます。
Oracle Data Integratorコンソールのロギング操作は、第4.1.5.3.2項「Java EEエージェントのログ・ファイル」で説明されているJava EEエージェントのログ・ファイルと同様に、エージェント・アプリケーションが実行されているOracle WebLogic管理対象サーバーによってログに記録されます。
この項では、Oracle Data Integratorの高可用性とフェイルオーバーに関する考慮事項について説明します。
図4-2は、2つのOracle WebLogicサーバーで2ノードのOracle Data Integratorクラスタが実行されている様子を示しています。Oracle WebLogic Serverは、それらのサーバーへの受信リクエストをロード・バランシングするOracle HTTP Serverによってフロントエンド処理されます。
この構成の主要な特性は、次のとおりです。
Oracle Data Integratorアプリケーションは、クラスタ化された2つのWebLogic Serverの管理対象サーバー上で実行されます。WebLogic Serverクラスタは、データ・ソースなど、Oracle Data Integratorで使用されるWebLogic Serverの共通アーティファクトの構成を同期化します。
スケジュールが重複して処理されることを回避するため、これらのエージェントのうち1つのみがスケジューラとして動作します。Coherenceキャッシュは、スケジューラ・サービスの一意性と移行を処理するために使用されます。
エージェントは、フェイルオーバー・スケジュール機能を提供します。たとえば、スケジューラが午前9時に起動し、4時間ごとの毎正時にジョブXが実行されるサイクルが設定されており、午前9時55分にエージェントに障害が発生したとします。この場合、サイクル内にあったジョブXは計算を実行し、続行されます。ただし、単一のジョブが午前9時に開始されるようにスケジュールされている場合、午前8時59分にエージェントに障害が発生し、午前9時1分にリカバリされると、午前9時にスケジュールされていたジョブは実行されません。
クラスタ内のOracle Data Integratorエージェントへのリクエストは、ロード・バランサまたはHTTPプロキシ・サーバー経由でルーティングされる必要があります。クライアントは、このフロント・サーバーのアドレスを使用して、クラスタ内の任意のOracle Data Integratorサーバーに透過的に接続します。このアドレスは、マスター・リポジトリ内のエージェント定義で指定されている必要があります。スケジューラ・シングルトンは、スケジュール済のすべてのセッション起動リクエストをこのアドレスにルーティングし、リクエストはクラスタにロード・バランシングされるようになります。
Oracle Data Integratorのマスター・リポジトリおよび作業リポジトリのデータベースは、データベースの障害から保護するために、Oracle Real Application Cluster (Oracle RAC)で構成されます。データベース・インスタンスの障害が発生すると、Oracle Data Integratorコンポーネントは、再接続と操作の再試行を適切に実行します。
この項では、Oracle Data Integratorの高可用性クラスタのデプロイメントおよびノード・マネージャでコンポーネントがどのようにして障害から保護されるかを説明します。また、この項では、コンポーネントの障害が発生した場合の予想される動作についても説明します。
WebLogic Serverサーバーがクラッシュすると、ノード・マネージャはこのサーバーの再起動をローカルで試行します。繰り返し再起動しても失敗する場合、WebLogic Serverインフラストラクチャは、クラスタ内の他のノードへのサーバーの移行を試行します。フェイルオーバーの発生時、他のWebLogicインスタンスは、スケジューラになり、すべての作業リポジトリのスケジュールの読取り、計算および実行を行えるようになります。Coherenceキャッシュは、スケジューラ・ライフサイクルを処理するために使用されます。ロックにより、スケジューラの一意性が保証され、イベント通知はスケジューラの移行を知らせます。エージェントが再起動され、そのスケジュールを計算する場合、進行中のスケジュール(実行サイクルの途中にあるスケジュール)が考慮されることに注意してください。これらのスケジュールは自動的に、サーバーの起動時間を過ぎても実行サイクル内で続行されます。新しいセッションが、スケジューラが停止しなかったかのようにトリガーされます。
失効セッションは、エラー状態に移動され、再起動時にはエラー状態のセッションとして扱われます。このセッションのリカバリ/再起動の説明は、第4.1.1.1項「セッションの中断」および第4.1.1.2項「セッションのリカバリ」にあります。
Oracle Data Integratorエージェントは、リソースへのアクセスの失敗、または管理対象サーバーが実行されているかどうかには関係なく発生する問題が原因で停止する場合があります。そのため、管理者がアプリケーションによって引き起こされるクラスタ・エラーを管理対象サーバーのログで監視することをお薦めします。ログ・ファイルの場所の詳細は、第4.1.5.3項「Oracle Data Integratorのログの場所と構成」を参照してください。
Oracle Data Integratorコンソールは、HTTPセッションのフェイルオーバーをサポートしていません。ユーザーは、障害の発生後、Oracle Data Integratorコンソールに再度ログインする必要があります。
Oracle Data Integratorリポジトリは、マルチ・データ・ソースの使用によりデータベースの障害から保護されます。通常、これらのマルチ・データ・ソースは、システムの初期設定時に構成されます(Oracle Fusion Middleware構成ウィザードで、インストール時にマルチプールを直接定義できます)。そして、これらのソースによって、リポジトリをホストするOracle RACデータベース・インスタンスで障害が発生した場合に、使用可能なデータベース・インスタンスとの接続が再確立されることが保証されるようになります。マルチ・データ・ソースを使用すると、Oracle RACデータベース内の複数のインスタンスへの接続を構成できます。
Java EEエージェントは、初期設定時に構成されるWebLogicマルチ・データ・ソースを使用します。スタンドアロンおよびスタンドアロン・コロケート・エージェントは、ODIエージェント・テンプレートのデプロイ時に指定されたOracle RAC JDBC接続文字列を使用します。
Oracle RACでのマルチ・データ・ソースの構成の詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの構成と管理』のOracle RACでのマルチ・データ・ソースの使用に関する項を参照してください。
Oracle Data Integratorは、リポジトリ・インスタンスが使用できなくなり、後でリストアされる場合に、進行中のセッションの続行を可能にする再試行ロジックを実装します。Oracle RACが有効な構成では、Oracle RACノードが使用可能であれば、進行中のセッション実行リクエストと受信するセッション実行リクエストの両方が処理されます。これは、接続再試行数および接続再試行の遅延時間パラメータを使用して、スタンドアロン・エージェントとJava EEエージェントの両方でサポートされます。Java EEエージェントのWebLogic Serverテンプレートを生成する場合、ユーザーはこれらのパラメータを構成できます。スタンドアロンおよびスタンドアロン・コロケート・エージェントの場合、再試行パラメータを<DOMAIN_HOME>/config/fmwconfig/components/ODI/<AGENT_NAME>/instance.properties
で構成できます。
Oracle Data Integrator StudioでOracle RACデータベースへの接続が失われた場合、最後の保存操作以降に実行されたOracle Data Integrator Studioの作業はすべて失われます。一般に、Oracle Data Integrator Studioの使用時には定期的に作業を保存することをお薦めします。
Oracle Data Integratorエージェント・クラスタで、スケジューラ・ノードであるエージェント・ノードがクラッシュすると、WebLogic Serverクラスタ内の別のノードがスケジューラ・ノードとしての役割を引き継ぎます。新しいスケジューラ・ノードは、その時点からのすべてのスケジュールを再初期化し、その時点以降のスケジュール済シナリオの実行を続行します。
ただし、元のスケジュール・ノードのクラッシュ時に、そのノードで、繰り返し可能な実行サイクルでのスケジュール済シナリオが実行されていた場合は、この状況で問題が生じます。新しいスケジューラ・ノードが引き継いだとき、元のスケジューラ・ノードで実行されていたスケジュール済シナリオは、元のスケジューラ・ノードがクラッシュした時点以降、新しいスケジューラ・ノードでその反復を続行しません。
たとえば、スケジュール済シナリオが2分間隔で10回実行を繰り返すように構成されている場合に、3回目の実行の途中で元のスケジューラ・ノードがクラッシュすると、新しいスケジューラ・ノードは、引き続きシナリオの実行を8回繰り返す必要があります。しかし、新しいスケジューラ・ノードでは、残りの分のシナリオの実行が継続されません。
この項では、高可用性トポロジを設定するために実行する必要のある高度な手順について説明します。
表4-1 高可用性トポロジの設定手順
タスク | ドキュメント |
---|---|
1. Real Application Clustersのインストール |
詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。 |
2. ミドルウェアのコンポーネントのインストール |
『Oracle Fusion Middleware Infrastructureのインストールと構成』を参照してください。 |
3. Oracle RACへのリポジトリ接続の構成 |
高可用性ガイドのOracle RACへのリポジトリ接続の構成に関する項を参照してください。 |
4. Oracle HTTP Serverのインストール |
『Oracle HTTP Serverのインストールと構成』を参照してください。 |
5. ロード・バランサの構成 |
高可用性ガイドのロード・バランサの構成に関する項および高可用性環境におけるサーバーのロード・バランシングに関する項を参照してください。 |
6. トポロジのスケール・アウト(マシンのスケール・アウト) |
高可用性ガイドのトポロジのスケール・アウト(マシンのスケール・アウト)に関する項を参照してください。 |
7. 高可用性ドメインの作成 |
高可用性ガイドのOracle RACでのアクティブなGridLinkデータソースの構成に関する項を参照してください。 |
8. 管理サーバーの高可用性の構成 |
高可用性ガイドの管理サーバーの高可用性に関する項を参照してください。 |
9. エージェントの再構成 |
「エージェントの再構成」を参照してください。 |
エージェント定義は、個々のサーバーのアドレスではなく、ロード・バランサのアドレスを指す必要があります。Oracle Data Integrator Studioに接続し、次に示すように、ロードバランサの「ホスト」および「ポート」プロパティを編集します。
ODI_HOME/oracledi/client/odi.sh
でOracle Data Integrator Studioを起動します。
Oracle Data Integrator Studioが起動したら、左側のペインで「リポジトリへの接続...」をクリックします。
ログイン・ウィンドウが表示されたら、「OK」をクリックしてログオンします。
接続されたら、左側のペインで「物理アーキテクチャ」セクションを開きます。
「エージェント」を選択し、「OracleDIAgent」を選択します。
次のプロパティを編集します。
- ホスト: ロード・バランサの仮想サーバー・アドレス。
- ポート: ロード・バランサの仮想アドレスのリスニング・ポート。
「テスト」をクリックして、エージェントの接続をテストします。
変更内容を保存して、Oracle Data Integrator Studioを終了します。