Bootstrap

Session 复制

  Tomcat 支持 Session 集群,可在各 Tomcat 服务器间复制全部 session 信息,当后端一台 Tomcat 服务器宕机后,Nginx 重新调度用户请求分配到另外一台服务器,客户端可从另一台 Tomcat 服务上获取用户的 session 信息。

  Session 集群可在 Tomcat 服务器规模(一般10台以下)不大时使用,否则会导致 Session 复制时性能代价过高。(浪费网络带宽,浪费内存资源)

(一台Nginx,两台tomcat)

1、配置各个机器的主机名
2、配置主机名与IP的映射
3、关闭防火墙和selinux

修改 Tomcat 配置文件 

[root@node1 tomcat]# vim /usr/local/tomcat/conf/server.xml

          <Engine name="Catalina" defaultHost="localhost">

将 Engine 这一行修改为:

          <Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"> #tomcat2 配置为jvmRoute="node2"

          <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />  # 去掉注释 (野路子)

( <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"

                            expireSessionsOnShutdown="false"

                            notifyListenersOnReplication="true"/>

           <Channel className="org.apache.catalina.tribes.group.GroupChannel">

                 <Membership className="org.apache.catalina.tribes.membership.McastService"

                                              address="228.25.25.4"

                                              port="45564"

                                              frequency="500"

                                              dropTime="3000"/>

                 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                                               address="auto"   # 自身IP地址

                                               port="4000"

                                               autoBind="100"

                                               selectorTimeout="5000"

                                               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"/>

            </Channel>

            <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>

            <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

            <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                                   tempDir="/tmp/war-temp/"

                                 deployDir="/tmp/war-deploy/"

                                  watchDir="/tmp/war-listen/"

                                   watchEnabled="false"/>

              <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

             <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>)(官方做法,在注释下添加如上代码,成功率更高)

[root@node1 ~]# tail -2 /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml

<distributable/>    #添加内容

</web-app>

重新启动 Tomcat

/usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh

netstat -lnpt | grep -E "8080|4000"        #4000 端口是多台Tomcat相互组播通信的端口

或     grep "4000" /usr/local/tomcat/logs/catalina.out

如果服务不能启动 (网络原因)(如果用的官方做法,不用加主播地址)

添加组播地址

route add -net 224.0.0.0 netmask 240.0.0.0 dev ens32 #自身的网卡名

 

转载于:https://www.cnblogs.com/2567xl/p/11582570.html

;