ロードバランス環境の構築方法
Webサーバと intra-mart Accel Platform 間でロードバランスを行いながら連携を行う設定例を紹介します。
以下の手順を参考として、各種要件・ご利用の環境に合わせて環境構築を行ってください。
Apache HTTP Server を使用している場合
はじめに
ここでは Apache のロードバランス機能を利用し、Webサーバと intra-mart Accel Platform の連携を行う場合の設定例を紹介します。
前提条件
「静的ファイルの配置」および「アクセスログの編集」の設定が終わっていることとします。
設定手順はApache HTTP Server を参照してください。
モジュールの取得
本ドキュメントでは以下の Apache モジュールを利用します。
取得に当たっては、Apacheの各マニュアルなどを参照してください。
- mod_proxy
- mod_rewrite
- mod_headers
- mod_proxy_balancer
- mod_slotmem_shm (Apache 2.4 以降の場合)
- mod_lbmethod_byrequests (Apache 2.4 以降の場合)
- mod_proxy_wstunnel
手順
以降の手順では下記の環境を想定した手順を記載します。
コンテキストパス | imart |
apacheのドキュメントルート | /usr/local/apache/htdocs |
静的ファイルの展開フォルダ | /usr/local/apache/htdocs/imart |
ロードバランスするサーバー1のIPアドレス | 192.168.1.1 |
ロードバランスするサーバー1のポート番号 | 8080 |
ロードバランスするサーバー2のIPアドレス | 192.168.1.2 |
ロードバランスするサーバー2のポート番号 | 8080 |
- <%APACHE_HOME%/conf/httpd.conf> ファイルを開きます。
- Dynamic Shared Object (DSO) Support エリアに以下の設定を追加またはコメントアウトを外してください。
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule headers_module modules/mod_headers.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
- Apache 2.4 以降を使用している場合、Dynamic Shared Object (DSO) Support エリアに以下の設定を追加またはコメントアウトを外してください。
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
- 末尾に以下の設定を追加してください。
AllowEncodedSlashes On RewriteEngine On RewriteCond %{REQUEST_URI} !^/imart/reverse_proxy/ RewriteCond %{REQUEST_URI} ^/imart/(.*\.gif|.*\.GIF)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.png|.*\.PNG)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.jpg|.*\.JPG)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.jpeg|.*\.JPEG)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.css|.*\.CSS)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.js|.*\.JS)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.swf|.*\.SWF)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.ico|.*\.ICO)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.svg|.*\.SVG)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.json|.*\.JSON)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.jar|.*\.JAR)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.xml|.*\.XML)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.yaml|.*\.YAML)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.txt|.*\.TXT)$ [OR] RewriteCond %{REQUEST_URI} ^/imart/(.*\.html|.*\.HTML|.*\.htm|.*\.HTM)$ RewriteRule ^/imart/(.*)?$ /imart/$1 Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED <Proxy balancer://appservers> BalancerMember http://192.168.1.1:8080/imart route=app-0 loadfactor=50 BalancerMember http://192.168.1.2:8080/imart route=app-1 loadfactor=50 ProxySet failonstatus=502 </Proxy> <Proxy balancer://wsservers> BalancerMember ws://192.168.1.1:8080/imart route=app-0 loadfactor=50 BalancerMember ws://192.168.1.2:8080/imart route=app-1 loadfactor=50 ProxySet stickysession=ROUTEID failonstatus=502 </Proxy> ProxyPreserveHost On ProxyPass /imart/ balancer://appservers/ lbmethod=byrequests nocanon stickysession=ROUTEID ProxyPassReverse /imart/ balancer://appservers/ nocanon RewriteCond %{HTTP:Connection} Upgrade [NC] RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteRule ^/imart/(.*)?$ balancer://wsservers/$1 [P,L]
- Apache を再起動してください。
Internet Information Services(IIS) を使用している場合
はじめに
ここでは IIS のサーバーファーム機能を利用し、Webサーバと intra-mart Accel Platform の連携を行う場合の設定例を紹介します。
前提条件
IIS の設定が終わっていることとします。
設定手順はInternet Information Services(IIS) を参照してください。
手順
以降の手順では下記の環境を想定した手順を記載します。
intra-mart Accel Platform のコンテキストパス | imart |
IIS のルート ディレクトリ | C:\inetpub\wwwroot |
静的ファイルの展開フォルダ | C:\imart |
ロードバランスする Resin サーバ1の IP アドレス | 192.168.1.1 |
ロードバランスする Resin サーバ1のポート番号 | 8080 |
ロードバランスする Resin サーバ2の IP アドレス | 192.168.1.2 |
ロードバランスする Resin サーバ2のポート番号 | 8080 |
- web.config から下記の設定を取り除きます。
<rewrite> <rules> <clear></clear> <rule name="ReverseProxyInboundStatic" stopprocessing="true"> <match url="^imart/(.*\.gif|.*\.png|.*\.jpg|.*\.css|.*\.js|.*\.swf|.*\.ico|.*\.json|.*\.jar|.*\.xml|.*\.yaml|.*\.txt|.*\.html|.*\.htm)$"> <action type="None"></action> </match> </rule> <rule name="ReverseProxyInboundDynamic" stopprocessing="true"> <match url="^imart/(.*)"> <action type="Rewrite" url="http://192.168.1.1:8080/imart/{R:1}"></action> </match> </rule> </rules> </rewrite>
これにより、web.config の内容は以下のようになります。
<configuration> <system.web> <httpruntime maxrequestlength="102400" requestpathinvalidcharacters=""></httpruntime> <customerrors mode="Off"></customerrors> </system.web> <system.webserver> <security> <requestfiltering> <requestlimits maxallowedcontentlength="104857600"></requestlimits> </requestfiltering> </security> <httperrors errormode="Detailed"></httperrors> </system.webserver> </configuration>
- Server Farms のサブメニューより「Create Server Farm...」をクリックします。
- 「Server farm name」に「appservers」を設定し、「次へ」をクリックします。
- 「Server address」に「192.168.1.1」を設定し、「Advanced settings」をクリックします。
- 「applicationRequestRouting」の「httpPort」を「8080」に設定し、「Add」をクリックします。
- 同様に「192.168.1.2」を登録します。
- 「終了」をクリックします。
- サーバーファームへのリライトルールを自動で作成するかと聞かれます。本ドキュメントでは手動で作成するため、「いいえ」をクリックします。
- インターネット インフォメーション サービス (IIS) マネージャー より「IIS サーバ(ここでは WIN-QDQ41RVOU80)」「URL 書き換え」「機能を開く」の順にクリックします。
- 「規則の追加」をクリックします。
- 「空の規則」、「OK」をクリックします。
- 以下のように設定し、「適用」をクリックします。
名前 ReverseProxyInboundStatic 要求された URL パターンに一致する 使用 正規表現 パターン ^imart/(.*\.gif|.*\.png|.*\.jpg|.*\.css| .*\.js|.*\.swf|.*\.ico|.*\.json|.*\.jar| .*\.xml|.*\.yaml|.*\.txt|.*\.html|.*\.htm)$
※コピー&ペーストする場合は、改行コードを外し1行にしてください。
大文字と小文字を区別しない チェックする アクションの種類 なし 後続の規則の処理を停止する チェックする - 同様に、以下の規則を設定します。
名前 ReverseProxyInboundDynamic 要求された URL パターンに一致する 使用 正規表現 パターン ^imart/(.*)
大文字と小文字を区別しない チェックする アクションの種類 サーバー ファームにルーティング スキーム http:// サーバー ファーム appservers パス /imart/{R:1} 後続の規則の処理を停止する チェックする - 「appservers」の「Server Affinity」設定画面を開きます。
- 「Client affinity」をチェックし、「適用」をクリックします。
- IIS を再起動してください。