Nginx+Redis+Tomcat实现session共享

架构图:


使用资源:

nginx主服务器:192.168.0.90

tomcat项目服务器1:192.168.0.91

tomcat项目服务器2:192.168.0.92

redis服务器:192.168.0.93

注意访问时需要配置防火墙规则,或者关闭防火墙

一、前言:上一篇文章讲到了Nginx实现反向代理和负载均衡,最后虽然看到了效果,但是还有一个问题就是在负载均衡的情况下session不能实现集服务之间共享,比如用户登录时被分配到192.168.0.91服务器,这台服务器记录下用户session,而在跳转到首页时分配到192.168.0.92服务器,这台服务器没有用户session信息,导致用户是未登录状态,这样很明显是不友好的。

二、session共享办法

1、nginx提供了ip_hash策略,就是根据请求ip进行hash计算,根据hash值将用户分配到一台固定的服务器。

2、session保存在redis或memcache中,把session抽取出来放到内存数据库中,读取速度快,实现session在多台服务器之间共享。

三、session+redis实现session共享

1、指定一台redis服务器安装redis,安装redis也很简单,请自行百度。

2、修改redis.conf

设置允许连接redis的ip(图一)或者关闭保护模式(图二)



设置守护线程,后台启动,貌似redis3.X版本以后这个参数默认是true


3、启动redis

./redis-server redis.conf

4、配置tomcat服务器tomcatA192.168.0.91和tomcatB192.168.0.92;

引入jar包放到tomcat的lib目录下(commons-pool2-2.0.jar+jedis-2.5.0.jar+tomcat-redis-session-manager-2.0.0.jar);

建议tomcat7引入这三个jar包版本尽量要和我的一样,如果报错基本都是jar包版本问题,反正我是引入其他版本报各种问题唉;

jar包下载链接:https://pan.baidu.com/s/1geZVozx#list/path=%2F;

tomcat8目前不支持session共享,也有解决办法,链接:https://www.cnblogs.com/cgli/p/7920573.html

5、配置tomcat的context.xml,在context节点增加如下内容

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
     host="redis服务地址"
     port="6379"
     database="0"
     maxInactiveInterval="60" />

6、启动tomcatA和tomcatB,如果报类找不到或者其他错误,一般就是jar包版本问题。

7、启动ngin,这块需要和上一篇文章nginx实现反向代理和负载均衡连起来实现。

8、访问192.168.0.90:81,nginx地址

session不变,即使一台服务器挂掉,访问另一台服务器也能拿到session


redis已保存session



9,session 实现共享。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值