Tomcatクラスタ マルチキャストと静的メンバ
こんにちは、コブラです。
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={・・・
かなりざっくりですが、意外とハマるところだと思います。
いい勉強になりました!
最近のコメント