バックエンドサーバーの応答がタイムアウトになったら再試行をリクエストする
バックエンドサーバーの応答がタイムアウトしたときのリクエストリトライの仕組み
-
このプロセスでは、まずアプライアンスの appqoe 機能を有効にします。
-
appqoe 設定には、ミリ秒単位の「retryOnTimeout」パラメータがあります。
-
アプライアンスが要求を送信し、サーバーの応答に時間がかかる場合、 アプライアンスは設定されたタイムアウト値に基づいて再負荷分散を実行します。アプライアンスは、サーバーの応答を待つ代わりに、接続をリセットし、別のサービスを選択して要求を転送します。
-
負荷分散仮想サーバーが応答を受信した後、アプライアンスは応答をクライアントに転送します。タイムアウトパラメータを使用すると、アプライアンスがサーバーの応答を待つ必要がなくなり、RTT が増加します。
-
使用可能なバックエンドサーバーが再試行回数と同じかそれ以下で、 すべてのサーバーが要求に対してタイムアウトした場合、アプライアンスは500の内部サーバーエラーを返します。使用可能なサーバーが5つあり、再試行回数が6に設定されているシナリオを考えてみます。5 台のサーバーすべてが要求に対してタイムアウトした場合、アプライアンスはクライアントに 500 内部サーバーエラーを返します。
-
同様に、バックエンドサーバーの数がリトライ回数よりも多く、バックエンドサーバーがリクエストでタイムアウトした場合、アプライアンスはサーバーが応答を送信するか、クライアントのアイドル接続がタイムアウトするまで、最後のサービスを待機し続けます。3つのバックエンドサーバーがあり、再試行回数が2に設定されているシナリオを考えてみます。要求に応じて 3 台のサーバーすべてがタイムアウトした場合、アプライアンスは、サーバーが応答を送信するか、クライアントのアイドル接続がタイムアウトするまで、3 番目のサービスを待機し続けます。
バックエンドサーバーの応答がタイムアウトしたときの要求再試行 (GET および POST メソッド) の設定
-
アプリを有効にする
-
AppQoE アクションの設定
-
適用ポリシーの追加
-
appqoeポリシー を負荷分散仮想サーバーにバインドする
アプリを有効にする
enable ns feature appqoe
タイムアウト用の appqoe アクションを追加
add appqoe action <name> -retryOnTimeout <msecs> -numRetries <positive_integer>
add appqoe action appact1 -retryOnTimeout 35 –numRetries 5
適用ポリシーの追加
add appqoe policy <name> -rule <rule> -action <name>
add appqoe policy timeout_policy -rule http.req.method.eq(get) -action appact1
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