2008年07月22日

クラスタ構成のTomcatをApacheでロードバランスする

ApacheとTomcatの連携ができたら、次は冗長化を行ってみる。

とりあえず実現したい内容は、APサーバーへの負荷分散とフェールオーバー。
それと、APサーバー同士でのセッションレプリケーション。

構築環境は相変わらす、Apache2.2.8とTomcat6.0.16。

まずApache側の設定。http.conf内の

#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

の2行をコメント解除する。
もし、上記2行がない場合は、Apacheを再インストール(./configure時に上記2つの追加を忘れないように。)、もしくは、apxsにてモジュールを追加しよう。

前回、

<Location />
ProxyPass ajp://localhost:8009/
</Location>

としていた部分を、

<Location />
ProxyPass balancer://tomcat/ stickysession=JSESSIONID nofailover=Off
</Location>

<Proxy balancer://tomcat/>
BalancerMember ajp://localhost:8009/ route=jvm1 loadfactor=100
BalancerMember ajp://localhost2:8009/ route=jvm2 loadfactor=1
</Proxy>

という風にする。

ちょっと、解説。まず、ProxyPassの項目。

・balancer://tomcat/
バランサー名称。どのbalancerを使うかを決定している。

・stickysession=JSESSIONID
この設定をしないで、動作させると毎回アクセスするAPサーバーが変わってしまう。
最初に使用したサーバを使用し続け、障害時にのみ別のサーバに切り替わるようにしたい場合もあると思います。その場合はstickysessionを指定します。

今回はTomcatを利用しているため、JSESSIONIDを基にリクエストを流すAPサーバーを決めようということです。

・nofailover=Off
アプリケーションサーバがフェールオーバーに対応していれば、nofailover=Offとする。
今回はTomcatでセッションレプリケーションを実現させるから、フェールオーバーに対応しているつもり。

次にBalancerMemberの項目

・ajp://localhost:8009/
APサーバーのパス。

・route=jvm1
これが上記のstickysession=JSESSIONIDの関連している。
これはURLやcookie内のJSESSIONIDの後にピリオドを付加して、その後ろにrouteの文字列を付加することでサーバを割り振るための設定。
要は、JSESSIONIDに".jvm"があれば、その定義しているAPサーバーへ割り振ると解釈している。
これで、同じセッション間は同じAPサーバーが処理するようになっているつもり。

・loadfactor=100
処理する割合を1〜100の範囲で指定できる。
今回は、localhost2はバッチ系の処理をメインにしてもらう予定なので、localhostの1/100のリクエスト量だけを処理して貰うつもり。

Apache側の設定はこんなもんかな。


次はTomcatの設定。まずは、JSESSIONIDにrouteの文字列を付加する設定。
mod_proxy_balancerは文字列を読み取ってサーバを割り振ることだけで、
実際のJSESSIONIDはTomcatでやんないとダメ。

では早速、server.xml内の

<!-- You should set jvmRoute to support load-balancing via AJP ie :-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

上記のようにjvmRoute="jvm1"を追加するだけ。
もちろん、もう一台のAPサーバーには、jvmRoute="jvm2"とする。

実に簡単。これで、APサーバー毎にセッションIDに特定の文字を付加するようになり、Apacheはそれを判断してバランシングできるようになった。
また、一方のAPサーバーがダウンした場合はそれを検知し、正常なAPサーバーにリクエストを渡してくれる。俗に言うフェールオーバー機能も完成。便利だ。

次は、Tomcat間のセッションレプリケーションだけど、疲れたんで次回にしよう。。。


posted by hana at 23:16| Comment(0) | TrackBack(1) | Apache Software関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック

PoundとApache httpd
Excerpt: pound機能と実現のためのapacheモジュールを調べてみました。 とりあえずpound基本機能を実現するためのモジュールです。 ただし、細かい設定での自由度については調査していません。 また、パフ..
Weblog: SAS Wiki (PukiWiki/TrackBack 0.3)
Tracked: 2009-07-16 14:57
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。