• 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 #自身的网卡名

  • 相关阅读:
    extern--C#调用C++等其他非托管代码
    unhandledException详细介绍
    MySql如何安装?
    Mindoc搭建流程
    反射_IsDefined判断方法上有自定义的标签
    WebApi_返回Post格式数据
    编码
    IP地址与MAC地址
    Tcp/Ip:Telnet指令
    create-react-app使用的问题
  • 原文地址:https://www.cnblogs.com/2567xl/p/11582570.html
Copyright © 2020-2023  润新知