linux-tomcat+nginx+redis:分布式session共享(redis配置说明)
在tomcat+nginx分布式环境下,如果有一台服务器挂掉,那个它上面的session则会消失(session是保存在服务器上面),那么我们怎么解决这个问题?我们可以把信息保存在cookie中(cookie是保存在客户端,也就是游览器),但是,这样是不安全的,下面我要介绍的是用redis保存session信息,而达到session共享(我也是刚看别人的博客,搭建出来,有些注意的地方要知道)。
在tomcat+nginx分布式环境下,如果有一台服务器挂掉,那个它上面的session则会消失(session是保存在服务器上面),那么我们怎么解决这个问题?我们可以把信息保存在cookie中(cookie是保存在客户端,也就是游览器),但是,这样是不安全的,下面我要介绍的是用redis保存session信息,而达到session共享(我也是刚看别人的博客,搭建出来,有些注意的地方要知道)。
1、需要3个jar包,分别是commons-pool2-2.3.jar,jedis-2.7.2.jar,tomcat-redis-session-manager1.2.jar(这个jar包我是直接下载的,没去原版的github拉取。),将3个jar包放在每台服务器tomcat的lib当中。
2、配置tomcat的context.xml文件,将redis链接配置(以及使用tomcat-redis-session-manager1.2.jar进行session的存储共享)到当中,如下:
<!-- 利用redis 进行session 共享 单例模式 只有一台redis -->
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="127.0.0.1"
port="6379"
database="0"
maxInactiveInterval="3600"/>
<!-- redis-Sentinel 配置 多例模式 -->
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
maxInactiveInterval="60"
sentinelMaster="mymaster"
sentinels="127.0.0.1:26379,127.0.0.1:26479" />
我们这里使用单例模式,redis集群,在接下来几篇会有
注意:一定要反编译你拿到的tomcat-redis-session-manager1.2.jar包,看看RedisSessionHandlerValve.class、RedisSessionManager.class的路径(之前直接复制网上的配置,发现找不到类,然后反编译jar包找到对应的位置),如果你的redis有密码,则在manager下面加入
password="????",如果没有密码,不要加入这段!。
3、nginx的配置
这个其实不需要的和redis没关联,只是测试的时候,为了看出效果如下:
upstream localhost {
server localhost:8090 weight=1;
server localhost:8080 weight=1;
#ip_hash;
}
注意上面的ip_hash,它的作用是如果用户在服务器1进行登录,之后的所有操作都会在服务器1上进行,
如果没有它,那么,用户的所有操作都将是交给nginx进行分配的,现在我们这里把它注释掉,测试
的时候登录之后进行操作,各个服务器将是共享的,可能在1,可能在n,那么session也是共享的,
然后,将其中一台服务器停掉,继续操作,结果当然是在其他服务器上执行,现在,我们将ip_hash
加上,继续之前的操作,从头再来,结果。。。。。你懂的。
更多推荐
所有评论(0)