Tomcat使用Memcached Session Manager管理Session
Tomcat使用Memcached Session Manager管理Session
废话不多说,直接进入主题。项目使用阿里云负载均衡+ECS服务器集群进行部署,Tomcat使用8.5版本。阿里云负载均衡提供会话保持功能,开启此功能后,同一IP地址的请求将转发到同一台后端ECS服务器处理,每台ECS中的Tomcat各自管理各自的Session,互不相关。
但是此功能并不能满足实际需求,比如客户端从WIFI切换为4G网络后ip改变,请求有可能被转发到不同的ECS服务器上,导致登录失效。为此,我们需要统一管理所有ECS上的Tomcat中的Session,这里我们以阿里云的云数据库Memcache版(高速缓存)作为Session的载体,使用Memcached Session Manager进行统一的Session管理。
一、阅读官方文档
Memcached Session Manager官方配置文档地址(须翻墙):
https://code.google.com/archive/p/memcached-session-manager/wikis/SetupAndConfiguration.wiki
结合文档和项目的实际情况,可以总结出以下信息:
- 需要为Tomcat添加Memcached Session Manager相关的jar包。不同的Tomcat版本所使用的包不同,Memcached Session Manager目前支持Tomcat6、7、8(包括8.5)。这些jar包均须放入Tomcat中。
- 可以根据需要,下载对象序列化工具相关的jar包。当然不下载也可以,Memcached Session Manager会默认使用java原生的序列化工具,对要存入和取出memcached的对象进行序列化和反序列化。但是根据网上的一些资料来看,java原生的序列化工具效率并不高,Memcached Session Manager推荐使用其他的序列化工具,比如我们接下来要使用的kryo。kryo相关的jar包可以放入Tomcat中,也可以放入项目中,但是为了统一管理,我们会把这些jar包放入Tomcat中。
- 配置Tomcat目录下的conf/context.xml文件,添加Manager。
二、下载jar包
这里我们使用Gradle下载相关jar包。使用Maven的,请自行查阅相关文档。
build.gradle文件内容如下:
apply plugin: 'java'
repositories{
maven {
url "http://maven.aliyun.com/nexus/content/groups/public"
}
mavenCentral()
}
dependencies{
compile group: 'de.javakaffee.msm', name: 'memcached-session-manager-tc8', version: '2.1.1' // 必须
compile group: 'de.javakaffee.msm', name: 'msm-kryo-serializer', version: '2.1.1' // 非必须
}
task getJars(type: Copy) {
from configurations.runtime
into 'lib' // 获取到的jar包位置
}
安装Gradle,配置环境变量,cmd进入此文件所在目录,运行:gracle getJars。命令完成后,即可在lib目录下找到所有需要的jar包。为了便于区分和管理,重命名所有jar,名字前加均前缀“msm-”,再将所有这些jar包放入Tomcat/lib目录下。当然不改名或按其他规则改名也没有任何问题。
动手能力强,并且对这方面比较有兴趣的同学,还可以尝试手工下载各个jar包。下载应以Memcached Session Manager和Memcached Session Manager Kryo Serializer为基础,配合Maven中央库http://mvnrepository.com,通过各自的Compile Dependencies列表递归查找并下载相应的jar包。
三、配置Manager
修改Tomcat/conf/context.xml(或项目/META-INF/context.xml),添加如下Manager
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="高速缓存ip:11211"
username="用户名"
password="密码"
memcachedProtocol="binary"
sticky="false"
requestUriIgnorePattern=".*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html|htm|xml|json)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
这些配置的说明,可以通过阅读de.javakaffee.web.msm.MemcachedBackupSessionManager类的源码了解。源码可以从Gradle本地库中获取,因为下载jar包是已经连源码包也一并下载了。Gradle本地库一般位于C:\Users\某用户.gradle目录中。这里对几个常用配置做些说明:
- memcachedNodes:memcached节点配置项。可以配置多个memcached,这里我们只配了一个。
- memcachedProtocol:默认为text,这里我们配置为binary,因为阿里云的memcached使用binary协议。
- sticky:true为sticky模式,false为non-sticky。当配置为sticky模式时,Tomcat以本地Session为主,memcached上的Session为备;配置为non-sticky模式Tomcat以memcached上的Session为主,本地的作为中转。细节可参考这篇文章:http://xylonwang.iteye.com/blog/1269704。这里我们使用non-sticky模式。
- requestUriIgnorePattern:当匹配该正则表达式的请求url到达时,不进行Session备份。
- transcoderFactoryClass:默认为JavaSerializationTranscoderFactory,这里我们配置为KryoTranscoderFactory,因为其效率比JavaSerializationTranscoderFactory高不少。
Tomcat使用Memcached Session Manager管理Session的更多相关文章
- 使用Memcached Session Manager扩展Session管理
>>Tomcat的session管理 在请求过程中首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中. 然后再从request获取sessi ...
- Tomcat 8默认工具manager管理页面访问配置
Tomcat 8默认工具manager管理页面访问配置 1. 分配相关的角色权限 需要配置的配置文件是${catalina.home}/conf/tomcat-users.xml先给Tomcat访问相 ...
- Tomcat集成Memcached Session Manager方案
http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.3.2/memcached-session-ma ...
- Tomcat通过Memcached实现session共享的完整部署记录
对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...
- Nginx+Tomcat关于Session的管理
前言 Nginx+Tomcat对Session的管理一直有了解,但是一直没有实际操作一遍,本文从最简单的安装启动开始,通过实例的方式循序渐进的介绍了几种管理session的方式. nginx安装配置 ...
- tomcat之Session的管理
Session是由服务器端的应用服务器容器(如Tomcat.Jetty)存储的.下面分析一下Tomcat是如何管理Session的. 转自:tomcat架构分析 (Session管理) Tomcat中 ...
- Nginx反代至Tomcat基于memcached的session保持
实现功能:基于前面tomcat基础简介与示例文章 (1) tomcat cluster将会话保存至memcached中:实现模型: 这里写图片描述 配置B,C主机安装openjdk与tomcat[本次 ...
- Tomcat中session的管理机制
1. 请求过程中的session操作: 简述:在请求过程中首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中.然后再从 request获取s ...
- C# Firefox Session Manager 文件的导出与管理
长时间使用Firefox会产生很多的session文件(使用了插件:Session Manager).这些文件保存了你浏览过的所有的网址.虽然我们可以使用firefox的书签功能.但有时候打开的网址过 ...
随机推荐
- mysql 5.5中文乱码问题
一.登录MySQL查看用SHOW VARIABLES LIKE ‘character%’;下字符集,显示如下:+--------------------------+----------------- ...
- Bmob 之 简单使用
1. pod pod 'BmobSDK' 与 pod "BmobSDK" 好像没什么区别 2. 导入 在AppDelegate中: #import <BmobSDK/Bmob ...
- HTML/CSS/JavaScript学习总结(转)
HTML 网站开发的主要原则是: – 用标签元素HTML描述网页的内容结构: – 用CSS描述网页的排版布局: – 用JavaScript描述网页的事件处理,即鼠标或键盘在网页元素上的动作后的程序 H ...
- js面向对象oop编程
理解对象 对象这个词如雷贯耳,同样出名的一句话:XXX语言中一切皆为对象! 对象究竟是什么?什么叫面向对象编程? 对象(object),台湾译作物件,是面向对象(Object Oriented)中的术 ...
- HDU-1166-敌兵布阵(线段树)
前言: 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a, ...
- Chrome 报 Resource interpreted as Script but transferred with MIME type text/plain 警告的解决办法
http://www.2cto.com/os/201312/262437.html 安装了VS2012之后,chrome在加载页面的时候会报 Resource interpreted as Scrip ...
- 部署JForum 2.1.9遇到的问题及解决方法
1. 主要问题是出在连接数据库和创建表阶段,当我们配置好MySQL的各种参数后,创建表的时候会报错: 原因:主要是由于建表的SQL语句和MySQL的版本不一致导致的. 解决办法:简单来说,在MYSQL ...
- 如何使用矩阵乘法加速动态规划——以[SDOI2009]HH去散步为例
对这个题目的最初理解 开始看到这个题,觉得很水,直接写了一个最简单地动态规划,就是定义 f[i][j]为到了i节点路径长度为j的路径总数, 转移的话使用Floyd算法的思想去转移,借助这个题目也理解了 ...
- 【转】OSX键盘快捷键
OS X 键盘快捷键 了解有关常见 OS X 键盘快捷键的信息.键盘快捷键是通过按下键盘上的组合键来调用 OS X 功能的一种方式. 若要使用键盘快捷键或按键组合,您可以同时按修饰键和字符键.例如,同 ...
- angular表格分页
<!doctype html> <html lang="en" > <head> <meta charset="UTF-8&qu ...