【Session】Tomcat Session 集群

设备

nginx:192.168.67.11
tomcat1:192.168.67.12
tomcat2:192.168.67.13

安装nginx

(192.168.67.11)

#关闭防火墙和安全机制
[root@test1 ~]# systemctl stop firewalld
[root@test1 ~]# setenforce 0

#安装epel源
[root@test1 ~]# yum -y install epel-release.noarch

#安装nginx
[root@test1 ~]# yum -y install nginx

#开启nginx服务
[root@test1 ~]# systemctl start nginx

#修改配置文件;在22行下写upstream反向代理
[root@test1 ~]# vim /etc/nginx/nginx.conf
 22     access_log  /var/log/nginx/access.log  main;
 23         upstream tomcat {
 24         server   192.168.67.12:8080;
 25         server   192.168.67.13:8080;
 26         }
    #在49行下写
 48         # Load configuration files for the default server block.
 49         include /etc/nginx/default.d/*.conf;
 50         location ~* \.jsp$ {
 51         proxy_pass   http://tomcat;
 52         }

#检查配置文件
[root@test1 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#重新加载配置文件
[root@test1 ~]# nginx -s reload

安装tomcat

(192.168.67.12、192.168.67.13)两者操作相同,下面只展示了tomcat1

#关闭防火墙和安全机制
[root@test2 ~]# systemctl stop firewalld
[root@test2 ~]# setenforce 0

#创建一个data目录
[root@test2 ~]# mkdir data
[root@test2 ~]# cd data/
[root@test2 data]# ls

#上传jdk和tomcat包
[root@test2 data]# rz -E
rz waiting to receive.
[root@test2 data]# rz -E
rz waiting to receive.
[root@test2 data]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.tar.gz

#解压安装jdk
[root@test2 data]# tar xvf jdk-8u201-linux-x64.tar.gz -C /usr/local

[root@test2 data]# cd /usr/local/
[root@test2 local]# ln -s jdk1.8.0_201/ jdk
[root@test2 local]# 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/

[root@test2 local]# . /etc/profile.d/jdk.sh 

[root@test2 local]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
解压安装tomcat
[root@test2 local]# cd 
[root@test2 ~]# cd data
#解压
[root@test2 data]# tar zxvf apache-tomcat-9.0.16.tar.gz
[root@test2 data]# ls
apache-tomcat-9.0.16         jdk-8u201-linux-x64.tar.gz
apache-tomcat-9.0.16.tar.gz
[root@test2 data]# cp -r apache-tomcat-9.0.16 /usr/local/tomcat
#创建tomcat用户
[root@test2 data]# useradd -s /sbin/nologin tomcat
[root@test2 data]# cd /usr/local/
[root@test2 local]# ls
bin  games    jdk           lib    libexec  share  tomcat
etc  include  jdk1.8.0_201  lib64  sbin     src
[root@test2 local]# chown tomcat:tomcat tomcat/ -R
[root@test2 local]# cat > /usr/lib/systemd/system/tomcat.service <<EOF
> [Unit]
> Description=Tomcat
> After=syslog.target netwaork.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=muti-user.target
> 
> EOF

#刷新配置文件;启动tomcat
[root@test2 local]# systemctl daemon-reload 
[root@test2 local]# systemctl start tomcat.service 
[root@test2 local]# systemctl status tomcat.service 

[root@test2 local]# ls
bin  games    jdk           lib    libexec  share  tomcat
etc  include  jdk1.8.0_201  lib64  sbin     src
[root@test2 webapps]# cd tomcat/webapps/ROOT/
[root@test2 ROOT]# ls
asf-logo-wide.svg  favicon.ico        tomcat.png
bg-button.png      index.jsp          tomcat-power.gif
bg-middle.png      RELEASE-NOTES.txt  tomcat.svg
bg-nav.png         tomcat.css         WEB-INF
bg-upper.png       tomcat.gif

[root@test2 ROOT]# mv index.jsp index.jsp.bak
[root@test2 ROOT]# rz -E
rz waiting to receive.
[root@test2 ROOT]# ls
asf-logo-wide.svg  favicon.ico        tomcat.gif
bg-button.png      index.jsp          tomcat.png
bg-middle.png      index.jsp.bak      tomcat-power.gif
bg-nav.png         RELEASE-NOTES.txt  tomcat.svg
bg-upper.png       tomcat.css         WEB-INF

[root@test2 ROOT]# 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>

浏览器访问:

刷新浏览器可以看到sid一直在变化

sid变化的原因:

固定同一客户机的SID
[root@test1 ~]# vim /etc/nginx/nginx.conf
#添加第24行
 22     access_log  /var/log/nginx/access.log  main;
 23         upstream tomcat {
 24         hash     $remote_addr;
 25         server   192.168.67.12:8080;
 26         server   192.168.67.13:8080;
 27         }

#检查配置文件
[root@test1 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#重新加载配置文件
[root@test1 ~]# nginx -s reload

可以看到SID不再改变,但同一客户机的请求也不会再被轮循

搭配共享服务

官网网址:Apache Tomcat 9 (9.0.87) - Clustering/Session Replication How-To

注意先删除上面固定SID的代码

[root@test2 ROOT]# cd /usr/local/tomcat
[root@test2 tomcat]# vim conf/server.xml
#在163行,</Host>上面  添加
        <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"    #这里最好将auto改为本机地址
                      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>

#若要添加上面的内容,之后一定要添加下面的内容
[root@test2 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@test2 ROOT]# cd WEB-INF/
[root@test2 WEB-INF]# ls
web.xml
[root@test2 WEB-INF]# vim web.xml 
#在29行  </description>下面 添加
 29 <distributable/>
浏览器访问:192.168.67.11/index.jsp

刷新可以看到SID不会改变,轮询正常

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

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

相关文章

iOS面试题锦集

1. 问&#xff1a;一张图片所占内存大小跟什么有关&#xff1f; 图片所占内存大小&#xff0c;与图片的宽高有关 我们平时看到的png、jpg、webp这些图片格式&#xff0c;其实都是图片压缩格式。通过对应的算法来优化了大小以节省网络传输与本地保存所需的资源。 但是当我们加…

【四 (1)数据可视化之如何选用正确的图表】

目录 文章导航一、数据分析中可视化的作用1、揭示数据关联和模式2、支持数据分析和决策3、提升沟通和共享效果4、强调关键信息和发现5、增强故事叙述和记忆效果6、有效增强数据交互性数据7、复杂信息易理解8、数据多维度显示 二、如何选用合适的图表1、简洁性避免使用过于复杂或…

【PTA】​L1-034 点赞(C++)

题目链接&#xff1a; L1-034 点赞 - 团体程序设计天梯赛-练习集 (pintia.cn) 目录&#xff1a; 目录&#xff1a; 题目要求&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 代码&#xff1a; 测试结果…

git下载及基础

git学习教程&#xff1a;【【GeekHour】一小时Git教程】 https://www.bilibili.com/video/BV1HM411377j/?share_sourcecopy_web&vd_source1a32dd27a726236a74603cf06b7302aa 1. 下载 官网&#xff1a;https://git-scm.com/ 终端输入 git -v 能看到版本信息表示安装成功…

最新开源解密版TwoNav网址导航系统源码

源码简介 2024最新开源解密版TwoNav网址导航系统源码去授权破解版 内置二十多套主题模板。 已去授权&#xff0c;最新开源解密版。TwoNav 是一款开源的书签&#xff08;导航&#xff09;管理程序&#xff0c;使用PHP SQLite 3开发&#xff0c;界面简洁&#xff0c;安装简单&…

【MySQL】4. 表的操作

表的操作 1. 创建表 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a; field 表示列名 datatype 表示列的类型 character set 字符集&#xff0c…

springcloud:4.1 GateWay

概述 Gateway 简介 Spring Cloud Gateway基于Spring 5.0、SpringBoot 2.0和Project Reactor等技术开发 旨在为微服务架构提供一种简单有效的、统一的API路由管理方式&#xff0c;并为微服务架构提供安全、监控、指标和弹性等功能 其目标是替代Zuul特点 易于编写谓词和过滤器&…

1.2 课程架构介绍:STM32H5 芯片生命周期管理与安全调试

1.2 课程架构介绍&#xff1a;STM32H5 芯片生命周期管理与安全调试 下面开始学习课程的第二节&#xff0c;简单介绍下STM32H5芯片的生命周期和安全调试&#xff0c;具体课程大家可以观看STM32官方录制的课程&#xff0c;链接&#xff1a;1.2. 课程架构介绍&#xff1a;STM32H5…

免费阅读篇 | 芒果YOLOv8改进109:注意力机制SimAM:用于卷积神经网络的简单、无参数注意力模块

免费阅读篇|芒果YOLOv8改进109&#xff1a;注意力机制篇SimAM&#xff1a;用于卷积神经网络的简单、无参数注意力模块 &#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#x…

【AIGC调研系列】通义灵码与copilot的对比

通义灵码与GitHub Copilot的对比主要集中在几个方面&#xff1a;代码编写能力、免费性、操作界面和适配性。 首先&#xff0c;在代码编写能力上&#xff0c;虽然GitHub Copilot在整体上要强于通义灵码&#xff0c;但通义灵码的能力也不算弱&#xff0c;并且在某些特定的小类任…

外卖平台订餐流程架构的实践

当我们想要在外卖平台上订餐时&#xff0c;背后其实涉及到复杂的技术架构和流程设计。本文将就外卖平台订餐流程的架构进行介绍&#xff0c;并探讨其中涉及的关键技术和流程。 ## 第一步&#xff1a;用户端体验 用户通过手机应用或网页访问外卖平台&#xff0c;浏览菜单、选择…

服务器遭遇挖矿病毒syst3md及其伪装者rcu-sched:原因、症状与解决方案

01 什么是挖矿病毒 挖矿病毒通常是恶意软件的一种&#xff0c;它会在受感染的系统上无授权地挖掘加密货币。关于"syst3md"&#xff0c;是一种特定的挖矿病毒&#xff0c;它通过在受感染的Linux系统中执行一系列复杂操作来达到其目的。这些操作包括使用curl从网络下载…

stm32-定时器输出比较PWM

目录 一、输出比较简介 二、PWM简介 三、输出比较模式实现 1.输出比较框图(以通用定时器为例) 2.PWM基本结构 四、固件库实现 1.程序1&#xff1a;PWM呼吸灯 2.程序2&#xff1a;PWM驱动直流电机 3.程序3&#xff1a;控制舵机 一、输出比较简介 死区生成和互补输出一般…

计算机网络——物理层(奈氏准则和香农定理)

计算机网络——物理层&#xff08;奈氏准则和香农定理&#xff09; 失真码间串扰奈氏准则&#xff08;奈奎斯特定理&#xff09;极限数据率 噪声信噪比香农定理奈氏准则和香农定理的区别 前面我们已经了解一些数据通信的基本知识&#xff0c;没有看过上一篇得小伙伴可以点击这里…

2024最新小狐狸AI 免授权源码

后台安装步骤&#xff1a; 1、在宝塔新建个站点&#xff0c;php版本使用7.2 、 7.3 或 7.4&#xff0c;把压缩包上传到站点根目录&#xff0c;运行目录设置为/public 2、导入数据库文件&#xff0c;数据库文件是 /db.sql 3、修改数据库连接配置&#xff0c;配置文件是/.env 4、…

每日一题——LeetCode1684.统计一致字符串的数目

方法一 Set()双层for循环遍历 将allowd放入Set集合中&#xff0c;遍历words每一项的每一个字符看是否有allowd不含有的字符 var countConsistentStrings function(allowed, words) {let set new Set(allowed),count0for(let word of words){for(let char of word){if(!set.…

redis 入门01

1.安装与配置 在官网下压缩包并传送给自己的虚拟机或者使用wget直接下载都可以 注意:redis是运行在linux下的基于内存的kv键值对数据库 安装与配置参考 2.经典Hello World 注意设置redis在后台运行,默认是前台进行的 我们配置完成之后首先启动服务器 redis-server 配置文件 这里…

从混沌到秩序——90年代中国数据库的激烈角逐

引言 在数字化浪潮的推动下&#xff0c;数据库技术已成为支撑数字经济的坚实基石。腾讯云TVP《技术指针》联合《明说三人行》特别策划的直播系列——【中国数据库前世今生】&#xff0c;我们将通过五期直播&#xff0c;带您穿越五个十年&#xff0c;深入探讨每个时代的数据库演…

uniapp 跳转返回携带参数(超好用)

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.返回界面 uni.$emit(enterPeople, this.entryList)uni.navigateBack({delta: 1}) 2.返回到的界面&#xff08;接收数据界面&#xff09; onShow() {let that thisuni.$on(enterPeople,function(enterPeopledata){console.…

自习室预订系统|基于springboot框架+ Mysql+Java+B/S架构的自习室预订系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 学生功能模块 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参…