Tomcat [クラスタリング]

クラスタリングとは2台のTomcat サーバー間でセッション情報を共有する事です。これにより 耐障害性が高まります。
更新日 2016-02-13

概要

負荷分散目的で2台以上のTomcat サーバーを用いて一つのコンテキストを運用する場合、それぞれの サーバー上で別々のセッションが生まれていては正常とは言えません。セッション情報を相互に共有しあう メカニズムがクラスタリングです。

LAN 内の複数台でクラスタリング

まずは公式サイトにあるドキュメント Clustering/Session Replication HOW-TOに目を通しておきましょう。

もっともシンプルな設定

公式ドキュメントによるもっともシンプルな設定は、下記の一文を$CATALINA/conf/server.xml のEngine ディレクティブに 記述するだけです。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />
これで動くならベストです(-o-;(かつて動いた時期もありました…)

動作確認

Tomcat 付属のmanager にてセッション情報を確認します。クラスタリングしているサーバーの一方にアクセスするとセッションが 作成されますが、これが別のサーバー側にも自動複製されるはずです。
http://server1:8080/manager/html
http://server2:8080/manager/html

動かない場合

まずマルチキャスト(228.0.04) が到達しているか、クラスタリング対象のマシン上で下記を試します。
tcpdump -n multicast and udp port 45564
iptables でTCP port 4000(デフォルト)は使えるように解放しておきます。また自分のホスト名を127.0.0.1 で解決してるとうまくいきません。 ちゃんと外から届くIPアドレスで設定しておきます(/etc/hosts)。

VPN 間でクラスタリングを行う

マルチキャスト(228.0.0.4) が通り、お互いのローカルIP アドレス(デフォルトのTCP ポートは 4000)に自由にアクセスできるなら可能です。 OpenVPN ならばサーバー側もクライアント側もブリッジ接続していればOK です。
VPN - OpenVPN を使う(ブリッジモード) を参照の事