Sun ONE Application Server 7, Enterprise Edition 管理者ガイド |
第 16 章
ロードバランスの設定この章では、HTTP 要求のロードバランスの設定方法、およびロードバランスプラグインの設定方法と管理方法を説明します。
この章では次のトピックについて説明します。
ロードバランスについてSunTM Open Net Environment (ONE) Application Server 7, Enterprise Edition は、ロードバランスと HTTP セッションの持続性を提供します。ロードバランスの目的は、複数の Sun ONE Application Server インスタンスの作業負荷を均等に分散させて、システム全体のスループットを向上させることです。
ロードバランスプラグインは、Sun ONE Application Server 7, Standard Edition で使われる HTTP リバースプロキシプラグインの拡張バージョンです。リバースプロキシプラグインの詳細は、『Sun ONE Application Server 7, Standard Edition 管理者ガイド』の第 7 章「Web サーバープラグインの設定」を参照してください。
この節では次の項目について説明します。
ロードバランスのアルゴリズム
Sun ONE Application Server のロードバランサでは、着信した HTTP 要求や HTTPS 要求のロードバランスを行うために、スティッキーなラウンドロビンアルゴリズムを使います。つまり、1 つのセッションのすべての要求が同じアプリケーションサーバーインスタンスに送信されます。スティッキーなロードバランサでは、セッションデータは、1 つのクラスタ内のすべてのインスタンスに分散させる必要はなく、1 つのアプリケーションサーバーにキャッシュできます。
したがって、スティッキーなラウンドロビン方式によりパフォーマンスが大幅に改善され、通常は、純粋なラウンドロビン方式でより均等にロードバランスを行う場合よりも大きな効果が得られます。
スティッキーなラウンドロビンアルゴリズムによるロードバランスについて
新しい HTTP 要求がロードバランスプラブインに送信されると、その要求は単純なラウンドロビン方式に基づいてアプリケーションサーバーインスタンスに転送されます。その後、この要求は、cookie の使用または URL の明示的な書き換えによって、その特定のアプリケーションサーバーインスタンスに「貼り付け」されます。
ロードバランスプラグインでは最初に、スティキーの情報に基づいて、その要求の転送元のインスタンスを特定します。転送元のインスタンスが正常であると判定された場合、ロードバランスプラグインはその要求を特定のアプリケーションサーバーインスタンスに転送します。したがって、1 つのセッションに対応するすべての要求が同じアプリケーションサーバーインスタンスに送信されます。
ロードバランスプラグインでは、次の方法でセッションのスティック状態を判定します。
Cookie に基づく方法
cookie に基づく方法の場合、ロードバランスプラグインはルーティング情報の記録に個別の cookie を使います。
URL の明示的な書き換えによる方法
URL の明示的な書き換えによる方法の場合、スティッキーの情報は URL に付加されます。この方法は、ブラウザが cookie をサポートしていない場合でも実行できます。
ロードバランスの要件
ロードバランスプラグインを使用するには、次の要件を満たしている必要があります。
ロードバランスプラグインの設定この節では次の項目について説明します。
Web サーバーの設定の変更
ロードバランスプラグインのインストールプログラムは、Web サーバーの設定ファイルにいくつかの変更を加えます。この節では、次の Web サーバーの設定ファイルに対する変更について詳しく説明します。
Sun ONE Web Server の設定の変更
インストールプログラムは、Sun ONE Web Server の設定ファイルに次のような変更を加えます。
- Web サーバーインスタンスの magnus.conf ファイルに、ロードバランスプラグイン固有の次のようなエントリを追加します。
##EE lb-plugin
Init fn="load-modules" shlib="webserver_install_dir/webserver_instance/plugins/lbplugin/bin/libpassthrough.so" funcs="init-passthrough,service-passthrough,name-trans-passthrough" Thread="no"Init fn="init-passthrough"
##end addition for EE lb-plugin
- Web サーバーインスタンスの obj.conf ファイルに、ロードバランスプラグイン固有の次のようなエントリを追加します。
<Object name=default>
NameTrans fn="name-trans-passthrough" name="lbplugin" config-file="webserver_install_dir/webserver_instance/config/loadbalancer.xml"
<Object name="lbplugin">
ObjectType fn="force-type" type="magnus-internal/lbplugin"
PathCheck fn="deny-existence" path="*/WEB-INF/*"
Service type="magnus-internal/lbplugin" fn="service-passthrough"
Error reason="Bad Gateway" fn="send-error" uri="$docroot/badgateway.html"
</object>lbplugin は Object を一意に特定する名前、webserver_install_dir/webserver_instance/config/loadbalancer.xml は、ロードバランサを実行するように設定された仮想サーバーの XML 設定ファイルの場所です。
ここで、loadbalancer.xml 設定ファイルを編集して、ロードバランスプラグインを設定する必要があります。loadbalancer.xml ファイルの編集方法の詳細は、「ロードバランサの設定ファイルの作成」を参照してください。
Apache Web サーバーの設定の変更
Apache にロードバランスプラグインをインストールする前に、付録 C 「Apache Web サーバーのコンパイルと設定」で Apache のコンパイルと設定に関する情報を確認してください。
ロードバランスプラグインのインストールプログラムは、Web サーバーのルートディレクトリの下にある modules フォルダに必要なファイルを抽出します。また、Web サーバーインスタンスの httpd.conf ファイルにロードバランスプラグイン固有の次のエントリを追加します。
<VirtualHost machine_name:443>
##Addition for EE lb-plugin
LoadFile /usr/lib/libCstd.so.1
LoadModule apachelbplugin_module libexec/mod_loadbalancer.so
#AddModule mod_apachelbplugin.cpp
<IfModule mod_apachelbplugin.cpp>
config-file webserver_instance/config/loadbalancer.xml
locale en
</IfModule><VirtualHost machine_ip_address>
DocumentRoot "webserver_instance/apache/htdocs"
ServerName server_name
</VirtualHost>##END EE LB Plugin ParametersVersion 7
これで、Apache Web サーバーへのロードバランスプラグインのインストールが完了します。
次の各節では、loadbalancer.xml ファイルの作成方法および必要な設定情報の指定方法について説明します。
ロードバランサの設定ファイルの作成
loadbalancer.xml ファイルは、ロードバランサのインストール時に同時にインストールされる sun-loadbalancer_1_0.dtd ファイルと loadbalancer.xml.example ファイルに基づいて作成する必要があります。これらのファイルは、次の場所にあります。
要素とその属性の詳細は、「ロードバランサの設定ファイル」を参照してください。
サンプル loadbalancer.xml ファイル
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE loadbalancer PUBLIC "-//Sun Microsystems Inc.//DTD Sun ONE Web Server 6.0//EN" "file:///webserver_install_dir/webserver_instance/config/sun-loadbalancer_1_0.dtd">
<loadbalancer>
<cluster name="cluster1">
<instance name="server1" enabled="true" listeners="http://austen.sun.com:80 https://http://austen.sun.com:443"/>
<instance name="server2" enabled="true" listeners="http://polar.sun.com:80 https://polar.sun.com:443"/>
<web-module context-root="webapps-simple" enabled="true"/>
</cluster><property name="response-timeout-in-seconds" value="120"/>
<property name="reload-poll-interval-in-seconds" value="180"/>
<property name="https-routing" value="true"/>
</loadbalancer>
- loadbalancer.xml ファイルに加えられた変更を保存して、Web サーバーを再起動します。
注
- Apache Web サーバーの場合、DTD ファイルは conf ディレクトリに格納される。したがって、DTD ファイルを作成する場所は、次の例のように指定する必要がある "file:///webserver_install_dir/webserver_instance/conf/sun-loadbalancer_1_0.dtd">
- アプリケーションサーバーインスタンスの作成方法と設定方法については、第 4 章「アプリケーションサーバーインスタンスの使用」を参照
- response-timeout-in-seconds プロパティは、ロードバランスが行われた要求の応答を待機するタイムアウト間隔を指定する。この時間内に応答が得られない場合は、エラーページが表示される
- クラスタリングの詳細は、第 17 章「クラスタの管理」を参照
loadbalancer.xml ファイルの編集方法の詳細は、「ロードバランサの設定ファイル」を参照してください。
複数の Web サーバーインスタンスの設定
Sun ONE Application Server 7, Enterprise Edition のインストーラでは、1 台のマシンに複数のロードバランスプラグインをインストールできません。1 つのクラスタ内であるか複数のクラスタにわたるかに関係なく、1 台のマシン上で (ロードバランスプラグインを持つ) 複数の Web サーバーを使う必要がある場合は、ロードバランスプラグインを手動で設定する必要があります。
複数の Web サーバーインスタンスのロードバランスプラグインを設定するには、次の節に示す手順に従ってください。
複数の Sun ONE Web Server インスタンスの設定
- ロードバランスプラグインを設定する Web サーバーインスタンスの magnus.conf ファイルに、次の変更を加えます。
Init fn="load-modules" shlib="webserver_install_dir/webserver_instance/plugins/lbplugin/bin/libpassthrough.so" funcs="init-passthrough,service-passthrough,name-trans-passthrough" Thread="no"
Init fn="init-passthrough"
- ロードバランスプラグインを設定する Web サーバーインスタンスの obj.conf ファイルに、次の変更を加えます。
<Object name=default>
NameTrans fn="name-trans-passthrough" name="lbplugin" config-file="webserver_install_dir/webserver_instance/config/loadbalancer.xml"
<Object name="lbplugin">
ObjectType fn="force-type" type="magnus-internal/lbplugin"
PathCheck fn="deny-existence" path="*/WEB-INF/*"
Service type="magnus-internal/lbplugin" fn="service-passthrough"
Error reason="Bad Gateway" fn="send-error" uri="$docroot/badgateway.html"
</object>- sun-loadbalancer_1_0.dtd ファイルおよび loadbalancer.xml ファイルを、(ロードバランスプラグインで設定済みの) 既存の Web サーバーインスタンスの config ディレクトリからロードバランサで設定済みの新しいインスタンスの config ディレクトリにコピーします。
- 「ロードバランサの設定ファイルの作成」での説明のとおりに、loadbalancer.xml ファイルを編集します。
複数の Apache Web サーバーインスタンスの設定
- Web サーバーインスタンスの httpd.conf ファイルに、ロードバランスプラグイン固有の次のようなエントリを追加します。
<VirtualHost machine_name:443>
##Addition for EE lb-plugin
LoadFile /usr/lib/libCstd.so.1
LoadModule apachelbplugin_module libexec/mod_loadbalancer.so
#AddModule mod_apachelbplugin.cpp
<IfModule mod_apachelbplugin.cpp>
config-file webserver_instance/config/loadbalancer.xml
locale en
</IfModule><VirtualHost machine_ip_address>
DocumentRoot "webserver_instance/apache/htdocs"
ServerName server_name
</VirtualHost>##END EE LB Plugin Parameters
- sun-loadbalancer_1_0.dtd ファイルおよび loadbalancer.xml ファイルを、(ロードバランスプラグインで設定済みの) 既存の Web サーバーインスタンスの conf ディレクトリからロードバランサで設定済みの新しいインスタンスの conf ディレクトリにコピーします。
- 「ロードバランサの設定ファイルの作成」での説明のとおりに、loadbalancer.xml ファイルを編集します。
応答タイムアウトの設定
ロードバランサの設定ファイル (loadbalancer.xml) には、ロードバランスが行われた要求の応答を待機するタイムアウト間隔を示す response-timeout-in-seconds プロパティが指定されています。この時間内に応答が得られない場合は、エラーページが表示されます。デフォルト値は 60 秒です。
response-timeout-in-seconds プロパティを設定するときには、実行中のすべてのアプリケーションの最長タイムアウト時間を考慮する必要があります。このプロパティの値は、すべてのアプリケーションの最長応答時間に設定する必要があります。
HTTPS ルーティングの設定
この節では、Web サーバーと Sun ONE Application Server の間で HTTP/HTTPS ルーティングとセッションフェイルオーバーを有効化するための、ロードバランスプラグインの設定方法について説明します。あるセッションの接続先となる本来のアプリケーションサーバーインスタンスが利用できなくなった場合に、ロードバランスプラグインでは HTTP/HTTPS セッションを別のアプリケーションサーバーインスタンスにフェイルオーバーします。
この節では次の項目について説明します。
HTTPS ルーティングについて
HTTP であるか HTTPS (セキュリティ保護された HTTP) であるかに関係なく、受信したすべての要求はロードバランスプラグインによってアプリケーションサーバーインスタンスにルーティングされます。ただし、HTTPS ルーティングが有効化されている場合、HTTPS 要求はロードバランスプラグインによって、HTTPS ポートを使用するアプリケーションサーバーのみに転送されます。HTTPS ルーティングは、新しい要求およびスティッキーな要求の両方に対して実行されます。
HTTPS 要求が着信したときに実行中のセッションがない場合、ロードバランスプラグインは HTTPS ポートが設定されている使用可能なアプリケーションサーバーインスタンスを選択して、そのインスタンスに HTTPS 要求を転送します。
実行中の HTTP セッションでは、同じセッションに対する新しい HTTPS 要求が着信すると、HTTP セッションの際に保存されたセッション情報とスティッキーの情報を使って HTTPS 要求を転送します。新しい HTTPS 要求は、最後に HTTP 要求を処理したサーバー (ただし、HTTPS ポートがあるもの) にルーティングされます。
HTTPS ルーティングの設定
https-routing プロパティでは、ロードバランスの対象となるすべてのアプリケーションサーバーについて、HTTPS ルーティングを有効にするか無効にするかを制御します。このプロパティを false に設定した場合、HTTP 要求と HTTPS 要求はすべて HTTP として転送されます。
HTTPS ルーティングとフェイルオーバーを設定するには、次の手順に従います。
https-routing プロパティでは、ロードバランスの対象となるすべてのアプリケーションサーバーについて、HTTPS ルーティングを有効にするか無効にするかを制御します。このプロパティを false に設定した場合、HTTP 要求と HTTPS 要求はすべて HTTP として転送されます。
ヘルスチェッカの設定
ロードバランサは、health-checker 要素に指定した値に基づいて、設定済みのすべての Sun ONE Application Server インスタンスで異常としてマーク付けされたものがないかどうかを定期的に確認します。ヘルスチェッカの有効化の指定は省略できます。ヘルスチェッカが有効化されていない場合、異常なインスタンスに関する定期的なヘルスチェックは実行されません。
ロードバランサのヘルスチェックメカニズムでは、HTTP を使ってアプリケーションサーバーインスタンスと通信します。ヘルスチェッカは、指定された URL に HTTP 要求を送信し、その応答を待機します。HTTP 応答ヘッダーの状態コードが 100 〜 500 の範囲であれば、インスタンスが正常であると判定できます。
ヘルスチェッカを有効化するには、loadbalancer.xml ファイル内の次のプロパティを編集します。
アプリケーションサーバーインスタンスが異常としてマーク付けされている場合、ヘルスチェッカは異常なインスタンスのポーリングを行い、そのインスタンスが正常になっているかどうかを確認します。ヘルスチェッカは url 属性を使って、すべての異常なアプリケーションサーバーインスタンスについて、これらが正常な状態に戻っているかどうかを確認します。
ヘルスチェッカは、異常なインスタンスが正常な状態に戻っていることを確認できた場合、そのインスタンスを正常なインスタンスのリストに追加します。
静止の設定
静止とは、アプリケーションサーバーインスタンスや Web アプリケーションを適切に無効化するプロセスのことです。ユーザーは静止時間と呼ばれる有効期限を設定できます。この時間内に、ロードバランスプラグインはスティッキーな要求をクラスタ内の正常な別のインスタンスにフェイルオーバーします。
何らかの理由で (たとえば、JDBC リソースを追加するために) アプリケーションサーバーインスタンスを停止する場合、そのインスタンスでの要求の処理が完了した後に停止したいことがあります。また、クラスタから Web アプリケーションの配備を取り消す場合、そのアプリケーションで要求の処理が完了した後に配備を取り消したいこともあります。そのためには、静止プロセスを使用します。
静止の詳細は、第 17 章「クラスタの管理」を参照してください。
アプリケーションまたはアプリケーションサーバーインスタンスを静止させることができます。次の各節では、それぞれの静止方法について説明します。
インスタンスの静止
ロードバランサでは、アプリケーションサーバーインスタンスの静止に次のポリシーを適用します。
インスタンスを静止するには、次の手順に従います。
アプリケーションの静止
ロードバランサでは、アプリケーションの静止に次のポリシーを適用します。
アプリケーションを静止するには、次の手順に従います。
動的再設定についてロードバランスプラグインは、loadbalancer.xml ファイルのタイムスタンプを確認することによって、設定の変更を検出します。loadbalancer.xml ファイルに変更が加えられている場合、ロードバランサ自体の設定が自動的に再設定されます。
ロードバランサが loadbalancer.xml ファイルのタイムスタンプを確認する時間間隔は、loadbalancer.xml ファイルの reload-poll-interval-in-seconds プロパティで指定できます。デフォルトでは、このプロパティの値は 0 秒に設定されていて、動的再設定は無効化されています。
ロードバランスプラグインの監視この節では次の項目について説明します。
ログメッセージの設定
ロードバランスプラグインでは、Web サーバーのログメカニズムを使ってログメッセージを書き込みます。ロードバランスプラグインは、各 Web サーバーのデフォルトのログレベルを使います (Sun ONE Web Server では INFO、Apache Web Server では WARN)。アプリケーションサーバーのログレベル (FINE、FINER、および FINEST) は、Web サーバーの DEBUG レベルにマップされています。
これらのログメッセージは、スクリプトで解析可能な生データの形式で Web サーバーのログファイルに書き込まれ、必要に応じてメトリックの計算のためにスプレッドシートにインポートされます。
監視の設定
ロードバランスプラグインのログメッセージを有効化するには、次の手順に従います。
ロードバランスプラグインのログに、次の情報が記録されます。
- すべての要求について、要求の開始と停止に関する情報がログに記録されます。
- 異常なインスタンスから正常なインスタンスに要求がフェイルオーバーされた場合は、フェイルオーバーされた要求の情報がログに記録されます。
- 各ヘルスチェックサイクルの終了時に、異常なインスタンスのリストがログに記録されます。
監視メッセージについて
ロードバランスプラグインのログメッセージの形式は、次のとおりです。
ロードバランサの設定ファイルloadbalancer.xml ファイルには、SunTM Open Net Environment (ONE) Application Server インスタンスのロードバランスを行うための設定情報が保存されています。このファイルは、フロントエンドの Web サーバーのロードバランスプラグインの一部です。このファイルは Web サーバー内にありますが、その重要性および Sun ONE Application Server との関連性から、このマニュアルでも説明します。
一般的な UNIX テキストエディタとの互換性を維持するため、loadbalancer.xml ファイルのエンコーディングは UTF-8 になっています。スキーマファイル sun-loadbalancer_1_0.dtd は、loadbalancer.xml ファイルの書式と内容を定義します。
この章には、loadbalancer.xml ファイルおよび sun-loadbalancer_1_0.dtd ファイルについて説明する次の節があります。
sun-loadbalancer_1_0.dtd ファイル
sun-loadbalancer_1_0.dtd ファイルは、loadbalancer.xml ファイルの構造を定義します。つまり、loadbalancer.xml に記述できるさまざまな要素と、その要素が持つことのできるサブ要素や属性を定義しています。
注
sun-loadbalancer_1_0.dtd ファイルを編集しないでください。このファイルの内容は、Sun ONE Application Server, Enterprise Edition のバージョンの改訂にともなって変更されます。
注
sun-loadbalancer_1_0.dtd インタフェースは、不確定です。不確定なインタフェースは試験的または一時的なインタフェースであるため、次のリリースで互換性がなくなったり、削除されたり、または安定したインタフェースに置き換えられたりする場合があります。
DTD ファイルおよび XML の全般的な情報については、次のサイトにある XML 仕様を参照してください。
DTD ファイルに定義された各要素 (対応する XML ファイル内に置かれている場合もある) には、次の要素が含まれています。
サブ要素
要素にはサブ要素を含めることができます。たとえば、次のファイルコードは cluster 要素を定義します。
<!ELEMENT cluster (instance*, web-module*, health-checker?)>
この ELEMENT タグは、cluster 要素に instance、web-module、および health-checker 要素をこの順番で含めることができることを示しています。
次の表に、サブ要素のサフィックス文字 (省略可能) によって決まる必要指定数、つまり指定可能なサブ要素の数を示します。左の列にサブ要素の末尾文字、右の列に対応する必要指定数を示します。
表 16-1 必要指定数とサブ要素のサフィックス
サブ要素のサフィックス
必要指定数
element*
このサブ要素を含まないか、1 個以上含めることができる
element?
このサブ要素を含まないか、1 個含めることができる
element+
このサブ要素を 1 個以上含まなければならない
element (サフィックスなし)
このサブ要素を 1 個だけ含まなければならない
要素にほかの要素を含めることができない場合は、カッコで囲まれた要素名のリストの代わりに、EMPTY または (#PCDATA) が表示されます。
データ
要素の中には、サブ要素の代わりに文字データを含むものもあります。これらの要素は、次の形式で定義されます。
<!ELEMENT element-name (#PCDATA)>
次に例を示します。
<!ELEMENT description (#PCDATA)>
loadbalancer.xml ファイル内では、データ要素内の空白スペースはデータの一部として扱われます。そのため、データ要素で区切られたデータの前後には余分な空白がないようにする必要があります。次に例を示します。
<description>response timeout property</description>
属性
ATTLIST タグを持つ要素には属性 (名前 - 値のペア) が含まれています。次に例を示します。
<!ATTLIST instance name CDATA #REQUIRED
enabled %boolean; "true"
disable-timeout-in-minutes CDATA "31"
listeners CDATA #REQUIRED>instance 要素には、name、enabled、disable-timeout-in-minutes、および listeners という属性を指定することができます。
#REQUIRED ラベルは、値を指定する必要があることを示します。#IMPLIED ラベルは、その属性の指定は省略可能であり、Sun ONE Application Server がデフォルト値を生成することを示します。可能な場合は、"true" などの明示的なデフォルト値が示されます。
属性宣言は、属性のタイプを指定します。たとえば、CDATA は文字データ、%boolean は事前定義された列挙型データを表します。
loadbalancer.xml ファイル内の要素
この節では、loadbalancer.xml ファイル内の XML 要素について説明します。
loadbalancer
ロードバランサを定義します。これはルート要素であり、loadbalancer.xml ファイル内には loadbalancer 要素が 1 つだけ存在します。
サブ要素
次の表では、loadbalancer 要素のサブ要素について説明しています。左の列にサブ要素名、中央の列に必要指定数、右の列に要素の説明を示します。
表 16-2 loadbalancer のサブ要素
要素
必要指定数
説明
0 または 1 個以上
サーバーインスタンスのクラスタを定義する
0 または 1 個以上
ロードバランサのプロパティを指定する
属性
なし
property
ロードバランサのプロパティを指定します。
サブ要素
次の表に、property 要素のサブ要素を示します。左の列にサブ要素名、中央の列に必要指定数、右の列に要素の説明を示します。
属性
次の表に、property 要素の属性を示します。左の列に属性の名前、中央の列にデフォルト値、右の列にその属性の説明を示します。
プロパティ
次の表に、ロードバランサのプロパティを示します。左の列にプロパテイの名前、中央の列にデフォルト値、右の列にそのプロパテイの説明を示します。
description
親の要素を説明するテキストを含みます。
サブ要素
なし
属性
なし
cluster
サーバーインスタンスのクラスタを定義します。
サブ要素
次の表では、cluster 要素のサブ要素について説明しています。左の列にサブ要素名、中央の列に必要指定数、右の列に要素の説明を示します。
表 16-6 cluster のサブ要素
要素
必要指定数
説明
0 または 1 個以上
サーバーインスタンスを定義する
0 または 1 個以上
Web モジュールを定義する
0 または 1 個
クラスタのヘルスチェッカを設定する
属性
次の表では、cluster 要素の属性について説明しています。左の列に属性の名前、中央の列にデフォルト値、右の列にその属性の説明を示します。
instance
サーバーインスタンスを定義します。
サブ要素
なし
属性
次の表では、instance 要素の属性について説明しています。左の列に属性の名前、中央の列にデフォルト値、右の列にその属性の説明を示します。
web-module
Web モジュールを定義します。
サブ要素
なし
属性
次の表は、web-module 要素の属性を示します。左の列に属性の名前、中央の列にデフォルト値、右の列にその属性の説明を示します。
health-checker
クラスタのヘルスチェッカを設定します。
サブ要素
なし
属性
次の表では、health-checker 要素の属性について説明しています。左の列に属性の名前、中央の列にデフォルト値、右の列にその属性の説明を示します。
ロードバランスの要求に関する既知の問題ロードバランサには、HTTP/HTTPS 要求の処理に関する次のような制限があります。