nginx+tomcat+redis实现session共享

原理介绍

什么是Session/Cookie

用户使用网站的服务,基本上需要浏览器与Web服务器的多次交互。HTTP协议本身是无状态的,当用户的第一次访问请求结束后,后端服务器就无法知道下一次来访问的还是不是上次访问的用户。我们需要基于HTTP协议支持会话状态的机制,这样的机制可以使Web服务器从多次单独的HTTP请求中知道哪些请求是来自哪个会话的。

这种架构的主要目的是 如果我们在一个网站上登录了账号和密码,登录成功的信息存放在后端服务器A上,那么如果我们刷新后,将会登录到服务器B上 这个时候,我们需要重新登录,如果做了session共享后,登录信息会缓存到redis中,我们就不需要重新登录了。登录的信息状态会进行缓存。

Session与Cookie的作用都是为了保持访问用户与后端服务器的交互状态。

环境准备

以下环境均为centos7

以下实验仅用于tomcat7、jdk7 (tomcat8见末尾)

nginx: 10.3.145.14

tomcat1: 10.3.145.58 多实例

redis: 10.3.145.55

nginx配置

nginx 反向代理,7层负载均衡配置upstream代理

配置文件中添加下列部分

vim /etc/nginx/nginx.conf
http {
upstream webapp {
        server 10.3.145.58:8080 weight=1 max_fails=1 fail_timeout=2s;
        server 10.3.145.58:8081 weight=1 max_fails=1 fail_timeout=2s;
}
    server {
        location / {
        proxy_pass http://webapp;
        }
}
配置两台tomcat轮循

tomcat配置

  2-1.将jar包拷至lib目录(两台tomcat一样)

  2-2.修改配置文件(两台tomcat一样)
    # vim conf/context.xml (写在<Context>标签中)            
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
         host="127.0.0.1"
         port="6379"
         database="0"
         password="redis-password"
         maxInactiveInterval="1200"/>

Redis集群配置方式
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
    maxInactiveInterval="60"
    password="redis-password"
    sentinelMaster="mymaster"
    sentinels="127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382" 
/>



制作测试网页
cat webapps/ROOT/index.jsp
        <html>
	        <body bgcolor="green"> <center>  #这一部分两台tomcat可设计成不同的颜色以区分
		        <%= request.getSession().getId() %>
		        <h1>Tomcat 1</h1>                        #这一部分两台tomcat可以是不同的内容以区分
	        </body>
        </html>
  cat webapps/ROOT/index.jsp
        <html>
	        <body bgcolor=""> <center>  #这一部分两台tomcat可设计成不同的颜色以区分
		        <%= request.getSession().getId() %>
		        <h1>Tomcat 2</h1>                        #这一部分两台tomcat可以是不同的内容以区分
	        </body>
        </html>

启动服务
redis配置
    安装
        # tar xf redis-4.0.8.tar.gz -C /usr/local/
        # cd /usr/local/redis-4.0.8/
        # make
    配置
        # vim redis.conf            #将监听地址改为0.0.0.0
    启动服务
        # ./src/redis-server redis.conf  &

关于TOMCAT8

[老方式](jcoleman/tomcat-redis-session-manager)

[新方式](mrhop/tomcat-redis-session-manager-8.5)

ps. 原作者已经停止更新,我们找到了新的方法重新编译新的包,其他的两个jar文件不需要改动。

gradle编译tomcat-redis-session-manager

 

[root@tomcat ~]# wget -N https://services.gradle.org/distributions/gradle-2.9-all.zip
[root@tomcat ~]# mkdir /opt/gradle
[root@tomcat ~]# unzip gradle-2.9-all.zip
[root@tomcat ~]# mv gradle-2.9 /opt/gradle/
[root@tomcat ~]# ln -sfn /opt/gradle/gradle-2.9 /opt/gradle/latest
[root@tomcat ~]# echo "export GRADLE_HOME=/opt/gradle/latest" > /etc/profile.d/gradle.sh
[root@tomcat ~]# echo "export PATH=\$PATH:\$GRADLE_HOME/bin" >> /etc/profile.d/gradle.sh
[root@tomcat ~]# . /etc/profile.d/gradle.sh

# 查看gradle版本
[root@tomcat ~]# gradle -v
------------------------------------------------------------
Gradle 2.9
------------------------------------------------------------

Build time:   2015-11-17 07:02:17 UTC
Build number: none
Revision:     b463d7980c40d44c4657dc80025275b84a29e31f

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_144 (Oracle Corporation 25.144-b01)
OS:           Linux 3.10.0-693.5.2.el7.x86_64 amd64
```
编译并打包tomcat-redis-session-manager
```shell
1. 克隆fork作者的源码
[root@tomcat ~]# git clone mrhop/tomcat-redis-session-manager-8.5
[root@tomcat ~]# cd tomcat-redis-session-manager-8.5-master

2. 修改配置

[root@tomcat ~]# vim build.gradle
**************************************
修改以下内容
"""
version = '2.0.0-8.5.32'

dependencies {
  compile group: 'org.apache.tomcat', name: 'tomcat-catalina', version: '8.5.32'
  compile group: 'redis.clients', name: 'jedis', version: '2.9.0'
  compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.4.2'
"""
# 执行$CATALINA_BASE/bin/version.sh查看tomcat版本,我这里是8.5.50
# jedis,我这边下载的版本是2.7.3
# commons-pool2,我这边使用的版本是2.4.2
**************************************

3. 编译并打包
[root@tomcat ~]# gradle jar
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar

BUILD SUCCESSFUL

Total time: 5.55 secs

This build could be faster, please consider using the Gradle Daemon: Chapter 18. The Gradle Daemon

```

编译完成

[root@tomcat ~]# ls build/libs/
tomcat-redis-session-manager-8.5-2.0.0-8.5.5.jar
讲上面的包和其他的两个jar包放在tomcat的lib目录下

 

大功告成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值