ロードバランス環境の構築方法

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
  1. <%APACHE_HOME%/conf/httpd.conf> ファイルを開きます。
  2. 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
    
  3. 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
    
  4. 末尾に以下の設定を追加してください。
    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]
    
  5. 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
  1. 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>
  2. Server Farms のサブメニューより「Create Server Farm...」をクリックします。
  3. 「Server farm name」に「appservers」を設定し、「次へ」をクリックします。
  4. 「Server address」に「192.168.1.1」を設定し、「Advanced settings」をクリックします。
  5. 「applicationRequestRouting」の「httpPort」を「8080」に設定し、「Add」をクリックします。
  6. 同様に「192.168.1.2」を登録します。
  7. 「終了」をクリックします。
  8. サーバーファームへのリライトルールを自動で作成するかと聞かれます。本ドキュメントでは手動で作成するため、「いいえ」をクリックします。
  9. インターネット インフォメーション サービス (IIS) マネージャー より「IIS サーバ(ここでは WIN-QDQ41RVOU80)」「URL 書き換え」「機能を開く」の順にクリックします。
  10. 「規則の追加」をクリックします。
  11. 「空の規則」、「OK」をクリックします。
  12. 以下のように設定し、「適用」をクリックします。
    名前 ReverseProxyInboundStatic
    要求された URL パターンに一致する
    使用 正規表現
    パターン
    ^imart/(.*\.gif|.*\.png|.*\.jpg|.*\.css|
    .*\.js|.*\.swf|.*\.ico|.*\.json|.*\.jar|
    .*\.xml|.*\.yaml|.*\.txt|.*\.html|.*\.htm)$
    

    ※コピー&ペーストする場合は、改行コードを外し1行にしてください。

    大文字と小文字を区別しない チェックする
    アクションの種類 なし
    後続の規則の処理を停止する チェックする

  13. 同様に、以下の規則を設定します。
    名前 ReverseProxyInboundDynamic
    要求された URL パターンに一致する
    使用 正規表現
    パターン ^imart/(.*)
    大文字と小文字を区別しない チェックする
    アクションの種類 サーバー ファームにルーティング
    スキーム http://
    サーバー ファーム appservers
    パス /imart/{R:1}
    後続の規則の処理を停止する チェックする

  14. 「appservers」の「Server Affinity」設定画面を開きます。
  15. 「Client affinity」をチェックし、「適用」をクリックします。
  16.  IIS を再起動してください。