FANは、UP
またはDOWN
イベントなどのサービス・ステータスの変更を含む、構成およびサービス・レベルの情報を他のプロセスに通知するためにOracle RACが使用する高可用性通知メカニズムです。Oracleクライアント・ドライバおよびOracle接続プールは、FANイベントに応答し、ただちに処理します。FANのUP
イベントおよびDOWN
イベントは、インスタンス、サービスおよびノードに適用できます。
たとえば、Oracle接続プールでは、FANを使用して、失敗の検出を非常に迅速に受信し、失敗後の接続を均等に分散し、失敗したコンポーネントの修復後に接続を再度均等に分散します。そのため、インスタンスのサービスが起動されると、そのリソースに作業をルーティングするためにFANイベントが即時に使用されます。インスタンスまたはモードのサービスが失敗すると、リカバリするアプリケーションを中断するために、FANイベントが即時に使用されます。
FANの重要性
アプリケーションは、次のような重要な局面で時間を浪費する可能性があります。
ソケットをクローズしないでノードが失敗した場合のTCP/IPタイムアウトの待機、およびそのIPアドレスが停止している間の後続のすべての接続の待機。
サービスが停止した場合の接続の試行。
サービス再開時に接続しない。
サーバーが停止したときのクライアントでの最後の結果の処理。
最適でないノードで作業を実行しようとする。
ソケットをクローズしないでノードが失敗した場合、I/O待機(読取りまたは書込み)でブロックされたすべてのセッションはtcp_keepalive
を待機します。この待機ステータスは、ソケットで接続されているアプリケーションの場合の典型的な状況です。最後の結果を処理するセッションの状況はさらに悪く、次のデータが要求されるまで割り込みを受信しません。FANイベントを使用すると、TCPタイムアウトを待機しているアプリケーション、障害の発生後にクライアントで最後の結果を処理するという時間の浪費、および低速なノード、停止したノードまたは使用不能なノードで作業を実行するという無駄な時間が排除されます。
クラスタの構成が変更されて、クラスタ内で状態の変更が発生した場合、Oracle RACの高可用性フレームワークは、ただちにFANイベントを発行します。アプリケーションは、データベースに対するタイムアウトおよび問題の検出を待たずに、FANイベントを受信して即時に対応できます。FANを使用すると、インフライト・トランザクションがただちに終了し、インスタンスの失敗時にクライアントに通知されます。
また、FANは、ロード・バランシング・アドバイザ・イベントも発行します。アプリケーションでFANのロード・バランシング・アドバイザ・イベントを使用して、現在、クラスタ内で最適なサービス品質を提供しているインスタンスに作業要求を割り当てることができます。
FANイベントは、次の3つの方法で使用できます。
Oracle統合クライアントを使用すると、プログラムを変更せずにアプリケーションでFANを使用できます。FANイベント用の統合クライアントには、Oracle JDBC Universal Connection Pool、ODP.NET接続プール、OCIセッション・プール、Oracle WebLogic Server Active Gridlink for Oracle RAC、OCIおよびODP.NETクライアントがあります。これには、アプリケーション・コンティニュイティまたはトランザクション・ガードを使用するアプリケーションが含まれます。FANの高可用性イベントを活用するには、統合OracleクライアントがOracle Database 10gリリース2 (10.2)以上である必要があります。プール・クライアントは、ロード・バランシング・アドバイザFANイベントを活用することもできます。
JDBCおよびOracle RAC FANアプリケーション・プログラミング・インタフェース(API)を使用するか、OCIおよびODP.NETとともにコールバックを使用してFANイベントをサブスクライブし、イベントの受信時にイベント処理アクションを実行することによって、アプリケーションはFANをプログラムで使用できます。
サーバー側のコールアウトを使用して、データベース層にFANを実装できます。
前述のリストの項目1でリストされている統合クライアントのいずれかを使用すると、DOWN
イベントでは、FAN対応クライアントが失敗したインスタンスまたはノードのセッションをそれらが再使用される前に終了するため、アプリケーション停止が最小限になります。未完了のトランザクションは終了され、ただちにアプリケーションのユーザーに通知されます。接続を要求しているアプリケーション・ユーザーは、使用可能インスタンスにのみ割り当てられます。
UP
イベントでは、サービスおよびインスタンスが起動されている場合、アプリケーションが追加のハードウェア・リソースまたは追加容量を即時に利用できるように、新しい接続が作成されます。
FANコールアウトは、サーバー側スクリプトであるか、またはFANイベントが生成されると必ず実行される実行可能ファイルです。様々なことを行うためのコールアウトを設計および構築できます。次に例を示します。
ステータス情報を記録します
リソースの起動に失敗した場合に、DBAへの通知またはサポート・チケットの発行を行います。
サービスと同じ場所に配置する必要がある外部依存アプリケーションの自動的な起動
ノードの障害などによって、ポリシー管理データベースに使用できるインスタンスの数が減少した場合、リソース・プランを変更するか、またはサービスを停止します。
必要に応じて、サービスを管理者管理データベースの優先インスタンスに自動的にフェイルバックします。
FANイベントは、Oracle Notification ServiceとOracle Streamsアドバンスト・キューイングを使用して発行され、後者はOracle Databaseの前のリリースとの下位互換性のために続行されます。発行メカニズムは、Oracle RACのインストール時に自動的に構成されます。
Oracle Net Servicesリスナーおよびグローバル・データ・サービス(GDS)は、FANイベントと統合されていることによって、リスナーおよびGDSは、障害が発生したインスタンスによって提供されているサービスを即座に登録解除でき、また、障害が発生したインスタンスに対する誤った接続リクエストの送信を回避できます。
サービスの接続時ロード・バランシングの目標にCLB_GOAL_SHORT
を指定している場合、リスナーは、接続時ロードを均等に分散する際に、ロード・バランシング・アドバイザを使用します。ロード・バランシング・アドバイザが使用可能であった場合、リスナーで使用されるメトリックはさらに詳細に制御できます。