IBM Support

WAS V7.0.0.3以降:ServerIOTimeoutに負の値を設定する際の考慮点 (WAS-11-007)

技術情報(FAQs)


質問

WAS V7.0.0.3から、プラグインのServerIOTimeoutパラメーターに、「正」、「0」又は「負」の値を設定することで、ServerIOTimeoutで指定された時間後にサーバーをマークダウンするかどうかを指定できるようになりました。推奨値をご紹介します。

回答

【概要】

WAS (WebSphere Application Server) V7.0.0.3から、プラグインのServerIOTimeoutパラメーターに、「正」、「0」又は「負」の値を設定することで、ServerIOTimeoutで指定された時間後にサーバーをマークダウンするかどうかを指定できるようになりました。
以下では、WAS V7.0.0.3以降のプラグイン・パラメーターの推奨値をご紹介します。

【対象ソフトウェア】
対象プラットフォーム:AIX / Linux / Windows
対象バージョン:WAS V7.0.0.3以降の全バージョン
対象エディション:全てのエディション

【内容】
WAS V7.0.0.3から、ServerIOTimeoutパラメーターに、「正」、「0」又は「負」の値の設定することで、サーバーをマークダウンするかを指定できるようになりました。マークダウンとは特定のサーバーを割り振り対象から外すようにマークし、プラグインから次のリクエストがそのサーバーへ割り振られないようにすることです。この変更はWASのFix Pack 6.0.2.33, 6.1.0.23 and 7.0.0.3 から導入されたため、これより前のバージョンにおいては負値のServerIOTimeoutを指定することができません。従って、これ以前のバージョンにおいては、リクエストが失敗してもプラグインがサーバーをマークダウンすることはありません。WAS V7.0.0.3以降の場合は、以下の動きをします。

・ServerIOTimeout > 0
ServerIOTimeout経過後、サーバーをマークダウンしません。

・ServerIOTimeout = 0
ServerIOTimeoutは無効ですので、タイムアウトが発生しません。サーバーをマークダウンしません。

・ServerIOTimeout < 0
ServerIOTimeout経過後、サーバーをマークダウンします。

ServerIOTimeoutを設定する際には、下記表を参照して、それぞれの環境で推奨される値を指定してください。

プラグイン・
パラメーターの
推奨値
ケースA
・GETリクエストの場合
・PostBufferSize >0が設定されているときの、POSTリクエストの場合
ケースB
・PostBufferSize =0が設定されているときの、POSTリクエストの場合
ケースC
・Affinityリクエストの場合
単体
サーバー
構成
1.ServerIOTimeout >0
2.RetryInterval >0
ServerIOTimeoutが発生した際に、サーバーをマークダウンせず、クライアントにエラーが表示される。 ・ケースAと同じ。 ・ケースAと同じ。
クラスター
構成
(メンバー2台)
1.ServerIOTimeout <0 (=S)
2.RetryInterval <[|S|-1]
ServerIOTimeoutが発生した際に、サーバーをマークダウンし、次のサーバーへフェールオーバーする。

次のサーバーでServerIOTimeoutが発生した場合、そのサーバーをマークダウンし、クライアントにエラーが表示される。

2.の設定により2台のサーバーが同時にマークダウンされることはない。
ServerIOTimeoutが発生した際に、サーバーをマークダウンし、次のサーバーへフェールオーバーせず、クライアントにエラーが表示される。 ・ケースAと同じ。
・但し、1.又は2.が満たされていない場合は、セッション情報を持っているサーバーへ複数回フェールオーバーされる。
クラスター構成
(メンバーN台)
1.ServerIOTimeout <0 (=S)
2.[(N-2)*|S|+1] <Retry Interval <[(N-1)*|S|-1]
ServerIOTimeoutが発生した際に、サーバーをマークダウンし、次のサーバーへフェールオーバーする。

全部のサーバーがダウンしていて、ServerIOTimeoutが発生した場合、全部のサーバーをマークダウンして、クライアントにエラーが表示される。

2.の設定によって全てのサーバーが同時にマークダウンされることはない。
ServerIOTimeoutが発生した際に、サーバーをマークダウンし、次のサーバーへフェールオーバーせず、クライアントにエラーが表示される。 ・ケースAと同じ。
・但し、1.又は2.が満たされていない場合は、セッション情報を持っているサーバーへ複数回フェールオーバーされる。
※ServerIOTimeoutで指定された値によって、リクエストが失敗したサーバーがマークダウンされるか、されないかが決まります。
※RetryIntervalで指定された時間が経過すると、マークダウンが無効になり、再びサーバーへの割り振りが可能になります。
※PostBufferSizeで指定された値が0ではない場合POSTリクエストが他のサーバーへフェールオーバーされますが、0の場合はPOSTリクエストがフェールオーバーされません。
※WAS V7.0において、これらのパラメーターのデフォルト値は、ServerIOTimeout=60秒、RetryInterval=60秒、PostBufferSize=64KBです。


