tomcat8的session共享实现方案

tomcat8的session共享实现

下载tomcat

版本:apache-tomcat-8.0.53.zip

实现步骤,只需要两步

  1. 两个tomcat的server.xml都增加一样cluster配置

    <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="auto" 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.ClusterSessionListener" />
    </Cluster>
  2. 两个tomcat的应用的web.xml下都增加<distributable/>
    比如在:
    /Users/da/Library/Tomcat/apache-tomcat-8.0.53-8081/webapps/ROOT/WEB-INF/web.xml
    增加:
    <distributable/>
  3. 然后重启两台tomcat即可

新建jsp测试

session.jsp

<html>
<head>
<title>test2</title>
</head>
<body>
    SessionID is
    <%=session.getId()%>
    <BR> SessionIP is
    <%=request.getServerName()%>
    <BR> SessionPort is
    <%=request.getServerPort()%>
    <%
        out.println("Response from tomcat2");
    %>
</body>
</html>

比如放置在:
/Users/da/Library/Tomcat/apache-tomcat-8.0.53-8082/webapps/ROOT/session.jsp
另一台一样。

访问:
http://localhost:8081/session.jsp
http://localhost:8082/session.jsp

sessionid一致:

SessionID is 6E5D26E07FDE6FB5D01A59F457D64333
SessionIP is tomcat.chinaunicom.tech
SessionPort is 80 Response from tomcat1

SessionID is 6E5D26E07FDE6FB5D01A59F457D64333
SessionIP is tomcat.chinaunicom.tech
SessionPort is 80 Response from tomcat2

注意事项

  1. 需要使用tomcat8版本(上述测试在8.0.53上通过)。如果需要tomcat7,请告诉我,不是这种配置,我需要修改一下
  2. 不要漏了distributable的配置,漏了session也不能共享
  3. 这种方案只适用于并发量较少的应用,目前可以先用着,明天我再尝试并发量大的复杂一点的方案看行不行

参考官网:
http://localhost:8082/docs/cluster-howto.html
http://tomcat.apache.org/tomcat-8.0-doc/config/cluster.html
翻译:
http://wiki.jikexueyuan.com/project/tomcat/clustering.html

原文地址:http://blog.51cto.com/170023/2154861

时间: 2024-11-01 14:04:50

tomcat8的session共享实现方案的相关文章

Session共享实现方案调研

1.背景 随着互联网的日益壮大,网站的pv和uv成线性或者指数倍的增加.单服务器单数据库早已经不能满足实际需求.目前大多数大型网站的服务器都采用了分布式服务集群的部署方式,所谓集群,就是让一组计算机服务器协同工作,解决大并发,大数据量瓶颈问题.但是在服务集群中,session共享往往是一个比较头疼的问题.因为session是在服务器端保存的,如果用户跳转到其他服务器的话,session就会丢失,一般情况下,session不可跨服务器而存在.于是就有了分布式系统的session共享问题. 2.Se

Spring Session + Redis实现分布式Session共享

通常情况下,Tomcat.Jetty等Servlet容器,会默认将Session保存在内存中.如果是单个服务器实例的应用,将Session保存在服务器内存中是一个非常好的方案.但是这种方案有一个缺点,就是不利于扩展. 目前越来越多的应用采用分布式部署,用于实现高可用性和负载均衡等.那么问题来了,如果将同一个应用部署在多个服务器上通过负载均衡对外提供访问,如何实现Session共享? 实际上实现Session共享的方案很多,其中一种常用的就是使用Tomcat.Jetty等服务器提供的Session

跨服务器之间的session共享

跨服务器之间的Session共享方案需求变得迫切起来,最终催生了多种解决方案,下面列举4种较为可行的方案进行对比探讨: 1. 基于NFS的Session共享 NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发. 这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的 本地session目录即可,缺点是NFS依托于复杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件, 会由于共

分布式中使用Redis实现Session共享(二)

上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+iis实现负载均衡搭建负载均衡站点了,这里我们会搭建两个站点来验证redis实现的session是否能共享. 阅读目录 Session实现原理 session共享实现方案 问题拓展 总结 回到顶部 Session实现原理 session和cookie是我们做web开发中常用到的两个对象,它们之间会不会

【电商】nginx+tomcat+memcached实现session共享集群

在分布式多tomcat web集群环境下,首先要解决的是session的共享问题,一般的实现思路有: (1) session复制:多tomcat之间进行session的同步,集群中的tomcat存储相同的session信息 (2) 共享session存储:将session集中存储在同一个地方,如redis/memcached,甚至DB.tomcat本身的内存中并不存储session (3) session粘性:其实session粘性并不是session共享的方案,而是多tomcat的集群方案,配

spring-session用redis实现session共享实践

什么是spring session? Spring Session provides an API and implementations for managing a user’s session information. 简单一句话,spring session帮你管理用户的session信息. 为什么使用spring session? 通常情况下,Tomcat.Jetty等Servlet容器,会默认将Session保存在内存中.如果是单个服务器实例的应用,将Session保存在服务器内存中

.Net Core Web Api实践(二).net core+Redis+IIS+nginx实现Session共享

前言:虽说公司app后端使用的是.net core+Redis+docker+k8s部署的,但是微信公众号后端使用的是IIS部署的,虽说公众号并发量不大,但领导还是使用了负载均衡,所以在介绍docker+k8s实现分布式Session共享之前,就先介绍一下IIS+nginx实现Session共享的方案,两者其实区别不大,所以这篇着重介绍方案,下篇介绍测试的区别以及填坑的方式. 1.环境准备 操作系统:Windows10 IIS:需要安装模块 VS2019.本地Redis数据库.ngnix(win

生产-tomcat的session共享方案

生产-tomcat的session共享方案 在部署nginx+tomcat集群后,nginx采用负载均衡轮训模式,会出现访问时每个tomcat应用都会互相覆盖sessionID,导致sessionID不断变化,从而导致java一些功能实现不正常.作者查阅了不少文档,并且在测试环境和预生产环境进行各类测试,有两种方法可行. 应为目的只是实现session共享,杜绝session不断变化,所以解决方案越简单越好,本文属于实践文档,不会过多涉及原理和技术方面的东东,谷歌有详细相关技术介绍. 1    

Tomcat自带的Session共享方案实施记录

一般来说,在多个tomcat集群业务中,session会话共享是必须的需求,不然前端nginx转发过来的请求不知道之前请求在哪台tomcat节点上,从而就找不到session以至于最终导致请求失败.要实现tomcat session共享有多种方案,今天介绍下使用tomcat自带的cluster方式,在多个tomcat节点间自动实时复制session信息,配置起来很简单.tomcat自带的这种session共享方案,对于规模较小的tomcat集群来说够用了,但这个方案的效率比较低,在大并发下表现并