一、session一致性问题
使用集群方案解决网站高并发问题时,就会部署多台应用服务器。当用户第一次通过客户端(如:浏览器)访问服务器时,服务器会创建对应的session,
使用Nginx反向代理,假如用户A第一次访问站点,被反向代理到服务器一处理,服务器一创建对应sessionA记录信息,用户A再次访问站点时,被反向代理到服务二处理,
而服务器二没有记录用户A的session信息,就会新创建sessionB,导致用户A之前操作丢失。
我们可以通过让多个服务器统一到同一个地方新建session和取session,来解决session不一致的问题。
二、基于上篇搭建好Nginx+Tomcat环境信息,可以使用memcached解决session一致性问题
三、Redis简介
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
四、配置
1、安装Redis,默认端口为6379
cd /usr/local/redis/
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
tar xzf redis-4.0.8.tar.gz
cd redis-4.0.8
make
2、启动,并且修改/usr/local/redis/redis-4.0.8/redis.conf 的bind值,改为本机ip
./redis-server --protected-mode no
3、上传jar包到tomcat的lib目录下,实现让多个服务器统一到redis新建session和取session
jar包可以去github查看下载,地址:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
4、修改每一个tomcat配置信息
a、为了便于测试,修改/usr/local/tomcat/apache-tomcat-8.0.50/conf/server.xml文件,Engine节点添加jvmRoute="tomcat1"(103行左右,多个tomcat修改名字不同)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >
b、修改/usr/local/tomcat/apache-tomcat-8.0.50/conf/context.xml,实现tomcat到Memcached新建session和取session,在Context节点里添加如下配置
memcachedNodes="redis://192.168.182.131:6379",这个ip需要是自己安装的redis的ip
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="redis://192.168.182.131:6379" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" />
五、测试
浏览器访问192.168.182.130,ctrl + F5刷新浏览器,查看session信息是否和预期一致。
六、tomcat和nginx安装可以参考个人的随笔
yexiangyang
moyyexy@gmail.com