クライアント接続のフェイルオーバー

高可用性システムを構築する場合、問題が発生したときにクライアント接続が自動的に再ルーティングされるようにします。

  • クライアント・アプリケーションの接続が、そのデータベースのアクティブなデータ・インスタンスに自動的にルーティングされること。

  • データ・インスタンスへの既存のクライアント接続が失敗した場合、クライアントはデータベース内の別のアクティブなデータ・インスタンスに自動的に再接続されること。

  • クライアントが接続されているデータ・インスタンスに障害が発生した場合、そのクライアントはデータベース内の別のアクティブなデータ・インスタンスに自動的に再接続されること。

「データベースへの接続」を参照してください。

デフォルトでは、接続に失敗した場合、クライアントは自動的に別のデータ・インスタンスに再接続しようとします(可能な場合)。接続の失敗に対する準備および対応に関する、次の詳細を確認してください。

  • TTC_REDIRECTクライアント接続属性を使用して、クライアントのリダイレクト方法を定義します。デフォルトでは、自動リダイレクトのためにTTC_REDIRECTは1に設定されます。0に設定し、目的のデータ・インスタンスへの初期接続試行が失敗した場合は、エラーが返され、それ以上の接続試行が実行されません。『Oracle TimesTen In-Memory Databaseリファレンス』TTC_REDIRECTを参照してください。

  • TTC_NoReconnectOnFailoverクライアント接続属性を使用して、フェイルオーバー後にTimesTenが再接続するかどうかを定義します。デフォルトは0で、TimesTenが再接続を試行する必要があることを示します。これを1に設定すると、TimesTenは標準のクライアント・フェイルオーバーを実行しますが、再接続しません。このことは、アプリケーションが独自の接続プーリングを実行したり、フェイルオーバー後に自動的にデータベースへの再接続を試行する場合に役立ちます。『Oracle TimesTen In-Memory Databaseリファレンス』TTC_NoReconnectOnFailoverを参照してください。

  • 一般的に、ほとんどの接続の失敗はソフトウェア障害です。別のデータ・インスタンスへの再接続には時間がかかり、この間、クライアント・フェイルオーバー・プロセスが完了するまで接続は使用できません。クライアント・フェイルオーバーの処理中に接続を使用しようとすると、システム固有のエラーが生成されます。『Oracle TimesTen In-Memory Database Java開発者ガイド』自動クライアント・フェイルオーバーのJDBCサポートまたは『Oracle TimesTen In-Memory Database C開発者ガイド』自動クライアント・フェイルオーバーのODBCサポートを参照してください。

  • アプリケーション内の操作に対してシステム固有のエラーを受け取った場合、アプリケーションではすべてのリカバリ操作を、後続の各試行が短い間隔で行われるループ内に配置する必要があります。このとき、試行の合計回数が制限されます。試行回数を制限しないと、クライアント・フェイルオーバー処理が正常に完了しなかった場合に、アプリケーションの応答が停止することがあります。自動クライアント・フェイルオーバーのためにアプリケーション内に再試行ブロックを作成する方法の例は、『Oracle TimesTen In-Memory Database Java開発者ガイド』フェイルオーバー発生時のJDBCアプリケーションのアクション、または『Oracle TimesTen In-Memory Database C開発者ガイド』フェイルオーバー発生時のODBCアプリケーションのアクションを参照してください。

TCPキープ・アライブ・パラメータの構成

クライアント接続が失敗する可能性がある原因の1つは、ケーブルの切断やホストのハングまたはクラッシュなどのネットワーク障害です。クライアント接続が失われると、クライアント接続フェイルオーバーが開始されます。ただし、TCP接続が開始されている場合は、接続に対してTCPキープ・アライブ・パラメータを構成し、接続障害を確実かつ迅速に検出できるようにすることができます。

ノート:

TimesTen ClientおよびTimesTen Serverを使用して完了されるネットワーク操作の時間の上限を設定する、TTC_Timeout属性を設定して、接続に問題があることを検出することもできます。また、TTC_Timeout属性では、その秒数をすぎるとタイムアウトする、TimesTenクライアント・アプリケーションが対応するTimesTenサーバー・プロセスからの結果を待機する最大秒数も指定します。

データベース操作によっては、予期せずTTC_TIMEOUT属性の設定値より長い時間がかかることがあるため、TimesTen Scaleoutでは、TTC_TIMEOUT属性に加えて、TCP接続の失敗を判別するためのTCPキープ・アライブ・パラメータを構成することをお薦めします。

この属性の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』TTC_Timeoutを参照してください。

次のパラメータを使用して、接続ごとにキープ・アライブ設定を制御できます。

  • TTC_TCP_KEEPALIVE_TIME_MS: 最後のデータ・パケット送信から最初のプローブまでの時間(ミリ秒単位)。デフォルトは10000ミリ秒です。

    ノート:

    Linuxクライアント・プラットフォームでは、TTC_TCP_KEEPALIVE_TIME_MSの値の最後の3桁を切り捨てて、この値を秒単位に変換します。そのため、2500ミリ秒に設定した場合は、2.5秒ではなく2秒になります。

  • TTC_TCP_KEEPALIVE_INTVL_MS: 連続するプローブ間の時間間隔(ミリ秒単位)。デフォルトは10000ミリ秒です。

  • TTC_TCP_KEEPALIVE_PROBES: 接続が失敗とみなされ、クライアントに通知するまでに送信される確認応答のないプローブの数。デフォルトは、2つの確認応答のないプローブに設定されます。

デフォルト設定のままにした場合、TimesTen Scaleoutでは、10秒後に最初のプローブを送信します(TTC_TCP_KEEPALIVE_TIME_MS設定)。

  • 応答があった場合、接続はアクティブであり、TTC_TCP_KEEPALIVE_TIME_MSタイマーがリセットされます。

  • 応答がない場合、TimesTen Scaleoutでは、この最初のプローブの後に10秒間隔で別のプローブを送信します(TTC_TCP_KEEPALIVE_INTVL_MS設定)。プローブに対して2回連続で応答がない場合、この接続は終了され、TimesTen Scaleoutによって別のデータ・インスタンスに接続がリダイレクトされます。

たとえば、クライアント/サーバー接続可能オブジェクトのTCPキープ・アライブ設定を次のように変更して、最初のプローブの待機時間を50000ミリ秒に短縮し、接続を20000ミリ秒ごとに、最大3回まで確認できるようにすることができます。

TTC_TCP_KEEPALIVE_TIME_MS=50000
TTC_TCP_KEEPALIVE_INTVL_MS=20000
TTC_TCP_KEEPALIVE_PROBES=3

これらの接続属性の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』TTC_TCP_KEEPALIVE_TIME_MSTTC_TCP_KEEPALIVE_INTVL_MSおよびTTC_TCP_KEEPALIVE_PROBESを参照してください。