Oracle RACおよびData Guard環境でインスタンスとデータベースの高速フェイルオーバーおよびスイッチオーバーの効果を最大化するには、高速接続フェイルオーバーを構成する必要があります。高速接続フェイルオーバーを使用すると、データベース・サービスが使用不可能になった場合に、クライアント(中間層アプリケーションまたはデータベースに直接接続する任意のプログラム)を迅速かつシームレスに使用可能なデータベース・サービスにフェイルオーバーできます。
クライアント・フェイルオーバー機能は、Oracleデータベースの各リリースに合せて拡張されているため、クライアントが様々な停止状態に対応するのに必要な時間は、リリースごとに変化します。特定の状況では、フェイルオーバーに必要とされる時間は、TCP/IPのネットワーク・タイムアウト時間に直接依存します。
表2-9に、クライアント・フェイルオーバー機能の使用時の一般的な待機時間を示します。
表2-9 クライアント・フェイルオーバーの一般的な待機時間
Oracle Databaseのリリース | クライアント・タイプ | サイト障害 | RACノード障害 | 非RACインスタンス障害 | RACインスタンス障害 |
---|---|---|---|---|---|
8.0、8i、9i |
すべて |
TCPタイムアウト |
TCPタイムアウト |
数秒〜数分脚注1 |
数秒 |
10gリリース1(10.1) |
JDBC |
TCPタイムアウト |
数秒 |
数秒〜数分1 |
数秒 |
10gリリース1(10.1) |
OCI |
TCPタイムアウト |
TCPタイムアウト |
数秒〜数分1 |
数秒 |
10gリリース2(10.2) 11gリリース1(11.1) |
JDBC |
数秒 |
数秒 |
数秒 |
数秒 |
10gリリース2(10.2) 11gリリース1(11.1) |
OCI |
数秒脚注2 |
数秒 |
数秒 |
数秒 |
脚注1 RACインスタンス以外の障害に必要とされる待機時間は、スタンバイ・データベースをプライマリ・データベースとしてアクティブ化する時間と、クライアントが接続を確立する時間によって決定されます。
脚注2 TCPタイムアウトに等しい停止が発生するODP.NETクライアントを除きます。
注意: FANを利用できないクライアントは、次に示すように、タイムアウトとアプリケーション再試行を構成することによって、高速フェイルオーバーを実現することができます。
|
クライアント・フェイルオーバーを構成するには、次の各項に示すベスト・プラクティスを使用します。
関連項目: MAAホワイト・ペーパー『Client Failover Best Practices for Highly Available Oracle Databases』(http://www.oracle.com/technology/deploy/availability/pdf/MAA_WP_10gR2_ClientFailoverBestPractices.pdf ) |
TCP/IPのネットワーク・タイムアウトを原因とする遅延は、高速接続フェイルオーバーを使用することでJDBCクライアントとOCIクライアントの両方で抑止できます。高速接続フェイルオーバーでは、スタンバイ・データベースがプライマリ・ロールに移行するときに、スタンバイ・データベース上のトリガーがDB_ROLE_CHANGE
システム・イベントによって起動されます。トリガーは、新しいプライマリでデータベース・サービスが利用可能であり、停止したクライアントがTCPタイムアウトから脱したことをクライアントに通知するパブリッシャ・プログラムをコールします。
JDBCクライアントでは、次のベスト・プラクティスに従います。
JDBCクライアントで高速接続フェイルオーバーを有効化するため、DataSource
プロパティのFastConnectionFailoverEnabled
をTRUE
に設定します。
JDBCクライアントを構成して、クラスタ内の各ノードのVIPアドレスが記載された、既存のサービスに接続するためのアドレス・リストを含む接続記述子を使用します。
Oracle Notification Service(ONS)デーモンがクライアントで必要とされることのないように、JDBCクライアントでリモートONSサブスクリプションを構成します。
OCIクライアントでは、次のベスト・プラクティスに従います。
OCIクライアントで高速アプリケーション通知(FAN)を有効化するため、OCI_EVENTS
パラメータで環境を初期化します。
OCIクライアント・アプリケーションをスレッド・ライブラリにリンクします。
AQ_HA_NOTIFICATIONS
パラメータをTRUE
に設定し、サービスで透過的アプリケーション・フェイルオーバー(TAF)属性を構成します。
Oracle RACデータベースのクライアント・フェイルオーバーの場合は、次のベスト・プラクティスを使用します。
Oracle Enterprise Managerを使用してサービスを作成します。
Oracle RAC ONS構成にクラスタ内のすべてのホストを追加します。
Data Guard環境でクライアント・フェイルオーバーに構成するプロセスは、次の一般的な作業から構成されています。
サービス再配置: プライマリ・アプリケーションがデータベースに接続するために使用するデータベース・サービスは、プライマリ・データベース上でのみアクティブである必要があります。フェイルオーバーまたはスイッチオーバーの際には、このサービスは、新しいプライマリ・データベースに自動的に移行され、元のプライマリ・データベース上では停止される必要があります。
クライアント通知: フェイルオーバーが完了して新しいプライマリ・データベース上でサービスが利用可能になったら、アプリケーションに対して、フェイルオーバーが発生したことが通知され、接続が新しいプライマリ・データベースに移行される必要があります。
効率的な再接続: セッションが移行されたら、新しい接続はただちに新しいプライマリ・データベースに配置される必要があります。利用できないホストやネットワークのタイムアウトを待機するためにクライアントを停止しないでください。
多数の接続があるアプリケーションのフェイルオーバー・プロセスにより、ログイン・ストームが発生することがあります。ログイン・ストームとは、データベース・インスタンスへの接続数が急激に増加し、CPUリソースを消費しつくしてしまうことです。CPUリソースが枯渇すると、アプリケーション・タイムアウトとアプリケーション・レスポンス時間が増加する可能性が高くなります。
ログイン・ストームを制御する手順:
ログイン・ストームを制御する主要な方法は、Oracleリスナーの接続速度リミッタ機能を実装することです。この機能は、1秒に処理できる接続の数を制限します。接続速度を低下させることで、CPUリソースが利用可能な状態に維持され、システムが無反応になりません。
Oracle Databaseに共有サーバー運用を構成します。
接続速度リミッタを実装する他、一部のアプリケーションでは、Oracle Databaseに共有サーバー運用を構成することによって、ログイン・ストームを制御することができます。共有サーバーを使用すると、フェイルオーバー時間に作成する必要があるプロセスの数が大幅に減少します。
関連項目: 共有サーバー運用の構成と制御の詳細は、『Oracle Database管理者ガイド』を参照してください。 |
中間層接続プールの最大接続数を調整します。
ご使用のアプリケーションの中間層でそうした機能を利用できる場合、中間層接続プールの最大接続数を調整することによって接続数を制限してみます。