こんにちは、コブラです。
Apache-Tomcat連携、クラスタリングの設定については今回割愛するとして、
Tomcat6.0以降で強化されたそのクラスタリング機能を使ってTomcatクラスタを実現してみました。
でも、マルチキャスト通信ができない環境では使えない・・・
そこで、静的メンバで設定する方法をご紹介!
Server.xmlを編集します!
<br />
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"<br />
channelSendOptions="8"<br />
channelStartOptions="3"><br />
<!-- 全てのノード(サーバ)でセッション情報を共有 --><br />
<Manager className="org.apache.catalina.ha.session.DeltaManager"<br />
expireSessionsOnShutdown="false"<br />
notifyListenersOnReplication="true"/><br />
<Channel className="org.apache.catalina.tribes.group.GroupChannel"><br />
<!-- マルチキャスト通信の場合に使用 --><br />
<!--<br />
<Membership className="org.apache.catalina.tribes.membership.McastService"<br />
address="228.0.0.4"<br />
port="45564"<br />
frequency="500"<br />
dropTime="3000"/><br />
--><br />
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"<br />
address="192.168.0.1"<br />
port="8080"<br />
selectorTimeout="5000"<br />
maxThreads="6"/><br />
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"><br />
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/><br />
</Sender><br />
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor" staticOnly="true"/><br />
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/><br />
<!-- 静的メンバーの場合に使用 --><br />
<Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor"><br />
<!-- サーバ1台目 --><br />
<Member className="org.apache.catalina.tribes.membership.StaticMember"<br />
port="8080"<br />
host="192.168.0.1"<br />
uniqueId="{192,168,0,1,0,0,0,0,0,0,0,0,0,0,0,0}"/><br />
<!-- サーバ2台目 --><br />
<Member className="org.apache.catalina.tribes.membership.StaticMember"<br />
port="8080"<br />
host="192.168.0.2"<br />
uniqueId="{192,168,0,2,0,0,0,0,0,0,0,0,0,0,0,0}"/><br />
</Interceptor><br />
</Channel><br />
<!-- セッション共有しないリクエスト --><br />
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"<br />
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/><br />
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"<br />
tempDir="/tmp/war-temp/"<br />
deployDir="/tmp/war-deploy/"<br />
watchDir="/tmp/war-listen/"<br />
watchEnabled="false"/><br />
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/><br />
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/><br />
</Cluster><br />
注意すべき点はこちら!
・ReceiverタグとMemberタグのポートは同一のものにする
・セッション共有したいサーバのServer.xmlすべてに記述する
※ただし、ReceiverタグのIPアドレスはそれぞれのサーバのIPアドレスにする
・uniqueIdは16バイトで、一意になればいいのでIPアドレスが無難
これでOKです。
もし、Tomcatログにこんなログが出なかったら、
web.xmlの<distributable />タグなど、クラスタ自体の設定を見直してみてください。
WARNING: Manager [/examples], requesting session state from org.apache.catalina.tribes.membership.MemberImpl
[tcp://192.168.0.1:8080,192.168.0.1,8080, alive=0,id={・・・
かなりざっくりですが、意外とハマるところだと思います。
いい勉強になりました!
Apache, Tomcat, 社員:cobra
最近のコメント