mod_jkを使用してTomcatのクラスタ化環境を作ってみた。クラスタ化と言っても、セッションレプリケートはせず、sticky_sessionを有効にして処理を分散させるだけ。なので、セッションが有効な間のリクエストは同一サーバに割り振られる。
必要な作業としては、
で、いざ動作させると1つのリクエストがworkers.properitesに定義したサーバにそれぞれ投げられバランシングされない…。
何故?としばらく悩んだが、結局原因は、起動するTomcat側のserver.xmlのEngineタグの定義で、jvmRoute属性を定義していなかったため。
基本的にworkers.propertiesファイルでロードバランシングするサーバの定義をワーカとして定義するが、その際のワーカ名をTomcatのserver.xmlのEngineタグにjvmRouteとして登録する必要があると。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="workers.propertiesに定義したワーカ名">
てっきり、workers.propertiesで定義したサーバのポート情報からサーバー探してくれるもんだと思った…。
でも、クラスタ環境を整えてサービスを提供しようと思うと、複数台のTomcatをどう管理していくかが重要。そういった意味では、SpringSourceのtc Serverとかが提供してる機能を分析してみるというのもありかな。