Tomcat实现session会话保持(一)

栏目: Java · 发布时间: 5年前

内容简介:tomcat是Apache软件基金会的Jakarta项目中的核心项目,最新的Servlet和JSP规范能够在Tomcat中很好的表现。作为一个免费的开放源代码的Web应用服务器,属于轻量级的应用服务器,在中小型系统和并发量不是很大的场景下被广泛使用,是开发和调试JSP代码的首选。实际上而言,tomcat是Apache服务器的拓展,但是可以独立运行,tomcat可以独立的去处理html和jsp页面在计算机中,尤其是在网络应用中,称为“会话控制”。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算法

Tomcat实现session会话保持(一)

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

Tomcat实现session会话保持(一)

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

Tomcat实现session会话保持(一)

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

实验设备

操作系统:CentOS7.6

nginx IP:192.168.8.134

tomcat1 IP:192.168.8.160

tomcat2 IP:192.168.8.161

实验架构图

Tomcat实现session会话保持(一)

环境配置:

清空防火墙规则,关闭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源
[root@nginx ~]#yum -y instll nginx

修改默认的nginx配置文件

[root@nginx ~]#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

#检查语法
[root@nginx ~]#nginx -t

#检查无误后启动nginx
[root@nginx ~]#systemctl start nginx

配置tomcat1

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

配置tomcat显示session会话信息

[root@tomcat1 ~]#mkdir -pv /data/app1/{WEB_INF,META_INF,classes,lib}
[root@tomcat1 ~]#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上同样创建此目录
[root@tomcat2 ~]#mkdir /data
#把配置文件拷贝到tomcat2
[root@tomcat1 ~]#scp -r /data/app1/ 192.168.8.161:/data/
#更改测试页面
[root@tomcat2 ~]#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配置文件

[root@tomcat1 ~]#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
[root@tomcat1 ~]#scp /etc/tomcat/server.xml 192.168.8.161:/etc/tomcat/server.xml

修改tomcat-users.xml配置文件

[root@tomcat1 ~]#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
[root@tomcat1 ~]#scp /etc/tomcat/tomcat-users.xml 192.168.8.161:/etc/tomcat/tomcat-users.xml

启动tomcat并访问

[root@tomcat1 ~]#systemctl start tomcat
[root@tomcat1 ~]#systemctl enable tomcat
[root@tomcat2 ~]#systemctl start tomcat
[root@tomcat2 ~]#systemctl enable tomcat

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

Tomcat实现session会话保持(一)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

七周七并发模型

七周七并发模型

Paul Butcher / 黄炎 / 人民邮电出版社 / 2015-3 / 49.00元

借助Java、Go等多种语言的特长,深度剖析所有主流并发编程模型 基于锁和线程的并发模型是目前最常用的一种并发模型,但是并发编程模型不仅仅只有这一种,本书几乎涵盖了目前所有的并发编程模型。了解和熟悉各种并发编程模型,在解决并发问题时会有更多思路。 ——方腾飞,并发编程网站长 当看到这本书的目录时,我就为之一振。它涉及了当今所有的主流并发编程模型(当然也包括Go语言及其实现的CSP......一起来看看 《七周七并发模型》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具