tomcat会话管理集群建设方案
标题索引[*] 追朔原因
[*] 方案构建
[*] 方案评估
追朔原因
网站集群会话管理毋庸置疑,互联网上方案层出不穷,构建稳定、高效、适应业务系统的方案需根据自己的业务发展自行设计,根据以往经验tomcat构建会话管理时,往往异常莫名奇妙问题恒生,因此自测方案迫在眉睫。
方案构建
1.会话管理
通常采用Cookie技术或Session技术,如下为俩者方案详解,Cookie技术具体原理及过程如下所示:
https://s2.运维网.com/oss/201711/21/be84879992aab56388e3183755895cbd.png
图1-1 Cookie会话管理技术流程图
如上所示Cookie技术是调用Serlet接口中的Set-Cookie方法,可以将会话、网购产品等非重要数据保存Cookie中并通过response报文返回浏览器,浏览器缓存Cookie,浏览器再次访问Serlet接口时携带之前分配的Cookie,从而携带之前Cookie中保存的内容。
Session技术具体原理如下所示:
https://s5.运维网.com/oss/201711/21/96e1cd9e8c47fe940d33a6e8c906d65f.png
图1-2 Session会话管理技术流程图
如上所示Session技术调用Serlet接口的Session方法,可以将会话ID、网购产品等非重要数据保存会话,通过构建response响应报文返回浏览器会话ID,浏览器缓存会话ID,浏览器再次访问Serlet接口时携带之前分配的会话ID,从而可以从会话服务器中获取保存在会话中的内容。
2.核心配置
调度器Cookie转发
采用调度器采用Cookie会话管理时,会话保持技术主要集中在调度器,服务器端无需采用其他Cookie或Session技术即可做到会话保持,如apache做调度时核心配置:
[ root@centos7 ~ ]#vim /etc/httpd/conf.d/vhost.conf
#apache给请求报文头部添加Cookie,并转发
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
BalancerMember http://172.18.27.23:8080 route=1
BalancerMember http://172.18.27.24:8080 route=2
#调度采用基于Cookie的会话保持
proxyset stickysession=ROUTEID
ServerName www.jncsy.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
Require all granted
Require all granted
ProxyPass / balancer://tcpsv/
ProxyPa***everse / balancer://tcpsv/
集群会话同步
参考官方集群文档https://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html,在每台tomcatserver.xml文件中添加
maxThreads="8"/>
并在在目录/WEB-INF的目录的web.xml中的文件的末尾中添加
index.html
index.htm
index.jsp
会话服务器
会话服务器采用tomcat+memcache构建,其中tomcat中添加/usr/share/tomcat/bin下添加会话管理包,让tomcat支持会话管理,在每个页面程序中的WEB-INF下常见lib目录并在此目录中添加序列化工具,将服务器产生的会话通过序列化工具转化为可以存储在memcache中的键值,具体可参考官网文档https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration。
核心配置如下:
[ root@nginxser01 lib ]#pwd #上传序列化工具
/usr/local/tomcat/webapps/test/WEB-INF/lib
[ root@nginxser01 lib ]#ls
asm-6.0.jar kryo-serializers-0.42.jarmsm-kryo-serializer-2.1.1.jarreflectasm-1.11.3.jar
kryo-4.0.1.jarminlog-1.3.0.jar objenesis-2.6.jar
[ root@nginxser01 lib ]#pwd
/usr/local/tomcat/lib #上传会话管理工具
[ root@nginxser01 lib ]#ls
memcached-session-manager-2.1.1.jar memcached-session-manager-tc8-2.1.1.jar
spymemcached-2.12.3.jar
[ root@nginxser01 conf]# vim server.xml #粘性会话和非粘性会话根据业务需求二选一
方案评估
根据如上3套方案,若业务量相对较小时,建议采用基于Cookie调度,因为网络NAT技术有可能会产生调度不均衡,但是并非同一IP会同时产生大量访问量。若业务量相对较大时,建议采用专用会话管理服务器集群,专业的工具做专业的事效果会更佳。若服务器资源相对匮乏、内存资源无法保障时,建议采用会话同步。
页:
[1]