5.4.4 実行環境での設定(Smart Composer機能を使用する場合)
振り分け先となるワーカのリストをロードバランサに定義することで,ラウンドロビン方式でワーカにリクエストを振り分けます。
振り分け先となる各ワーカに負荷分散値を設定して,リクエスト振り分けの比率を定義すると,ホストごとの負荷の割合を調整できます。リダイレクタは,この比率でHTTPリクエスト単位にラウンドロビンでリクエストを振り分けるので,比率が高いワーカほど転送されるリクエストの割合が多くなります。ただし,同じセッションに属するHTTPリクエストは前回と同じワーカに振り分けられます。
(1) 設定の手順
ラウンドロビン方式によるリクエスト振り分けは,次の手順で設定します。
-
workers.propertiesでロードバランサ,およびワーカを定義します。
- ロードバランサの定義
-
ワーカ名のリスト,ワーカのタイプ(「lb」を設定),負荷分散の対象となるワーカのリストなどを設定します。
- 各ワーカの定義
-
ワーカのタイプ(「ajp13」を設定),ポート番号,ホスト名,負荷分散値などを設定します。
標準で提供されるworkers.propertiesには,デフォルト値が定義されています。コメントとして定義されているデフォルトの定義を使用する場合は,該当する行の先頭の「#」を削除してください。
workers.properties(ワーカ定義ファイル)については,「13.2.4 workers.properties(ワーカ定義ファイル)」を参照してください。
-
mod_jk.confでURLパターンとワーカのマッピングを定義します。
すでにマッピングが定義されている場合は,定義を削除,または置き換えてください。
mod_jk.conf(HTTP Server用リダイレクタ動作定義ファイル)については,「13.2.2 mod_jk.conf(HTTP Server用リダイレクタ動作定義ファイル)」を参照してください。
-
Webサーバの環境を設定して,Webサーバを再起動します。
Webサーバの設定については,「付録D HTTP Serverの設定に関する注意事項」を参照してください。
(a) 注意事項
-
リダイレクタで負荷分散を使用する場合に,あるワーカで障害を検出すると,障害を検出してから60秒間はそのワーカはリダイレクト先ワーカの選択肢から除外されます。そのため,障害が回復しても,最大で60秒間はそのワーカが使用されない場合があります。
-
UNIXの場合,HTTP Serverのサーバプロセスを負荷に応じて生成・消滅させているときは,workers.propertiesの最初に定義したワーカによって多く割り振られます。また,サーバプロセス数を固定にしても,リクエストがどのサーバプロセスに割り振られるかは不定のため,同じ負荷分散値を指定してもラウンドロビンにならないことがあります。サーバプロセスは,消滅しなければ負荷に応じて増えてもよいため,サーバプロセスが短時間で生成・消滅しないようにディレクティブを指定する必要があります。
HTTP Serverのhttpsd.confのディレクティブが次に示す条件を満たすように,指定してください。
条件
意味
MaxSpareServers ≧ MaxClients
サーバプロセスはMaxClientsまで増加し,処理終了後も常駐します。
MaxRequestsPerChild 10000
HTTPリクエストを10,000回処理後,リフレッシュのためにサーバプロセスを終了させます(10,000は推奨値)。振り分け先のJ2EEサーバ数に対して十分に大きな値を指定します。
StartServers = MaxClients
最初に全サーバプロセスを起動しておく場合に指定します。
(b) ディレクティブの指定例
StartServers 256 MaxClients 256 MaxSpareServers 256 MaxRequestsPerChild 10000
(2) workers.propertiesおよびmod_jk.confでの設定
ラウンドロビン方式によるリクエストの振り分けの設定は,workers.propertiesおよびmod_jk.confで定義します。workers.propertiesおよびmod_jk.confで定義するキーを次の表に示します。
ファイルの種類 |
キー名 |
説明 |
---|---|---|
workers.properties |
worker.list |
一つまたは複数のワーカ名のリストを指定します。 |
worker.<ワーカ名>.host |
ワーカのホスト名,またはIPアドレスを指定します。 |
|
worker.<ワーカ名>.port |
ワーカのポート番号を指定します。 |
|
worker.<ワーカ名>.type |
ワーカのタイプを指定します。ロードバランサには「lb」を,負荷分散の対象となるワーカには「ajp13」を指定します。 |
|
worker.<ワーカ名>.balanced_workers |
負荷分散の対象となるワーカのリストを指定します。 |
|
worker.<ワーカ名>.lbfactor |
負荷分散値を指定します。 |
|
worker.<ワーカ名>.cachesize |
リダイレクタで再利用するワーカのコネクション数を指定します。 Windowsの場合にだけ指定できます。 |
|
worker.<ワーカ名>.receive_timeout |
通信タイムアウト値を指定します。 |
|
worker.<ワーカ名>.delegate_error_code |
エラーページの作成をWebサーバに委任する場合に利用するエラーステータスコードを指定します。 |
|
mod_jk.conf |
JkMount |
URLパターンと,worker.listで指定されているワーカのどれかとの組み合わせを指定します。 |
ワーカの種類ごとに指定できるパラメタを次の表に示します。
キー名 |
ワーカの種類(worker.<ワーカ名>.typeキーの指定値) |
|
---|---|---|
ロードバランサ (「lb」を指定) |
ワーカ (「ajp13」を指定) |
|
worker.<ワーカ名>.host |
× |
○ |
worker.<ワーカ名>.port |
× |
○ |
worker.<ワーカ名>.type |
○ |
○ |
worker.<ワーカ名>.balanced_workers |
○ |
× |
worker.<ワーカ名>.lbfactor |
× |
△ |
worker.<ワーカ名>.cachesize |
× |
△ |
worker.<ワーカ名>.receive_timeout |
× |
△ |
worker.<ワーカ名>.delegate_error_code |
× |
△ |
(3) 設定例
ラウンドロビン方式によるリクエスト振り分けの例を次の図に示します。
この例では,「/examples」以下のリクエストがホストA,ホストBに同じ比率で振り分けます。ホストAのワーカ名は「worker1」,ホストBのワーカ名は「worker2」です。
workers.propertiesの例を次に示します。ここでは,ロードバランサとワーカを定義します。リクエストを同じ比率で振り分けるので,「worker1」と「worker2」の負荷分散値はどちらも「1」を指定します。
- workers.propertiesの例(Windowsの場合)
worker.list=loadbalancer1 worker.loadbalancer1.balanced_workers=worker1,worker2 worker.loadbalancer1.type=lb worker.worker1.port=8007 worker.worker1.host=hostA worker.worker1.type=ajp13 worker.worker1.cachesize=64 worker.worker1.lbfactor=1 worker.worker2.port=8007 worker.worker2.host=hostB worker.worker2.type=ajp13 worker.worker2.cachesize=64 worker.worker2.lbfactor=1
- workers.propertiesの例(UNIXの場合)
worker.list=loadbalancer1 worker.loadbalancer1.balanced_workers=worker1,worker2 worker.loadbalancer1.type=lb worker.worker1.port=8007 worker.worker1.host=hostA worker.worker1.type=ajp13 worker.worker1.lbfactor=1 worker.worker2.port=8007 worker.worker2.host=hostB worker.worker2.type=ajp13 worker.worker2.lbfactor=1
mod_jk.confの例を次に示します。ここでは,ロードバランサ名「loadbalancer1」を指定します。
- mod_jk.confの例
JkMount /examples/* loadbalancer1