Tomcat会话保持

文章目录

    • Tomcat会话保持
      • 1、代理服务器配置
      • 2、web服务器配置
      • 3、会话保持
        • 3.1 方法一:修改代理服务器配置(nginx)
        • 3.2 方法二:修改web服务器配置(tomcat)
          • 访问官方文档,查看需要添加的配置文件
          • 修改tomcat服务配置

Tomcat会话保持

1、代理服务器配置

  • 安装nginx服务(地址:192.168.10.11)
systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心

yum install -y epel-release.noarch
#安装yum额外源

yum install -y nginx
#安装nginx

systemctl start nginx
#开启nginx服务

systemctl status nginx
#查看nginx服务状态

#修改配置文件
vim /etc/nginx/nginx.conf
 upstream tomcat {
    server 192.168.10.12:8080;
    server 192.168.10.13:8080;
    }
#在http模块下添加upstream,负载均衡
location ~* \.jsp$ {
        proxy_pass http://tomcat;
        }
#在server模块下添加location,反向代理

nginx -t
#检查语法

nginx -s reload
#重新加载配置文件

image-20240315100919339

image-20240315134914384

2、web服务器配置

  • 安装tomcat(web1地址:192.168.10.12)
  • 安装tomcat(web2地址:192.168.10.13)
web1和web2相同配置

systemctl stop firewalld
setenforce 0
#关闭防火墙和防护中心

(1)部署jdk
#将需要的jdk二进制包上传

tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local
#将二进制包解压到/usr/local目录

cd /usr/local/
#切换目录

ln -s jdk1.8.0_291/ jdk
#做软连接

#修改环境变量
vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre   
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/

. /etc/profile.d/jdk.sh
#运行

java -version
#查看版本

(2)安装tomcat
#将需要的tomcat二进制包上传

tar xf apache-tomcat-9.0.16.tar.gz 
#解压到指定目录

cp -r apache-tomcat-9.0.16 /usr/local/
#复制

cd /usr/local
#切换目录

ln -s apache-tomcat-9.0.16/ tomcat
#做软连接

useradd -M -s /sbin/nologin tomcat
#新建用户

chown tomcat:tomcat /usr/local/tomcat/ -R
#修改属主和属组

vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
   
systemctl daemon-reload
#重新加载配置

systemctl start tomcat
#开启服务

systemctl status tomcat
#查看tomcat服务状态

cd /usr/local/tomcat/webapps/ROOT
#切换目录

mv index.jsp index.jsp.bak
#改名

#编辑或者上传Java测试脚本,随机生成sessionID
cat index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>tomcat test</title>
</head>
<body>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
  • web1服务器配置(地址:192.168.10.12)

image-20240315135424778

image-20240315135649256

image-20240315135832303

image-20240315142932010

  • web2服务器配置(地址:192.168.10.13)

image-20240315140419908

image-20240315140915724

image-20240315141000400

image-20240315143246794

  • 访问验证
192.168.10.11/index.jsp
#使用主机访问,每刷新一次,sessionID会发生改变

image-20240315143506995

3、会话保持

3.1 方法一:修改代理服务器配置(nginx)
#修改配置文件
vim /etc/nginx/nginx.conf
hash $remote_addr;
#在upstream模块下添加此行配置内容($remote_addr表示存放客户端的地址)

nginx -t
#检查语法

nginx -s reload
#重新加载配置文件

image-20240315144117920

  • 验证
192.168.10.11/index.jsp
#使用主机访问,刷新后,sessionID不会再发生改变,实现会话绑定

#这种方法有缺陷,会话实现绑定之后,web服务器也不会发生改变,会永远绑定在该web服务器上

image-20240315144406951

3.2 方法二:修改web服务器配置(tomcat)
  • 适用于后端服务器比较少的场景
访问官方文档,查看需要添加的配置文件
#官方文档
https://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html

#在配置文件/usr/local/tomcat/conf/server.xml中只需要将Receiver里面的address修改为本机的ip地址,除此之外不需要修改,粘贴到配置文件中即可
For the impatient
The following is the default cluster configuration: 
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      #此处修改为本机的ip地址
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>


#在配置文件/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml中添加<distributable/>配置内容
Cluster Basics
Make sure your web.xml has the <distributable/> element
#如果使用web.xml,需要添加<distributable/>功能
  • 查看官方文档

image-20240315145741214

image-20240315150348814

修改tomcat服务配置
cd /usr/local/tomcat/conf
#切换目录

#修改配置文件
vim server.xml
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="192.168.10.12"
                      #address="192.168.10.13"
                      #修改为本机的ip地址
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>


cd /usr/local/tomcat/webapps/ROOT/WEB-INF
#切换目录

#修改配置文件
vim web.xml
  </description>
<distributable/>
#在此处添加此行配置内容
</web-app>

systemctl restart tomcat
#重启服务
  • web1服务器配置(地址:192.168.10.12)

image-20240315151141956

image-20240315153715657

image-20240315151452524

image-20240315154450473

  • web2服务器配置(地址:192.168.10.13)

image-20240315153254450

image-20240315153209550

image-20240315153416541

image-20240315154420198

  • 验证
192.168.10.11/index.jsp
#使用主机访问,刷新后,sessionID保持不变,实现会话绑定,web服务器依旧切换

image-20240315154256730

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/460125.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++STL栈与队列的实现

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

【Streamlit学习笔记】实现包含多个sheet的excel文件下载

1、什么是Streamlit Streamlit是一个免费的开源框架&#xff0c;用于快速构建和共享漂亮的机器学习和数据科学Web应用程序&#xff0c;官网链接 Streamlit Streamlit API链接 API reference 实际项目中遇到的问题&#xff1a;包含多个sheet的excel文件下载&#xff0c;下面将给…

STM32初识2

复位和时钟控制&#xff08;RCC&#xff1a;reset clock control&#xff09; 系统复位 当发生以下任一事件时&#xff0c;产生一个系统复位&#xff1a; 1. NRST 引脚上的低电平 ( 外部复位 ) 2. 窗口看门狗计数终止 (WWDG 复位 ) 3. 独立看门狗计数终止 (IWDG 复位 ) …

【JAVA基础】API:Math、System、runtime、object、BigInteger 、BigDecima、爬虫、分组、时间类、包装类

