Tomcat是基于java代码实现的web网站,功能十分强大,但是往往功能越强大的配置就越麻烦。那么今天我们针对Tomcat里面的会话保持给大家详细做介绍。
会话保持是什么呢?
它是基于客户端来说,当客户端访问web网站时候输入的一些账号密码,能够在短时间内登录不用再次输入密码,提高用户的体验。
(1)session sticky
相当于把用户固定在某台服务器上
基于source_ip: nginx: ip_hash haproxy: source lvs: sh
基于cookie: nginx:sticky haproxy: cookie
(2)session cluster(会话集群,小规模环境可以)
相当于每个服务器都复制一份session
delta session manager
(3)session server(适合大规模环境)
相当于把session指向后端的memcached中
redis(store) 支持持久存储
memcached(cache)非关系型数据库,基于内存实现
第一种session sticky很好实现,它可以基于ip_hash实现
在Nginx中配置:
vim /etc/nginx/nginx.conf
upstream tomcat_cluster {
ip_hash;
server 172.17.177.177:8080 weight=1;
server 172.17.166.166:8080 weight=2;
}
location ~* \.(jsp|do)$ {
proxy_pass http://tomcat_cluster;
}
第二种session cluster配置,它相对于第一种配置好点,因为第二种前段还能够利用负载均衡算法去调度。它的弊端是仅仅适合小集群,大集群下太消耗资源,不利于每个服务器都去复制一份session。
实现机制是:当一个用户访问请求过来时,会创建一个session,tomcat有session管理机制,会通过广播发送给每个服务器,所有节点同步之后再返回给客户端。
1、在nginx中配置如下:
vim /etc/nginx/nginx.conf
upstream tomcat_cluster {
server 172.17.177.177:8080 weight=1;
server 172.17.166.166:8080 weight=2;
}
location ~* \.(jsp|do)$ {
proxy_pass http://tomcat_cluster;
}
启动nginx:systemctl start nginx
2、在tomcat的server.xml中Engine段中配置如下:
3、然后在webapps下创建一个test目录。里面创建index.jsp测试页面
<%@ page language="java" %>
TomcatA
TomcatA
Session ID
<% session.setAttribute("abc","abc"); %>
<%= session.getId() %>
Created on
<%= session.getCreationTime() %>