tomcat实现session会话保持

基础知识

tomcat是Apache软件基金会的Jakarta项目中的核心项目,最新的Servlet和JSP规范能够在Tomcat中很好的表现。作为一个免费的开放源代码的Web应用服务器,属于轻量级的应用服务器,在中小型系统和并发量不是很大的场景下被广泛使用,是开发和调试JSP代码的首选。实际上而言,tomcat是Apache服务器的拓展,但是可以独立运行,tomcat可以独立的去处理html和jsp页面

session

?在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。

??在现今的互联网架构中会话保持越来越重要,但是会话的保持却在一定程度上依赖于提供服务的服务器上,随着并发量的不断提升,服务器最终会由于负载过高而宕机,因此引入了负载均衡机制,但是负载均衡的调度会使得同一用户的请求被调度到不同的主机之上,会严重的影响到session的保存

保存客户端会话的三种常用方式:

1,配合调度器端实现会话保持,如Nginx的ip_hash算法

2,在后端的web服务器上通过组播的方式实现session共享,缺点是会造成很大的网络IO,当后端的服务器并发量很大时,网卡会成为系统的瓶颈

3,在web服务器的后端增加专用的session服务器,用来存储客户的session信息,这样就避免因为每个web服务器都要同步session信息,而导致后端web服务器的网络IO压力过大。但此种方法需要对session服务器做高可用,否则一旦session服务器宕机,则所有客户端的session信息将丢失

实验模拟:在调度器端实现会话保持

实验设备

操作系统:CentOS7.6
nginx IP:192.168.8.134
tomcat1 IP:192.168.8.160
tomcat2 IP:192.168.8.161

实验架构图

环境配置:

清空防火墙规则,关闭selinux,安装jdk

#清空防火墙规则
iptables -F
iptables -X

#临时设置关闭selinux
setenforce 0

#安装jdk,centos7的源默认最高支持jdk1.8
yum -y install java-1.8.0-openjdk-devel 

实验部署步骤:

配置反向代理层nginx

#安装nginx,nginx在epel源,因此未安装epel源的话要先安装epel源
[[email protected] ~]#yum -y instll nginx 

修改默认的nginx配置文件
[[email protected] ~]#vim /etc/nginx/nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
}
upstream web {
        #使用ip_hash算法保持
        hash $remote_addr consistent;
        server 192.168.8.160:8080;
        server 192.168.8.161:8080;
}
server {
        listen 80 default_server;
        index index.jsp;
        location / {
                proxy_pass http://web/;
        }
}

检查语法并启动nginx

#检查语法
[[email protected] ~]#nginx -t

#检查无误后启动nginx
[[email protected] ~]#systemctl start nginx

配置tomcat1

安装tomcat以及对应的其他管理工具
[[email protected] ~]#yum -y install tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp

配置tomcat显示session会话信息

[[email protected] ~]#mkdir -pv /data/app1/{WEB_INF,META_INF,classes,lib}
[[email protected] ~]#vim /data/app1/index.jsp
<%@ page language="java" %>
        <html>
                <head><title>TomcatA</title></head>
                <body>
                        <h1><font color="red">TomcatA</font></h1>
            table align="centre" border="1">
                                <tr>
                                        <td>Session ID</td>
                                <% session.setAttribute("www.zd.com","www.zd.com"); %>
                                        <td><%= session.getId() %></td>
                                </tr>
                                <tr>
                    <td>Created on</td>
                    <td><%= session.getCreationTime() %></td>
                </tr>
            </table>
                </body>
        </html>
#在tomcat2上同样创建此目录
[[email protected] ~]#mkdir /data
#把配置文件拷贝到tomcat2
[[email protected] ~]#scp -r /data/app1/ 192.168.8.161:/data/
#更改测试页面
[[email protected] ~]#vim /data/app1/index.jsp
<%@ page language="java" %>
        <html>
                <head><title>TomcatB</title></head>
                <body>
                        <h1><font color="red">TomcatB</font></h1>
            table align="centre" border="1">
                                <tr>
                                        <td>Session ID</td>
                                <% session.setAttribute("www.test.com","www.test.com"); %>
                                        <td><%= session.getId() %></td>
                                </tr>
                                <tr>
                    <td>Created on</td>
                    <td><%= session.getCreationTime() %></td>
                </tr>
            </table>
                </body>
        </html>

修改server.xml配置文件

[[email protected] ~]#vim /etc/tomcat/server.xml
#在host中增加一个context做测试
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
        <Context path="/app" docBase="/data/app" reloadable=""/>
      </Host>
#把配置文件传输给tomcat2
[[email protected] ~]#scp /etc/tomcat/server.xml 192.168.8.161:/etc/tomcat/server.xml 

修改tomcat-users.xml配置文件

[[email protected] ~]#vim /etc/tomcat/tomcat-users.xml
#增加如下几行配置
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="www.test.com" roles="manager-gui,manager-script,admin-gui,admin-script"/>
#把配置文件传输给tomcat2
[[email protected] ~]#scp /etc/tomcat/tomcat-users.xml 192.168.8.161:/etc/tomcat/tomcat-users.xml 

启动tomcat并访问8080端口

[[email protected] ~]#systemctl start tomcat
[[email protected] ~]#systemctl enable tomcat
[[email protected] ~]#systemctl start tomcat
[[email protected] ~]#systemctl enable tomcat

访问测试,来自客户端的同一个IP始终发往一个后端服务器

原文地址:https://blog.51cto.com/14163901/2412775

时间: 2024-10-09 18:29:27

tomcat实现session会话保持的相关文章

Nginx+LAT(apache+tomcat)的实现和使用memcached保存tomcat的session会话

Nginx+LAT(Apache+tomcat)的实现和Apache反向代理和负载均衡tomcat的不同方式以及使用memcached保存tomcat的session会话 一.Nginx+LAT(Apache+tomcat)的环境结构; 1.Nginx +Apache实现负载均衡用户请求至tomcat,其中Nginx是负载均衡调度器,Apache和tomcat在同一台机器上,Apache将关于JSP的请求发送至tomcat. 2.实验结构图: 3.环境介绍,在两台CentOS7上都安装Tomca

tomcat的session会话保持方案

基础知识 ?? tomcat ????tomcat是Apache软件基金会的Jakarta项目中的核心项目,最新的Servlet和JSP规范能够在Tomcat中很好的表现.作为一个免费的开放源代码的Web应用服务器,属于轻量级的应用服务器,在中小型系统和并发量不是很大的场景下被广泛使用,是开发和调试JSP代码的首选.实际上而言,tomcat是Apache服务器的拓展,但是可以独立运行,tomcat可以独立的去处理html和jsp页面.?? memcached ????Memcached 是一个高

实现tomcat基于session会话保持

实验环境: 两台服务器,分别实现java 其中一台作为nginx代理 实验原理图: 一.实现java环境 1.实现java的运行环境 (1)安装 JDK 可以在网上下载包 yum  localinstall  jdk-8u144-linux-x64.rpm 2.下载tomcat包解压 tar xvf apache-tomcat-8.5.11.tar.gz mv apache-tomcat-7.0.78 /usr/local/tomcat 3.创建环境配置脚本 vim /etc/profile.d

tomcat基于session会话保持以及msm会话保持

实验一.基于tomcat集群会话保持 一.实验环境: 一台nginx服务器,两台tomcat集群,出于实验的原因,我就把nginx也放在其中一台的tomcat服务器上.也就是一共两台机器,都是centos7的环境. 二.实验原理: DeltaManager会话管理器是tomcat默认的集群会话管理器,它主要用于集群中各个节点之间会话状态的同步维护.集群增量会话管理器的职责是将某节点的会话该变同步到集群内其他成员节点上,它属于全节点复制模式,所谓全节点复制是指集群中某个节点的状态变化后需要同步到集

Tomcat实现session会话保持(三)

在后端用session server做session存储服务器 使用memcache做后端session server Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信.这里主要是做为tomcat

Tomcat实现session会话保持(二)

在后端的的tomcat之上通过组播的方式实现session的共享 实验架构图: 环境准备 #清空防火墙规则 iptables -F iptables -X #临时设置关闭selinux setenforce 0 #安装jdk,centos7的源默认最高支持jdk1.8 yum -y install java-1.8.0-openjdk-devel #更改主机名解析 vim /etc/hosts 192.168.8.161 tomcat2 192.168.8.160 tomcat1 实验部署步骤:

图文并茂超详细搭建redis缓存服务器(nginx+tomcat+redis+mysql实现session会话共享)

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一.redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会

Nginx+Memcached+Tomcat session会话共享

服务器说明: 192.168.1.8 tomcat1 memcached(虚拟机1) 192.168.1.9 tomcat2(虚拟机2) 192.168.1.200 nginx (本机) 对于tomcat+nginx的配置请参考博客:[Nginx-反向代理服务器]实践篇(三)之Tomcat+Nginx搭建集群 接下来我们来安装memcached,注意linux系统的用户权限问题 1.分别把memcached和libevent下载回来,放到/usr/src目录下: # cd /usr/src# w

tomcat session会话复制

Tomcat实现session共享 一.如何保持session会话 目前,为了使web能适应大规模的访问,需要实现应用的集群部署.集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无论用户的请求被转发到哪个服务器上都能保证用户的正常使用,即需要实现session的共享机制. 在集群系统下实现session统一的有如下几种方案: 1.请求精确定位:session sticky,例如基于访问ip的hash策略,即当