Apache2.2と複数のTomcat6.0で負荷分散

やりたいこと

  • ApahceとTomcatを連携して動かしたい
  • Tomcatは複数稼動させます。同じサーバにポートを変えて複数のインスタンスをあげてもよいし、別のサーバで稼動させてもよい。
  • リクエストはランダムにTomcatに振り分けられる
  • いずれかのTomcatが落ちたら、自動的に生きているTomcatに振り分ける
  • セッション管理はとりあえずしなくてよい
  • SSLのデコードはフロントのApacheでやる

解決方法

mod_proxy_balancerを使います。
以下、httpd.confを抜粋して記載します。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
…中略…

<VirtualHost _default_:443>
…中略(SSLの鍵や証明書の設定など)…

  ProxyRequests Off
  ProxyPass /webapp1 balancer://mycluster/
  <Proxy balancer://mycluster/>
    BalancerMember ajp://localhost:8009/webapp1 loadfactor=10
    BalancerMember ajp://otherhost:8009/webapp1 loadfactor=10
  </Proxy>
</VirtualHost>

"LoadModule" で必要なモジュールを読み込みます。

"ProxyRequests Off" は、リバースプロキシとして利用するための設定です。

"ProxyPass /webapp1 balancer://mycluster/" は、443ポートに来る"/webapp1"以下のリクエストをmod_proxy_balancerで処理するための設定です。

"" で、どのTomcatに振り分けるかの設定を行います。ajp://と記述してTomcat側で設定したajpポートにディスパッチします。なお、Tomcat側でWebアプリが"/webapp1"で稼動していると仮定します。

どっちか一方のTomcatが落ちても、生きている方だけにリクエストを振り分けてくれます。