各ケースにおける推奨値の裏付けを以下に説明いたします。

重要事項

(1) アフィニティーを有効にしている場合、ServerIOTimeout > 0でタイムアウトが発生してプラグインは前回のセッションデータを参照して、同じサーバーへリクエストをリトライします。リトライの回数はクラスター内のサーバーの台数で決まるロジックになっています。

(2) アフィニティー・リクエストを、同じサーバーに対してリトライさせたくない場合、ServerIOTimeoutを負の値に設定してください。

(3) クラスター内に一つのサーバーしかない場合は、ServerIOTimeout<0の設定でもサーバーがマークダウンされることはありません。

(4) ServerIOTimeoutが0のときはリクエストがリトライされることはありません。この場合は、OSのネットワークパラメーターがブラウザーでタイムアウトします。


ServerIOTimeoutとPostBufferSizeの関係について

POSTリクエストにおいて、データベースにアクセスする処理の途中でデータが更新された直後に、アプリケーション・サーバーが障害を受けたとしましょう。プラグインがサーバーの障害を検知して、データの更新がどこまで処理されたかに関係なく同じリクエストをフェイルオーバーする場合、同じ処理が二回行われ、データの更新が重複してしまいます。このようなことを防ぐために、PostBufferSizeを0に設定することでPOSTリクエストがプラグインによってフェイルオーバーされないようにします。

しかし、PostBufferSize=0にした場合、ServerIOTimeoutの設定値で動作が異なります。POSTリクエストに対してServerIOTimeoutが発生した場合の動作を明確にするために、ServerIOTimeoutとPostBufferSizeの全組合せにおいて以下に説明します。

・ServerIOTimeout > 0 & PostBufferSize > 0
サーバーが応答しない場合は、プラグインは該当サーバーをマークダウンせず、次のサーバーへフェールオーバーします。
※重要事項(1)と(2)が該当します。

・ServerIOTimeout = 0 & PostBufferSize > 0
ServerIOTimeOutが0に設定されている場合、OSのタイムアウトでリクエストが切断されます。WAS側でタイムアウトが発生しないので、サーバーをマークダウンしません。
※重要事項(1)と(2)が該当します。

・ServerIOTimeout < 0 & PostBufferSize > 0
サーバーが応答しない場合は、プラグインは該当サーバーをマークダウンして、次のサーバーへフェールオーバーします。

・ServerIOTimeout > 0 & PostBufferSize = 0
PostBufferSizeが0であるためリクエストのコンテンツをバッファーせず、更にServerIOTimeoutが正の値ですので、該当サーバーをマークダウンせず、クライアントに500エラーを返します。

・ServerIOTimeout = 0 & PostBufferSize = 0
PostBufferSizeが0であるためリクエストのコンテンツをバッファーせず、ServerIOTimeoutが0ですので該当サーバーをマークダウンせず、WAS側でタイムアウトも発生しません。

・ServerIOTimeout < 0 & PostBufferSize = 0
PostBufferSizeが0であるためリクエストのコンテンツをバッファーせず、ServerIOTimeoutが負の値ですので該当サーバーをマークダウンして、クライアントに500エラーを返します。


ServerIOTimeoutとRetryIntervalの関係について

RetryIntervalで指定された時間が経過すると、ServerIOTimeoutによるマークダウンが無効になり、再びサーバーへの割り振りが可能になります。

複数のアプリケーション・サーバーからなるクラスター構成において、ServerIOTimeoutを負の値に設定している場合、RetryIntervalは次の[a , b]の範囲で設定することを推奨しています。
a. RetryIntervalをServerIOTimeoutの絶対値より1つ大きい値
b. ServerIOTimeoutの絶対値をアプリケーション・サーバー台数より一つ少ない台数で掛けた数より、一つ小さい値

例えば、ServerIOTimeoutが「-t」、サーバー台数が「n」と仮定すると、RetryInterval値の推奨範囲は [t+1 , t*(n-1)-1]になります。

・a.をお勧めする理由について
アフィニティーを有効にしている場合、ServerIOTimeoutを負の値に設定すれば、アフィニティーリクエストが失敗した際に同じサーバーへリトライされません。
しかし、RetryIntervalで指定された時間後にマークダウンが無効になり、アフィニティーリクエストはセッション情報を持っている最初のサーバーへリトライされます。
RetryIntervalをServerIOTimeoutの絶対値より1つ大きい値にすることで、失敗したセッションリクエストが少なくともクラスター内の別のメンバー2台でリトライされることを保証します。
アフィニティーリクエストの場合は、以下の3ケースをご参考ください。

・ServerIOTimeout = X ( > 0) & RetryInterval = Y ( > 0)



