> ## Content Index
> Fetch the complete content index at: https://oyang.cc/llms.txt
> Use this file to discover other available public pages before exploring further.

# 使用Tomcat+Redis实现集群部署中的Session共享
- URL: https://oyang.cc/shi-yong-tomcat-redisshi-xian/
- Published: 2018-11-26T12:20:03.000Z
- Updated: 2018-11-26T12:22:47.000Z
- Author: 轶语林
- Tags: redis, Tomcat

使用Tomcat进行集群部署，需要解决集群中多个节点之间保持Session共享，大体上有两种方式：

- 把所有Session数据放到一台服务器上或者数据库中，集群中的所有节点通过访问这台Session服务器来获取数据；
- 在集群中的所有节点间进行Session数据的同步拷贝，任何一个节点均保存了所有的Session数据。

Tomcat集群Session同步方案有以下几种方式：

1. 使用tomcat自带的cluster方式，多个tomcat间自动实时复制session信息，配置起来很简单。但这个方案的效率比较低，在大并发下表现并不好。
2. 利用nginx的基于访问ip的hash路由策略，保证访问的ip始终被路由到同一个tomcat上，这个配置更简单。但如果应用是某一个局域网大量用户同时登录，这样负载均衡就没什么作用了。
3. 利用nginx插件实现tomcat集群和session同步，nginx-upstream-jvm-route-0.1.tar.gz，是一个Nginx的扩展模块，用来实现基于Cookie的Session Sticky的功能。
4. 利用memcached实现（MSM工具）。memcached存储session，并把多个tomcat的session集中管理，前端在利用nginx负载均衡和动静态资源分离，在兼顾系统水平扩展的同时又能保证较高的性能。
5. 利用redis实现。使用redis不仅仅可以将缓存的session持久化，还因为它支持的单个对象比较大，而且数据类型丰富，不只是缓存 session，还可以做其他用途，可以一举几得。
6. 利用filter方法实现。这种方法比较推荐，因为它的服务器使用范围比较多，不仅限于tomcat ，而且实现的原理比较简单容易控制。

本文使用Redis实现Tomcat集群的Session共享。

## 部署环境

Tomcat7+jdk7

## 将以下jar包复制到tomcat lib目录下

commons-pool2-2.4.2.jar  
jedis-2.9.0.jar  
tomcat-redis-session-manager-2.0.0.jar  
[下载地址](https://pan.baidu.com/s/10nBKXqcSvnC74NxGj%5F-uag?ref=oyang.cc)`https://pan.baidu.com/s/10nBKXqcSvnC74NxGj_-uag` 提取码: `n6rp`

## 修改context.xml 增加配置

```
    <Context>

        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <Valve className="com.bluejeans.tomcat.redissessions.RedisSessionHandlerValve"/>
        <Manager className="com.bluejeans.tomcat.redissessions.RedisSessionManager"
            host="localhost"
            port="6379"
            password="123456"
            database="0"
            maxInactiveInterval="60"
            />

    </Context>

```

参数描述：  
host: redis数据库ip  
port: redis数据库端口  
password: redis数据库密码  
database:数据库下标(redis默认从0到15 16个分区)  
maxInactiveInterval:session过期时间 (测试无效)