Develop with pleasure!

福岡でCloudとかBlockchainとか。

mod_jkでTomcatのクラスタ化

mod_jkを使用してTomcatクラスタ化環境を作ってみた。クラスタ化と言っても、セッションレプリケートはせず、sticky_sessionを有効にして処理を分散させるだけ。なので、セッションが有効な間のリクエストは同一サーバに割り振られる。

必要な作業としては、

  • Apacheのインストール
  • mod_jkのインストール
  • workers.properitesの設定
  • httpd.confの設定


で、いざ動作させると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とかが提供してる機能を分析してみるというのもありかな。