・ServerIOTimeout = X ( < 0) & RetryInterval < |X| ( > 0)



・ServerIOTimeout = X ( < 0) & RetryInterval > |X| ( > 0)



※リクエストがフェールオーバーされる最大回数は、WAS V7.0.0.13からN-1回に変更されました(Nはクラスター内のメンバー・サーバーの台数)。
  上の図は、WAS V7.0.0.13のプラグインの動作を想定しています。WAS V7.0.0.11以前のバージョンにおいては、N回フェールオーバーされました。
  詳しくは参考情報の3をご参照ください。

・b.をお勧めする理由について
ServerIOTimeoutはリクエストに対するレスポンスが時間内に返ってこないと発生しますが、非常に重い処理で時間のかかるリクエストの場合、実際サーバーが生きていてもタイムアウトが発生してしまいます。
その際に、クラスター内の全メンバーで重いリクエストがリトライされ、全サーバーが生きているにも関らず同時にマークダウンされてしまい、次のリクエストが処理されない恐れがあります。
RetryIntervalを 「t*(n-1)-1」より小さい値にすることで、クラスター内に少なくても1つのサーバーが割り振り可能であることを保証します。


【参考情報】

1. How do the properties ServerIOTimeout and PostBufferSize affect plug-in behavior?

2. Webserver Plugin configuration

3. 単体サーバーとクラスター構成で、プラグインからリクエストを同じサーバーに再送する問題

FailoverToNextパラメーターについて

クラスター環境において1つのアプリケーション・サーバーに障害が起きた際、プラグインはそのサーバーにペンディングされたすべてのリクエストをプラグイン構成ファイルに定義された“次の”アプリケーション・サーバーへのみ割り振ってしまうという問題がありました。
この場合は、大量のリクエストがペンディングされた状態でサーバーが停止すると“次の”サーバーに大量のリクエストが振られ、過負荷状態になる可能性があります。
この挙動は、WAS V6.1.0.31およびWAS V7.0.0.13から改善され、カスタム・プロパティー FailoverToNext = "false" (デフォルト値)の状態で、1つのアプリケーション・サーバーがダウンした際には、Webサーバー・プラグインからラウンドロビン、もしくはランダムに別のサーバー群に分散して割り振ってくれるようになりました。
詳細につきましては、下記のAPAR情報をご覧ください。

4. CHANGE HOW PLUG-IN FINDS ANOTHER SERVER IF THE AFFINITY SERVER WAS ALREADY MARKED DOWN WHEN THE REQUEST ARRIVES


以上

クロスリファレンス情報
区分 製品 コンポーネント プラットフォーム バージョン エディション
Application Servers WebSphere Application Server - Express
Application Servers WebSphere Application Server Community Edition
Application Servers WebSphere Application Server Feature Pack for Dynamic Scripting
Application Servers WebSphere Application Server Feature Pack for Web 2.0
Application Servers WebSphere Application Server for z/OS
Application Servers WebSphere Application Server Hypervisor Edition
Application Servers WebSphere Application Server Hypervisor Edition for AIX
Application Servers WebSphere Application Server Hypervisor Edition for Red Hat Enterprise Linux Server
Application Servers WebSphere Application Server Hypervisor Edition Intelligent Management Pack
Application Servers WebSphere Application Server Hypervisor Edition V7 for Novell SLES on System z
Application Servers WebSphere Application Server V7 Feature Pack for Communications Enabled Applications
Application Servers WebSphere Application Server V7 Feature Pack for OSGi Applications and Java Persistence API 2.0
Application Servers WebSphere Application Server v7 Feature Pack for Service Component Architecture
Application Servers WebSphere Application Server V7.0 Feature Pack for XML
Application Servers WebSphere Central Site Server
Application Servers WebSphere CloudBurst Appliance
Application Servers WebSphere Cloudburst Appliance Firmware
Application Servers WebSphere Edge Server
Application Servers WebSphere End of Support Products
Application Servers WebSphere eXtreme Scale
Application Servers WebSphere eXtreme Scale for z/OS
Mobile- Speech and Enterprise Access WebSphere IP Multimedia Subsystem Connector
Application Servers WebSphere Real Time
Application Servers WebSphere Remote Server
Application Servers WebSphere Remote Server Advanced
Application Servers WebSphere Remote Server Standard
Application Servers WebSphere Remote Server Starter
Application Servers WebSphere sMash
Application Servers WebSphere System Management Accelerators
Application Servers WebSphere Virtual Enterprise
Systems and Asset Management WebSphere Studio Application Monitor

Historical Number

FEDE0A9BB1D1C877492578410010284A

Document information

More support for: WebSphere Application Server

Software version: All

Operating system(s): Linux, pSeries, xSeries, zLinux

Reference #: J1000347

Modified date: 25 February 2011


Translate this page: