** Tomcatセッションレプリケーションメモ [#z56de2f7]
> ローリングアップグレードの手段としてセッションレプリケーションを試してみます。レプリケーションができていればWARの更新時にワーカーを順番に再起動してもサービスは無停止でアップグレードできるはずです。

- Apache 2.2.25
- Tomcat 6.0.35

> ローカルに2台のTomcatを立ち上げ、1台のApacheから割り振る方法をやってみます。

*** Apacheの設定 [#of67b55f]
- httpd.conf
 ProxyPass /scone/ balancer://workergroup/
 <Proxy balancer://workergroup>
         BalancerMember ajp://localhost:8009/scone/ ping=500ms retry=10
         BalancerMember ajp://localhost:18009/scone/ ping=500ms retry=10
         ProxySet lbmethod=bybusyness
 </Proxy>

*** Tomcatの設定 [#u8cba4d2]
- 2台のTomcatのアプリケーションのContextに''distributable''を追加します。
 <Context path="/scone" reloadable="false" distributable="true">

- server.xmlのHost要素に以下を追加しました。
 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">
   <Manager className="org.apache.catalina.ha.session.DeltaManager"
         expireSessionsOnShutdown="false"
         notifyListenersOnReplication="true"
         mapSendOptions="6"/>
    <Channel className="org.apache.catalina.tribes.group.GroupChannel">
      <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="localhost"
                      port="5000"
                      selectorTimeout="100"
                      maxThreads="6"/>
      <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
        <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
      </Sender>
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
    </Channel>
    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
    <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>
 </Cluster>

> Managerで設定した''DeltaManager''はAll-to-Allのレプリケーションになるそうです。他にBackupManagerという1台に複製を送信するマネージャーがあるそうです。

> 今回はレプリケーションするTomcat2台ともローカルホストなので、Receiverで使うポートが2台で競合しないようにします。
     <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                     address="localhost"
                     port="5001"
                     selectorTimeout="100"
                     maxThreads="6"/>

*** テスト [#m00eb945]
> Apache、Tomcat2台を立ち上げ、ブラウザで接続してみます。ワーカーを1台止めても、即座に切り替わる様子が実験できました。再び落としたワーカーを立ち上げ、別の方を止めても大丈夫。これはすごい!これならジオンはあと10年は戦える。

- [[Apache モジュール mod_proxy :http://httpd.apache.org/docs/2.2/mod/mod_proxy.html]]

----
#comment(nodate);

[ 編集 | 差分 | 添付 | 複製 | 名前変更 | リロード ]   [ 新規 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]