您好,欢迎来到站长目录(28sn.com)!


Tomcat实现session会话保持(一)

来源:本站原创 浏览:1990次 时间:2019-08-13
-bak main-content">基础知识

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.6nginx     IP:192.168.8.134  tomcat1 IP:192.168.8.160tomcat2 IP:192.168.8.161
实验架构图

Tomcat实现session会话保持(一)

环境配置:

清空防火墙规则

iptables -Fiptables -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.confuser 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[root@nginx ~]#systemctl start nginx
配置tomcat1

安装tomcat以及对应的其他管理工具

[root@tomcat1 ~]#yum -y install tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp

创建相关目录

[root@tomcat1 ~]#mkdir -pv /data/app/{WEB-INF,META-INF,classes,lib}

编辑主页文件

[root@tomcat1 ~]#vim /data/app/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.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配置文件,在host中增加一个context做测试

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

修改tomcat-users增加如下几行配置

[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@tomcat2 ~]#mkdir /data

把tomcat1主机配置文件传输给tomcat2

[root@tomcat1 ~]#scp /etc/tomcat/server.xml 192.168.8.161:/etc/tomcat/server.xml [root@tomcat1 ~]#scp /etc/tomcat/tomcat-users.xml 192.168.8.161:/etc/tomcat/tomcat-users.xml 

编辑主页文件

[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>

在tomcat2上同样创建此目录

[root@tomcat2 ~]#mkdir /data

把tomcat1配置文件拷贝到tomcat2

[root@tomcat1 ~]#scp -r /data/app/ 192.168.8.161:/data/[root@tomcat1 ~]#scp /etc/tomcat/server.xml 192.168.8.161:/etc/tomcat/server.xml [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会话保持(一)

推荐站点

  • 我爱发烧音乐我爱发烧音乐

    我爱发烧音乐囊括了从流行音乐到古典音乐多个类型的音乐作品,专栏推荐最新的音乐,提供音乐排名榜单!可供免费线上收听音乐,歌曲流畅,音效极佳! 网站提供的钢琴以及二胡专栏,可供收听者,陶冶情操,改善心情,是难得的轻音乐典藏!

    www.520fs.com
  • 世纪音乐网世纪音乐网

    世纪音乐网是专业的在线音乐试听MP3下载网站。歌曲总计30余万首,收录了网上最新歌曲和流行音乐,DJ舞曲,非主流音乐,经典老歌,劲舞团歌曲,搞笑歌曲,儿童歌曲,英文歌曲等。是您上网听歌的最佳网站。

    www.ssjj.com
  • 怒江大峡谷网怒江大峡谷网

    怒江大峡谷网内容包括:新闻、要闻、怒江报、视频、文化、民俗、人文、音乐、政务、公告、政策等地方信息。

    www.nujiang.cn
  • 杭州网杭州网

      杭州网是杭州地区唯一的新闻门户网站,由中共杭州市委宣传部、杭州日报报业集团和杭州广播电视集团共同组建的杭州网络传媒有限公司运营。

    www.hangzhou.com.cn
  • 深圳在线深圳在线

      深圳在线 www.szol.net是深圳本地最大、最早的地方生活资讯网站之一,网站名“深圳在线www.szol.net”由南方报业传媒集团编辑委员会总编辑、南方日报社总编辑、南方都市报总编辑、南方书画院名誉院长王春芙亲笔题名,深圳在线www.szol.net团队与深圳热线www.szonline.net、奥一网www.oeeee.com都源于全国最早成立于1996年的知名网络公司——深圳万用网。

    www.szol.net

鄂公网安备 42062502000001号