linux系统tomcat使用session复制和共享

session复制和session共享技术

高可用性和容错性:通过复制或共享Session,当一个Tomcat实例发生故障或停机时,其他实例可以接管并继续处理用户请求,而不会丢失Session数据。这确保了应用程序的高可用性和容错性。

负载均衡:当有多个Tomcat实例运行时,Session复制或共享可以实现负载均衡。用户的请求可以分散到不同的实例上,提高系统的整体性能和吞吐量。

无状态化应用设计:通过将Session数据从应用服务器中移出,可以使应用程序变得更加无状态化。这意味着每个请求可以独立处理,不依赖于特定的服务器状态,从而提高应用程序的可扩展性。

保持用户会话状态:通过Session复制或共享,用户的会话状态可以在多个请求之间得到保持。这对于需要跨页面或多个请求保持用户身份、购物车信息、用户首选项等状态非常重要。

示例:方法一

在tomcat/conf/server.xml中配置,所有实例都要添加

vim tomcat/conf/server.xml


<!-- 在配置文件中找到Engine行,在标签内添加jvmRoute,并在下方添加内容 -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
		<!-- jvmRoute的内容是本机本地解析的主机名 -->
        <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.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="10.12.153.245"
                      <!-- 本地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.MessageDispatchInterceptor"/>
          </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.ClusterSessionListener"/>
        </Cluster>

web.xml中设置,所有实例都要添加

vim tomcat/webapps/ROOT/WEB-INF/web.xml 
<display-name>Welcome to Tomcat</display-name> 
<distributable/>   #添加这一行

配置测试页面,所有实例都要添加

vim tomcat/webapps/ROOT/session.jsp
Session ID:<%= session.getId() %><BR>
SessionPort:<%= request.getServerPort() %>
<% out.println("This tomcat server 10.12.153.245");%>

重启所有tomcat实例

浏览器访问,不同的实例的Session ID实现共享了

方式一:ip:实例端口,访问页面

方式二:使用nginx做负载均衡,访问ip即可
官方文档:https://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html
官方建议:不超过四个节点可以使用这个方法,因为他是all-to-all的模式,频繁的广播session信息会造成负载过高,超过四个节点可以使用redis+tomcat+nginx做session复制和共享

示例:方法二

使用redis+tomcat+nginx做session复制和共享

你可能感兴趣的:(linux,linux,tomcat,firefox)