作者:金瑞期货秦臻 | 来源:互联网 | 2023-07-13 20:56
一、session一致性问题使用集群方案解决网站高并发问题时,就会部署多台应用服务器。当用户第一次通过客户端(如:浏览器)访问服务器时,服务器会创建对应的session,使用Ng
一、session一致性问题
使用集群方案解决网站高并发问题时,就会部署多台应用服务器。当用户第一次通过客户端(如:浏览器)访问服务器时,服务器会创建对应的session,
使用Nginx反向代理,假如用户A第一次访问站点,被反向代理到服务器一处理,服务器一创建对应sessionA记录信息,用户A再次访问站点时,被反向代理到服务二处理,
而服务器二没有记录用户A的session信息,就会新创建sessionB,导致用户A之前操作丢失。
我们可以通过让多个服务器统一到同一个地方新建session和取session,来解决session不一致的问题。
二、基于上篇搭建好Nginx+Tomcat环境信息,可以使用memcached解决session一致性问题
Linux下Nginx+Tomcat配置反向代理
三、memcached简介
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
四、配置
1、安装Memcached,默认端口为11211,并测试
# 安装memcached,默认端口为11211
yum -y install memcached
# 启动memcached服务
# 老版本启动memcached服务
service memcached start
# 新版本启动memcached服务
systemctl start memcached.service
# 可以使用telnet测试
# 安装telnet
yum -y install telnet
# 测试
telnet 127.0.0.1 11211
2、上传jar包到tomcat的lib目录下,实现让多个服务器统一到Memcached新建session和取session
jar包可以去github查看下载,地址:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
3、修改每一个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" >
xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
Host>
Engine>
Service>
Server>
View Code
b、修改/usr/local/tomcat/apache-tomcat-8.0.50/conf/context.xml,实现tomcat到Memcached新建session和取session,在Context节点里添加如下配置,
memcachedNodes="n1:192.168.182.131:11211",这个ip需要是自己安装的Memcached的ip
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.182.131:11211"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
/>
xml version='1.0' encoding='utf-8'?>
<Context>
<WatchedResource>WEB-INF/web.xmlWatchedResource>
<WatchedResource>${catalina.base}/conf/web.xmlWatchedResource>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.182.131:11211"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
/>
Context>
View Code
五、测试
浏览器访问192.168.182.130,ctrl + F5刷新浏览器,查看session信息是否和预期一致。
六、tomcat和nginx安装可以参考个人的随笔
Linux环境下安装Tomcat
CentOS7编译安装Nginx
yexiangyang
moyyexy@gmail.com