ADC

バックエンドサーバーの応答がタイムアウトになったら再試行をリクエストする

リクエスト再試行は、バックエンドサーバーがリクエストへの応答に時間がかかる場合、アプライアンスがタイムアウト時にリロードバランシングを実行し、そのリクエストを次の使用可能なサーバーに転送するもう1つのシナリオで使用できます。

バックエンドサーバーの応答がタイムアウトしたときのリクエストリトライの仕組み

次の図は、コンポーネントが互いに相互作用することを示しています。

バックエンドサーバーの応答がタイムアウトしたときのリクエストリトライの仕組み

  1. このプロセスでは、まずアプライアンスの appqoe 機能を有効にします。
  2. appqoe 設定には、ミリ秒単位の「retryOnTimeout」パラメータがあります。
  3. アプライアンスが要求を送信し、サーバーの応答に時間がかかる場合、 アプライアンスは設定されたタイムアウト値に基づいて再負荷分散を実行します。アプライアンスは、サーバーの応答を待つ代わりに、接続をリセットし、別のサービスを選択して要求を転送します。
  4. 負荷分散仮想サーバーが応答を受信した後、アプライアンスは応答をクライアントに転送します。タイムアウトパラメータを使用すると、アプライアンスがサーバーの応答を待つ必要がなくなり、RTT が増加します。
  5. 使用可能なバックエンドサーバーが再試行回数と同じかそれ以下で、 すべてのサーバーが要求に対してタイムアウトした場合、アプライアンスは500の内部サーバーエラーを返します。使用可能なサーバーが5つあり、再試行回数が6に設定されているシナリオを考えてみます。5 台のサーバーすべてが要求に対してタイムアウトした場合、アプライアンスはクライアントに 500 内部サーバーエラーを返します。
  6. 同様に、バックエンドサーバーの数がリトライ回数よりも多く、バックエンドサーバーがリクエストでタイムアウトした場合、アプライアンスはサーバーが応答を送信するか、クライアントのアイドル接続がタイムアウトするまで、最後のサービスを待機し続けます。3つのバックエンドサーバーがあり、再試行回数が2に設定されているシナリオを考えてみます。要求に応じて 3 台のサーバーすべてがタイムアウトした場合、アプライアンスは、サーバーが応答を送信するか、クライアントのアイドル接続がタイムアウトするまで、3 番目のサービスを待機し続けます。

バックエンドサーバーの応答がタイムアウトしたときの要求再試行 (GET および POST メソッド) の設定

タイムアウト時に GET メソッドのリクエスト再試行を設定するには、次の手順を完了する必要があります。

  1. アプリを有効にする
  2. AppQoE アクションの設定
  3. 適用ポリシーの追加
  4. appqoeポリシー を負荷分散仮想サーバーにバインドする

注:

タイムアウト時のリクエスト再試行シナリオは、POST メソッドにも適用できます。

アプリを有効にする

コマンドプロンプトで入力します:

enable ns feature appqoe

タイムアウト用の appqoe アクションを追加

タイムアウト時に再試行するように appqoe アクションを設定し、再試行回数を定義する必要があります。

コマンドプロンプトで入力します:

add appqoe action <name> -retryOnTimeout <msecs> -numRetries <positive_integer>

例:

add appqoe action appact1 -retryOnTimeout 35 –numRetries 5

適用ポリシーの追加

appqoe を実装するには、appqoe ポリシーを設定して、接続をキューに入れる方法を定義する必要があります。

コマンドプロンプトで入力します:

add appqoe policy <name> -rule <rule> -action <name>

例:

add appqoe policy timeout_policy -rule http.req.method.eq(get) -action appact1

appqoeポリシーを負荷分散仮想サーバーにバインドする

バックエンドサーバーの応答に時間がかかり、負荷分散仮想サーバーから次の利用可能なサービスに要求を転送したい場合は、appqoe ポリシーを分散仮想サーバーにバインドする必要があります。

コマンドプロンプトで入力します:

bind lb vserver <name> ((<serviceName> (-policyName <string> [-priority <positive_integer>] [-gotoPriorityExpression <expression>] [-type ( REQUEST | RESPONSE )]

例:

bind lb vserver v1 -policyName timeout_policy -type REQUEST -priority 1

NetScaler GUIを使用してタイムアウト時に再負荷分散を行うためのAppQoEポリシーを構成する

  1. [ AppExpert] > [AppQoE] [ポリシー] に移動します。
  2. AppQoE ポリシー 」ページで、「 追加」をクリックします。
  3. [ AppQoEポリシー の作成]ページで、次のパラメーターを設定します。

    a. 名前。AppQoE ポリシー名 b. アクション。 アクションを追加または編集します。新しいアクションを作成するには、「AppQoE アクションの作成」セクションを参照してください。 c. 式。「http.req.method.eq (get)」ポリシーエクスプレッションを選択または入力します。

  4. [作成]して[閉じる] をクリックします。

NetScaler GUIを使用してリクエスト再試行用のAppQoEアクションを構成する

  1. [ AppExpert] > [AppQoE] [アクション] に移動します。
  2. AppQoE アクション 」ページで、「 追加」をクリックします。
  3. AppQoE アクションの作成 」ページで、バックエンドサーバーの応答タイムアウト時に再試行する次のパラメータを設定します。a. タイムアウト時に再試行してください。 バックエンドサーバーにリクエストを送信したときに、リクエストのタイムアウト (ミリ秒単位) で再試行します。
  4. [作成]して[閉じる] をクリックします。
バックエンドサーバーの応答がタイムアウトになったら再試行をリクエストする