概述

  web项目中,Tomcat的访问量总是有限的,这时候就需要用到Tomcat集群,多个Tomcat的时候就要考虑Session共享的问题,这里介绍一种使用Memcached做Session共享的解决方案

环境

  操作系统:Linux( centOS 6..5 版)

  软件:Tomcat7

       Memcached

实现原理

  Tomcat + Memcached 实现session共享流程图

  

配置

  •   安装Tomcat 2个和Memcached 1个,参考【Linux】Tomcat安装及一个服务器配置多个Tomcat 和 【Linux】Memcached安装
  • 配置Tomcat,到tomcat的安装目录lib中,加入:需要的jar包
      
      maven下依赖如下:
     <dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.2</version>
    </dependency> <dependency>
    <groupId>com.couchbase.client</groupId>
    <artifactId>couchbase-client</artifactId>
    <version>1.4.11</version>
    </dependency> <dependency>
    <groupId>com.googlecode</groupId>
    <artifactId>kryo</artifactId>
    <version>1.04</version>
    </dependency> <dependency>
    <groupId>de.javakaffee</groupId>
    <artifactId>kryo-serializers</artifactId>
    <version>0.11</version>
    </dependency> <dependency>
    <groupId>de.javakaffee.msm</groupId>
    <artifactId>memcached-session-manager</artifactId>
    <version>1.8.2</version>
    </dependency> <dependency>
    <groupId>de.javakaffee.msm</groupId>
    <artifactId>memcached-session-manager-tc7</artifactId>
    <version>1.8.2</version>
    </dependency> <dependency>
    <groupId>com.googlecode</groupId>
    <artifactId>minlog</artifactId>
    <version>1.2</version>
    </dependency> <dependency>
    <groupId>de.javakaffee.msm</groupId>
    <artifactId>msm-kryo-serializer</artifactId>
    <version>1.8.2</version>
    </dependency> <dependency>
    <groupId>com.esotericsoftware</groupId>
    <artifactId>reflectasm</artifactId>
    <version>1.01</version>
    </dependency> <dependency>
    <groupId>net.spy</groupId>
    <artifactId>spymemcached</artifactId>
    <version>2.11.4</version>
    </dependency>
  • 在tomcat安装目录下的context.xml文件中加入:
     <Manager
    className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:127.0.0.1:11211"
    sticky="false"
    sessionBackupAsync="false"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|jpeg|bmp|css|js|html|htm)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
  • 在tomcat安装目录下的server.xml文件中加入:
     <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

    第二个Tomcat中设置 jvmRoute="tomcat2", 用来区分tomcat

  • 在tomcat中添加测试界面,session.jsp
     <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <BR>
    SessionID:<%=session.getId()%>
    <BR>
    SessionIP:<%=request.getServerName()%>
    <BR>
    SessionPort:<%=request.getServerPort()%>
    <BR>
  • 在同一个浏览器中,打开2个tomcat的测试界面,sessionId相同,表示通过Memcached实现的session共享,如下

  注:此方案和可以配合nginx使用,利用nginx分发请求来访问不同的tomcat,而session又是共享的

【Tomcat】Tomcat + Memcached 实现session共享的更多相关文章

  1. Tomcat通过Memcached实现session共享的完整部署记录

    对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...

  2. Nginx+Tomcat+Memcached实现tomcat集群和session共享

    一.Nginx安装 详见前文:http://www.cnblogs.com/yixiwenwen/p/3574097.html 二.memcached安装和启动 详见前文:http://www.cnb ...

  3. 分布式Session共享(二):tomcat+memcached实现session共享

    一.前言 本文主要测试memcached实现session共享的实现方式,不讨论如何让nginx参与实现负载均衡等. 二.环境配置 本测试在Window下进行 name version port To ...

  4. 基于tomcat集群做session共享

    前端代理服务器nginx:192.168.223.136 tomcat服务器:采用的一台多实例192.168.223.146:8081,192.168.223.146:8082(如何构建多实例tomc ...

  5. Nginx + Memcached 实现Session共享的负载均衡

    session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Se ...

  6. 关于 tomcat 集群中 session 共享的三种方法

    前两种均需要使用 memcached 或redis 存储 session ,最后一种使用 terracotta 服务器共享. 建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单 ...

  7. Nginx和Tomcat负载均衡实现session共享(转)

    以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...

  8. Tomcat通过Redis实现session共享的完整部署记录

    对于生产环境有了一定规模的tomcat集群业务来说,要实现session会话共享,比较稳妥的方式就是使用数据库持久化session.为什么要持久化session(共享session)呢?因为在客户端每 ...

  9. Tomcat利用MSM实现Session共享方案解说

    Session共享有多种解决方法,常用的有四种:1)客户端Cookie保存2)服务器间Session同步3)使用集群管理Session(如MSM) 4)把Session持久化到数据库 针对上面Sess ...

随机推荐

  1. nutch笔记

    1.Nutch 是一个开源Java实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫.

  2. mysql5.6 基于Binlog ROW记录方式进行数据恢复(无备份)

    数据库配置注意事项 /etc/my.cnf 必须要开户binlog支持,字符集要求 是utf8 binlog类型为row server-id=121 log_bin=/home/mysqllog bi ...

  3. pta l3-20(至多删三个字符)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805046946938880 题意:给定一个长度<=106 ...

  4. Mac idea error=13, Permission denied

    问题 12:26 Error running 'rs8080': Cannot run program "/Users/xxx/software/apache-tomcat-8.5.37/b ...

  5. vue使用日期时间插件layDate

    项目中需要用到日期时间插件,尝试用bootstrap.element的时间插件都各有各的报错,对于一个菜鸟来说真的是很痛苦啊.终于,最后用了layDate实现了需要的功能 最终效果: 使用步骤: 1. ...

  6. c++ sizeof,strlen, length

    #include <map>#include <iostream>#include <algorithm>#include <functional>#i ...

  7. 使用命令行执行sql文件

    用Navicat 导入sqlserver数据库时,出现了out of memory异常,百度无果,想起之前用命令行导入过,再次试了一下成功 用法: 打开执行命令: sqlcmd -S localhos ...

  8. django os.environ慎用setdefault操作环境变量!

    在绝大多数情况下,如果需要在程序运行过程中设置环境变量,使用os.environ.setdefault函数是没有任何问题的,但是有两种场景下setdefault会造成意外的问题,需要慎用: 如果程序执 ...

  9. mysql 常用 sql

    查询表创建时间.修改时间等 SELECT * FROM information_schema.tables    WHERE table_schema='ty_supplier' AND table_ ...

  10. c# 策略模式 加工厂模式-对象与行为分离

    计算器程序 策略模式是一种行为学模式.行为是同等级的算法  ,这些行为每个模式封装到一个类里 上端提供数据   ,下端提供算法 ,中间层context context  把上端的数据和算法  放到co ...