阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Tomcat使用Memcached Session Manager管理Session

133次阅读
没有评论

共计 3513 个字符,预计需要花费 9 分钟才能阅读完成。

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 官方配置文档地址(须 FQ):
https://code.google.com/archive/p/memcached-session-manager/wikis/SetupAndConfiguration.wiki

结合文档和项目的实际情况,可以总结出以下信息:

  1. 需要为 Tomcat 添加 Memcached Session Manager 相关的 jar 包。不同的 Tomcat 版本所使用的包不同,Memcached Session Manager 目前支持 Tomcat6、7、8(包括 8.5)。这些 jar 包均须放入 Tomcat 中。
  2. 可以根据需要,下载对象序列化工具相关的 jar 包。当然不下载也可以,Memcached Session Manager 会默认使用 java 原生的序列化工具,对要存入和取出 memcached 的对象进行序列化和反序列化。但是根据网上的一些资料来看,java 原生的序列化工具效率并不高,Memcached Session Manager 推荐使用其他的序列化工具,比如我们接下来要使用的 kryo。kryo 相关的 jar 包可以放入 Tomcat 中,也可以放入项目中,但是为了统一管理,我们会把这些 jar 包放入 Tomcat 中。
  3. 配置 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 目录中。这里对几个常用配置做些说明:

  1. memcachedNodes:memcached 节点配置项。可以配置多个 memcached,这里我们只配了一个。
  2. memcachedProtocol:默认为 text,这里我们配置为 binary,因为阿里云的 memcached 使用 binary 协议。
  3. sticky:true 为 sticky 模式,false 为 non-sticky。当配置为 sticky 模式时,Tomcat 以本地 Session 为主,memcached 上的 Session 为备;配置为 non-sticky 模式 Tomcat 以 memcached 上的 Session 为主,本地的作为中转。
  4. requestUriIgnorePattern:当匹配该正则表达式的请求 url 到达时,不进行 Session 备份。
  5. transcoderFactoryClass:默认为 JavaSerializationTranscoderFactory,这里我们配置为 KryoTranscoderFactory,因为其效率比 JavaSerializationTranscoderFactory 高不少。

更多 Tomcat 相关教程见以下内容

CentOS 6.6 下安装配置 Tomcat 环境  http://www.linuxidc.com/Linux/2015-08/122234.htm

RedHat Linux 5.5 安装 JDK+Tomcat 并部署 Java 项目  http://www.linuxidc.com/Linux/2015-02/113528.htm 

Tomcat 权威指南(第二版)(中英高清 PDF 版 + 带书签)  http://www.linuxidc.com/Linux/2015-02/113062.htm 

Tomcat 安全配置与性能优化 http://www.linuxidc.com/Linux/2015-02/113060.htm 

Linux 下使用 Xshell 查看 Tomcat 实时日志中文乱码解决方案 http://www.linuxidc.com/Linux/2015-01/112395.htm 

CentOS 64-bit 下安装 JDK 和 Tomcat 并设置 Tomcat 开机启动操作步骤 http://www.linuxidc.com/Linux/2015-01/111485.htm 

Ubuntu 16.04 下安装 Tomcat 8.5.9  http://www.linuxidc.com/Linux/2017-06/144809.htm

搭建高性能高可用 Tomcat 服务器详解  http://www.linuxidc.com/Linux/2017-05/143486.htm

Tomcat 中 session 的管理机制  http://www.linuxidc.com/Linux/2016-09/135072.htm

Tomcat 的详细介绍:请点这里
Tomcat 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-07/145912.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3513字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中