【Tomcat】Tomcat + Memcached 实现session共享

概述

  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下依赖如下:

     1 <dependency>
     2             <groupId>asm</groupId>
     3             <artifactId>asm</artifactId>
     4             <version>3.2</version>
     5         </dependency>
     6
     7         <dependency>
     8             <groupId>com.couchbase.client</groupId>
     9             <artifactId>couchbase-client</artifactId>
    10             <version>1.4.11</version>
    11         </dependency>
    12
    13         <dependency>
    14             <groupId>com.googlecode</groupId>
    15             <artifactId>kryo</artifactId>
    16             <version>1.04</version>
    17         </dependency>
    18
    19         <dependency>
    20             <groupId>de.javakaffee</groupId>
    21             <artifactId>kryo-serializers</artifactId>
    22             <version>0.11</version>
    23         </dependency>
    24
    25         <dependency>
    26             <groupId>de.javakaffee.msm</groupId>
    27             <artifactId>memcached-session-manager</artifactId>
    28             <version>1.8.2</version>
    29         </dependency>
    30
    31         <dependency>
    32             <groupId>de.javakaffee.msm</groupId>
    33             <artifactId>memcached-session-manager-tc7</artifactId>
    34             <version>1.8.2</version>
    35         </dependency>
    36
    37         <dependency>
    38             <groupId>com.googlecode</groupId>
    39             <artifactId>minlog</artifactId>
    40             <version>1.2</version>
    41         </dependency>
    42
    43         <dependency>
    44             <groupId>de.javakaffee.msm</groupId>
    45             <artifactId>msm-kryo-serializer</artifactId>
    46             <version>1.8.2</version>
    47         </dependency>
    48
    49         <dependency>
    50             <groupId>com.esotericsoftware</groupId>
    51             <artifactId>reflectasm</artifactId>
    52             <version>1.01</version>
    53         </dependency>
    54
    55         <dependency>
    56             <groupId>net.spy</groupId>
    57             <artifactId>spymemcached</artifactId>
    58             <version>2.11.4</version>
    59         </dependency>

  • 在tomcat安装目录下的context.xml文件中加入:
    1 <Manager
    2         className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    3         memcachedNodes="n1:127.0.0.1:11211"
    4         sticky="false"
    5         sessionBackupAsync="false"
    6         requestUriIgnorePattern=".*\.(ico|png|gif|jpg|jpeg|bmp|css|js|html|htm)$"
    7         transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    8       />
  • 在tomcat安装目录下的server.xml文件中加入:
    1 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

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

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

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

时间: 2024-12-20 12:51:23

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

Tomcat结合memcached实现sessio共享

Tomcat 使用memcached 实现session共享 系统环境: Centos6.5 x86_64 同台服务器上使用两个tomcat实例 安装jdk1.7 安装tomcat8.0.27 安装memcached yum install yum install java-1.7.0-openjdk.x86_64 java-1.7.0-openjdk-devel.x86_64 memcached -y 下载并安装tomcat8 wget http://mirrors.hust.edu.cn/a

Tomcat基于MSM+Memcached实现Session共享

前言 在Tomcat集群中,当一个节点出现故障,其他节点该如何接管故障节点的Session信息呢?本文带来的解决方案是基于MSM+Memcached实现Session共享. 相关介绍 MSM MSM--Memcached Session Manager是一个高可用的Tomcat Session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用Memcached存取Session,以实现高可用. 工作原理 Sticky Session(黏性) 模式

Tomcat集群使用Memcached实现Session共享

Session是什么? 用户访问服务器资源主要分成两类,一类是无状态访问,例如请求一张图片.另一类是有状态访问,这种情况下,服务器需要记录追踪用户状态,并根据用户所处状态做出不同响应,典型的例子是购物车.Session的作用就是在Web服务器上保持用户的状态信息. Tomcat集群为什么需要Session共享? 当客户端访问Tomcat集群时,所有的请求将被Nginx拦截,由Nginx做负载均衡后转发给后台真实Tomcat.按照这个流程就可能出现一个问题,当用户进行页面刷新或跳转时,每次请求将被

基于tomcat集群做session共享

前端代理服务器nginx:192.168.223.136 tomcat服务器:采用的一台多实例192.168.223.146:8081,192.168.223.146:8082(如何构建多实例tomcat,请参考前面的文章) 首先查看下tomcat的webapps目录架构: [[email protected] tomcat-instance]# pwd/usr/local/tomcat-instance[[email protected] tomcat-instance]# ll总用量 24-

nginx+tomcat8+memcached实现session 共享

操作环境: iP地址 角色 安装软件 10.43.2.135 nginx方向代理 memcached服务器 nginx   memcached 10.43.2.134 tomcat服务器 2个tomcat(端口分别为8080 8081) 实验中使用的软件如下: 实现思路: 第一步:针对10.43.2.134的操作 1.在10.43.2.134上安装2个tomcat 2.在$CATALINA/webapps/ROOT/下建立测试页面t.jsp 3.分别启动2个tomcat服务 4.打开http:/

nginx+tomcat8+memcached实现session共享具体操作

本次试验用到的软件包的版本如下: 一.针对10.43.2.134的操作 1.安装jdk环境 tar zxf jdk-8u5-linux-x64.tar.gz mkdir /usr/java mv jdk1.8.0_05/ /usr/java/ 编辑/etc/profile 在文档的末尾追加如下5行内容: JAVA_HOME=/usr/java/jdk1.8.0_05 JRE_HOME=/usr/java/jdk1.8.0_05/jre PATH=$PATH:$JAVA_HOME/bin:$JRE

Memcached实现Session共享

一.memcached安装 1. memcached安装和启动.查看进程 安装扩展源 yum install -y epel-release 安装软件.组件.工具包 yum install -y libevent memcached libmemcached 启动 /etc/init.d/memcached start 进程 ps aux |grep memcached 解释: -d  启动一个守护进程 -p  监听的端口,默认11211 -u  运行memcached用户 -m 内存大小,单位

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

session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Session就在不同发服务器上,A记住了用户的登录状态,可是下一次用户请求被分配到B去了怎么办?不可能让用户再登陆一次.所以要实现session共享. 方法 1.ip_hash,这是Nginx的轮询方法,用户登录站点时,就会一直在这台服务器上就不存在Session的问题 优点:不需要采用任何处理: 缺

tomcat篇之结合apache+tomcat+memcached做session共享

tomcat1:192.168.1.155 tomcat2:192.168.1.11 apache:192.168.1.155 前端代理apache设置,参考前面的tomcat文章(基于mod_proxy和mod_jk模块) 这里不再赘述,直接贴配置文件: cd /etc/httpd/conf.d [[email protected] conf.d]# cat mod_jk.conf LoadModule  jk_module  modules/mod_jk.so JkWorkersFile/e