1.Math 2.System public class Main {public static void main(String[] args) {int[] arr {1, 2, 3, 4, 5, 6, 7, 8};int[] arr1 new int[8];System.arraycopy(arr,0,arr1,1,5); // 从1970.1.1开始到现在的毫秒形式long l1 System.currentTimeMillis();//171046475…

HandyControl PropertyGrid及自定义编辑器

前提条件 项目引入对应HandyControl对应版本包。 使用案例 UI部分 <Window xmlns:hc"https://handyorg.github.io/handycontrol"><hc:TabControl><hc:TabItem Header"默认样式"><hc:PropertyGrid Width"380" SelectedO…

huawei services HK华为云服务

huaweiserviceshk是一种云计算服务&#xff0c;为华为云服务用户提供了多种服务&#xff0c;包括云服务器、数据库、存储、网络等&#xff0c;用户可以根据自己的需求选择不同的服务并支付相应的费用 如何付费呢&#xff0c;这里可以使用441112&#xff0c;点击获取 卡片信息在…

swiftUI中的可变属性和封装

swiftUI的可变属性 关于swift中的属性&#xff0c;声明常量使用let &#xff0c; 声明变量使用var 如果需要在swiftUI中更改视图变化那么就需要在 var前面加上state 。 通过挂载到state列表 &#xff0c;从而让xcode找到对应的改变的值 例子&#xff1a; import SwiftUIstruc…

前端组件化:构建高效应用的艺术

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

点的基本操作

点的基本操作 要求 提供空间点数据文本文件&#xff0c;包含ID、name、X、Y四个字段信息&#xff0c; 1&#xff09;读取数据&#xff0c;并且在窗口中显示点的具体位置&#xff0c;用实心圆绘制。 2&#xff09;鼠标任意点击三个点&#xff0c;将点连线&#xff0c;用黑色笔…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-中

文章目录 一、DSL查询文档1.1 简单查询1.2 复合查询 二、搜索结果处理三、RestClient演示 查询与结果分析四、案例4.1 问题解析4.2 代码4.2.1 实体bean4.2.2 控制层4.2.3 业务service4.2.4 启动类 一、DSL查询文档 1.1 简单查询 # 1. DSL查询 # 1.1 查询所有GET /hotel/_searc…

Github和TeamCity的持续集成构建

一、简介 TeamCity是JetBrains旗下的一款持续集成[Continuous Integration&#xff0c;简称CI]工具&#xff0c;开箱即用。TeamCity提供一系列特性可以让团队快速实现持续集成&#xff1a;IDE工具集成、各种消息通知、各种报表、项目的管理、分布式的编译等等。 二、安装使用(…

【Maven学习笔记】Maven入门教程(适合新手反复观看学习)

Maven学习笔记 Maven的简要介绍Maven的安装和配置Maven的安装Maven安装的常用配置 Maven的使用入门编写pom编写主代码编写测试代码打包和运行使用Archetype生成项目骨架 Maven核心概念的阐述坐标案例分析依赖依赖的范围传递性依赖依赖范围依赖调节可选依赖Maven依赖常用的技巧 …

关于python中数据分析的一些函数

首先先下载numpy函数库 如果使用的pycharm软件&#xff0c;可在设置中下载&#xff0c;在Python interpreter设置里&#xff0c;点击号&#xff0c;搜索numpy点击下载即可 第一部分 1.array()函数 这是一个将类似数组的数据转为数组的函数&#xff0c;我们还可以控制其数组的…

KMP 算法介绍

1. KMP 算法介绍 KMP 算法&#xff1a;全称叫做 「Knuth Morris Pratt 算法」&#xff0c;是由它的三位发明者 Donald Knuth、James H. Morris、 Vaughan Pratt 的名字来命名的。KMP 算法是他们三人在 1977 年联合发表的。 KMP 算法思想&#xff1a;对于给定文本串 T 与模式串 …

Adobe PDF背景设置护眼模式,缓解眼部疲劳

一、背景 在用Adobe PDF看论文时&#xff0c;默认的白色背景看久了&#xff0c;眼睛会特别疲劳&#xff0c;下面介绍如何设置背景为护眼模式。 二、设置PDF为护眼模式 使用Adobe Acrobat Pro DC打开任意PDF文件&#xff0c;在上方工具栏选择“编辑”&#xff0c;在下拉菜单栏…

SpringMVC重点记录

目录 1.学习重点2.回顾MVC3.回顾servlet4.初始SpringMVC4.1.为什么要学SpringMVC?4.2.SpringMVC的中重点DispatcherServlet4.3.SpringMVC项目的搭建4.4.MVC框架要做哪些事情?4.5.可能会遇到的问题 5.SpringMVC的执行原理6.使用注解开发SpringMVC7.Controller控制总结8.RestF…

excel导入功能(适用于vue和react都可)

如图所示&#xff08;需求&#xff09;&#xff1a;点击导入excel后&#xff0c;数据自动新增到列表数据内 这里以vue3 andt 为例 template 标签内代码 &#xff1a; <a-uploadname"file":multiple"true":show-upload-list"false":customR…

分布式CAP理论

CAP理论&#xff1a;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition tolerance&#xff09;。是Eric Brewer在2000年提出的&#xff0c;用于描述分布式系统基本性质的定理。这三个性质在分布式系统…

软件杯 深度学习 opencv python 实现中国交通标志识别_1

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…

微信小程序将高德地图转为腾讯地图的自行车路线规划

微信小程序后台首页开发设置 相关文档 腾讯后台 微信小程序接入JDK JDK腾讯地图文档 腾讯路线规划文档 核心代码 <map id"myMap" ref"myMap" style"width: 100%; height: calc(100vh - 80px)":latitude"latitude" :scale&qu…