Tomcat配置管理及JVM调优进阶实践
01 Tomcat Web服务
1、JAVA基础知识
1.1 编程语言
我们的编程语言大体分为下面两大类:
系统级: C、C++、go
应用级: C#、java、python、perl、ruby、php
这些应用级编程语言,它们的着眼点不是程序的运行效率,⽽是程序的便捷可移植性;
所以无论是 java、python、php ,它们都是有着自⼰ "解释器" 的编程语言;
但对于 java 我们将底层运行环境称为解释器可能并不合适,所以我们⼀般会将其底层运行环境称为虚拟机 (JVM)
1.2 什么是JVM
JVM 全称 (java Virtual Machine) ,简成 java 虚拟机,那什么是虚拟机
⾸先虚拟机可以通过软件模拟⼀台完整的计算机硬件功能;
其次能够在该模拟的计算机硬件上安装相应的操作系统运行;
但 jvm 并不是提供⼀个能安装操作系统级的虚拟机,它仅提供了 java 程序运行的独⽴环境(程序级虚拟机);
1.3 为何需要JVM
像 C 语言是不⽀持跨平台,因此 C 语言开发的程序,如果希望在 windows 或linux 上运行则需要编译多次,已确保能适配不同的操作系统平台;
⽽ JAVA 则不同, JAVA 只需要将编写好的源代码进行⼀次编译,就能够在不同的系统平台运行,能够做到⼀次编译,多处运行;
但有⼀个前提,事先我们需要在各个操作系统平台上安装好 JVM 虚拟机;

1.4 JDK与JRE
jre 是 java 的运行环境,包含了 jvm 虚拟机;
jdk 是 java 的开发环境,包含了 java 的运行环境 jre
如果单纯的运行 java 代码,只需要 jre 足够,但如果需要提供开发环境以及运行环境则需要 jdk

2、安装OpenJDK
OpenJDK 是 Sun 公司采用 GPL v2 协议发布的 JDK 开源版本,于 2009 年正式发布。
2.1 安装Java1.8
[root@web03 ~]# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
# 查看版本
[root@web03 ~]# java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)2.2 安装Java11
[root@web03 ~]# yum install java-11-openjdk java-11-openjdk-devel2.3 安装Java17
[root@web03 ~]# yum install java-17-openjdk java-17-openjdk-devel3、安装OracleJDK
1、访问Oracle官方网站,下载JDK: https://www.oracle.com/java/technologies/downloads/

3.1 rpm包安装方式
1、下载java8版本的rpm
[root@rocky9 ~]# dnf -y install lrzsz vim
[root@rocky9 ~]# rpm -ivh jdk-8u401-linux-x64.rpm2、检查版本
[root@rocky9 ~]# java -version
java version "1.8.0_401"
Java(TM) SE Runtime Environment (build 1.8.0_401-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.401-b10, mixed mode)3.2 ⼆进制安装方式
1、下载⼆进制包
[root@rocky9 ~]# dnf -y install lrzsz vim wget net-tools
[root@rocky9 ~]# tar xf jdk-8u401-linux-x64.tar.gz -C /usr/local/
[root@rocky9 ~]# ln -s /usr/local/jdk1.8.0_401/ /usr/local/jdk2、添加java环境变量
[root@rocky9 ~]# vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
# 加载环境变量
[root@rocky9 ~]# source /etc/profile.d/jdk.sh3、检查版本
[root@rocky9 ~]# java -version
java version "1.8.0_401"
Java(TM) SE Runtime Environment (build 1.8.0_401-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.401-b10, mixed mode)3.3 运行简单java代码
将源码编译为字节码测试
1、编写 java 源代码
[root@rocky9 ~]# cat hello.java
class Hello{
public static void main(String[] args)
{
System.out.println("hello, java");
}
}2、使用 javac 命令编译源码
[root@rocky9 ~]# javac hello.java
[root@rocky9 ~]# ls Hello.*
Hello.class3、使用相对路径运行class类文件
[root@rocky9 ~]# java -cp . Hello
hello, java4、Tomcat服务介绍
4.1 什么是Tomcat
Tomcat 和 Nginx 类似,也是⼀个 Web 服务器软件。
只不过 Tomcat 是基于 JAVA 开发的 WEB 服务,因此它主要是解析 Java 代码。

4.2 Tomcat与Nginx
Nginx 仅⽀持静态解析,⽽ Tomcat ⽀持解析 java 代码解析,同时还⽀持解析静态资源(但效率不⾼)
Nginx 适合做前端负载均衡;
Tomcat 适合做后端应用服务处理;
通常情况下企业会使用 Nginx+tomcat 方式来运行,由 Nginx 处理静态资源, Tomcat 处理动态资源;
5、Tomcat服务安装
5.1 下载并安装
[root@rocky9 ~]# mkdir /app
[root@rocky9 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.111/bin/apache-tomcat-9.0.111.tar.gz
#或者,清华仓库源下载(建议)
[root@rocky9 ~]# wget https://mirror.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.111/bin/apache-tomcat-9.0.111.tar.gz
[root@rocky9 ~]# tar xf apache-tomcat-9.0.111.tar.gz -C /app
[root@rocky9 ~]# ln -s /app/apache-tomcat-9.0.111/ /app/tomcat5.2 配置启动文件
1、默认tomcat没有启动服务文件,可以⼿动为tomcat建⽴启动停止文件
[root@rocky9 ~]# cat > /usr/lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
#二进制安装jdk、需要增加此环境变量
Environment=JAVA_HOME=/usr/local/jdk
Environment=CATALINA_HOME=/app/tomcat
Environment=CATALINA_BASE=/app/tomcat
ExecStart=/app/tomcat/bin/startup.sh
ExecStop=/app/tomcat/bin/shutdown.sh
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF2、启动tomcat服务
[root@rocky9 ~]# setenforce 0
[root@rocky9 ~]# systemctl stop firewalld
[root@rocky9 ~]# systemctl daemon-reload
[root@rocky9 ~]# systemctl enable tomcat --now
[root@rocky9 ~]# netstat -lntp|grep java
tcp6 0 0 :::8080 :::* LISTEN 12049/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 12049/java5.3 访问Tomcat应用
通过浏览器访问 http://IP:8080 即可访问 Tomcat 资源

5.4 Tomcat⽬录结构说明
bin :tomcat 启动和停止脚本;
Catalina 的名字来源于美国西海岸靠近洛杉矶的一个小岛,名为 Catalina 岛。这个小岛以其风景秀丽而著名。Servlet 运行模块的最早开发者 Craig McClanahan 因为喜欢 Catalina 岛,所以以 Catalina 命名他所开发的模块。此外,Tomcat 的名字来源于“公猫”,因为其开发者希望用一种能够自己照顾自己的动物代表这个软件,于是命名为 Tomcat。
conf :tomcat 服务相关配置文件;
lib :tomcat 运行需要加载的jar包,库文件;
logs :tomcat 在运行过程中产生的⽇志文件;
temp :tomcat 存放临时文件;
webapps :tomcat 网站默认站点⽬录;
work :tomcat 运行时编译产生的缓存文件(可 tree 命令验证);
5.5 Tomcat组成结构说明
在了解Tomcat组成结构之前,我们先了解⼀下Tomcat的配置文件
顶级组件 server :表示⼀个 tomcat 实例,⼀台主机可以启动多 tomcat 实例;
连接器组件 Connector : tomcat 用于接受用户请求,⽀持 HTTP、HTTPS、AJP 等连接协议;
服务类组件 service :用来组织 Connector 和 Engine 的对应关系,⼀个 service 中只有⼀个 Engine ;
容器类组件 Engine : Tomcat 用来响应并处理用户请求,⼀个 Engine 上可以关联多个 Host ;
容器类组件 Host :虚拟主机, Tomcat 用它来实现多站点,使用不同的主机头区分;
容器类组件 Context :应用的上下文,定义请求的 uri 路径与本地⽬录的映射关系;

5.6 Tomcat请求处理流程

假设来自客户的请求为: http://tomcat.ops.net:8080/index.jsp
1.服务端运行 Tomcat 应用,监听在本机的 8080 端⼝,等待连接;
2.浏览器发送 http 请求,并且请求服务端的 8080 端⼝,也就是 tomcat 进程;
3.服务端通过 http connector 连接器获取请求,然后通过 service 将请求交给符合条件的 engine ;
4.Engine获取对应的Header头部信息,然后遍历所有的虚拟机Host进行匹配;
5.如果 Engine 匹配不到,就把请求交给 Engine 中的 defaultHost 处理;
6.如果 Engine 匹配到对应的 Host ,则提取该 Host 中指定的 appBase (代码存储的路径);
7.最后 Engine 将解析后的结果通过 Service 返回给 Connector , Connector 返回给浏览器;
6、Tomcat核心功能
6.1 Tomcat虚拟主机Host
虚拟主机:在⼀台 tomcat 服务上运行多个站点
Host name :域名
appBase :网站代码存放路径
unpackWARs :自动解压 war 包
autoDeploy :自动部署
[root@rocky9 ~]# mkdir -p /code/tom1/ROOT
[root@rocky9 ~]# echo abc > /code/tom1/ROOT/index.html
[root@rocky9 ~]# vim /app/tomcat/conf/server.xml
<Host name="tomcat1.ops.net" appBase="/code/tom1"
unpackWARs="true" autoDeploy="true">
</Host>
[root@rocky9 ~]# systemctl restart tomcat
6.2 Tomcat虚拟主机context
context 的使用方式(注意:如果设定了 context ,没有创建对应⽬录则无法启动 Tomcat )
docBase:站点存放的路径
path:访问站点的 URI 路径
reloadable:修改了jsp文件,无需重启就可以实现显示的同步
实例:访问 http://tomcat2.ops.net:8080/zh --> 映射 --> /code/zh
[root@rocky9 ~]# vim /app/tomcat/conf/server.xml
<Host name="tomcat2.ops.net" appBase="/code/tom2"
unpackWARs="true" autoDeploy="true">
<Context docBase="/code/zh" path="/zh" reloadable="true"/>
</Host>
[root@rocky9 ~]# mkdir /code/tom2/ROOT
[root@rocky9 ~]# echo 666 > /code/tom2/ROOT/index.html
[root@rocky9 ~]# mkdir /code/zh
[root@rocky9 ~]# echo tom2 > /code/zh/index.html
[root@rocky9 ~]# systemctl restart tomcat
6.3 Tomcat默认页面Basic Auth
当我们点击 Tomcat 默认站点 Server Status 或 manager APP 时,会出现403错误,提示需要配置Basic认证才能访问管理页面,或状态页面。

1、配置 conf/tomcat-users.xml ,添加用户,然后关联⾄对应资源的角色名称;
[root@es-node1 tomcat]# vim conf/tomcat-users.xml
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="123456" roles="manager-gui,admin-gui"/>2、由于 Tomcat 仅允许本地 127.0.0.1 进行 basic 认证。如果需要其他网段通过 basic 认证,还需要配置允许访问规则。找到 webapps/项⽬/META-INF/context.xml
[root@es-node1 tomcat]# vim 项⽬⽬录下/META-INF/context.xml
#tomcat9.0.111版本之前修改方式如下:
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
#修改为
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" />
#tomcat9.0.111版本之后修改方式如下:
将 allow="127.0.0.0/8,::1/128" />
修改为:allow="127.0.0.0/8,::1/128,10.0.0.0/24" />
#Tomcat默认管理页面
# vim /soft/tomcat/webapps/host-manager/META-INF/context.xml
# vim /soft/tomcat/webapps/manager/META-INF/context.xml
[root@rocky9 ~]# systemctl restart tomcat





[root@rocky9 ~]# ls /code/
t1
[root@rocky9 ~]# echo t1 > /code/t1/ROOT/index.html[root@rocky9 ~]# tail -10 /app/tomcat/conf/server.xml
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="t1.tomcat.net" appBase="/code/t1"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
</Server>
[root@rocky9 ~]# systemctl restart tomcat
02 Tomcat Web实践
1、Tomcat交付博客业务
1.1 配置虚拟主机
[root@web01 ~]# rm -rf /code/*
[root@web01 ~]# vim /soft/tomcat/conf/server.xml
<!--zrlog.ops.net-->
<Host name="zrlog.ops.net" appBase="/code/zrlog"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="zrlog_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>1.2 部署博客项⽬

[root@web01 ~]# mkdir /code/zrlog
[root@web01 ~]# mv zrlog-2.2.3.war /code/zrlog/ROOT.war
[root@web03 ~]# systemctl restart tomcat1.3 配置数据库服务
由于 zrlog 需要数据库⽀持,建议直接使用远程数据库
[root@db01 ~]# yum install mysql-server -y
[root@db01 ~]# systemctl enable --now mysqld
[root@db01 ~]# setenforce 0
[root@db01 ~]# systemctl stop firewalld
[root@db01 ~]# mysql
mysql> create database zrlog charset utf8;
mysql> create user 'zrlog'@'%' identified by 'zrlog';
mysql> grant all privileges on *.* to 'zrlog'@'%';
mysql> flush privileges;1.4 访问博客项⽬
通过浏览器访问,需要带上 8080 端⼝


安装后的效果


2、多节点部署
1、安装jdk
[root@web01 ~]# scp apache-tomcat-9.0.111.tar.gz jdk-8u401-linux-x64.tar.gz 10.0.0.29:/root
[root@web02 ~]# tar xf jdk-8u401-linux-x64.tar.gz -C /usr/local/
[root@web02 ~]# ln -s /usr/local/jdk1.8.0_401/ /usr/local/jdk
[root@web01 ~]# scp /etc/profile.d/jdk.sh 10.0.0.29:/etc/profile.d/
[root@web02 ~]# source /etc/profile.d/jdk.sh
[root@web02 ~]# java -version
java version "1.8.0_401"
Java(TM) SE Runtime Environment (build 1.8.0_401-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.401-b10, mixed mode)2、安装 tomcat 部署代码 (scp)
[root@web01 ~]# dnf -y install rsync
[root@web02 ~]# rsync -avz root@10.0.0.9:/app /
[root@web02 ~]# rsync -avz root@10.0.0.9:/code /
[root@web02 ~]# ln -s /app/apache-tomcat-9.0.111/ /app/tomcat3、启动Tomcat
[root@web02 ~]# /app/tomcat/bin/startup.sh
[root@web02 ~]# ss -ntl | grep 8080
LISTEN 0 100 *:8080 *:*
[root@web02 ~]# systemctl stop firewalld
[root@web02 ~]# setenforce 0 
2.1 Tomcat集群部署

standalone 模式,Tomcat单独运行,直接接受用户的请求,不推荐;
单机反向代理模式,可以做到静态由 nginx 提供响应,动态 jsp 代理给Tomcat ;
反向代理多机模式:前置⼀台 Nginx ,给多台 Tomcat 实例做负载均衡调度;
3、集群部署环境准备

4、反向代理实践
4.1 单机反向代理实践
1、配置Nginx源,然后安装
[root@proxy1 ~]# yum -y install nginx 2、配置Nginx代理
[root@proxy1 ~]# cat /etc/nginx/conf.d/proxy.conf
server {
server_name zrlog.ops.net;
listen 80;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}4.2 多机反向代理实践
1、安装Nginx
[root@lb01 ~]# yum install nginx -y2、配置Nginx负载均衡
[root@proxy1 ~]# cat /etc/nginx/conf.d/proxy_zrlog.ops.net.conf
upstream java {
server 10.0.0.9:8080;
server 10.0.0.29:8080;
}
server {
server_name zrlog.ops.net;
listen 80;
location / {
proxy_pass http://java;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
[root@lb01 ~]# setenforce 0
[root@lb01 ~]# systemctl stop firewalld
[root@lb01 ~]# systemctl enable --now nginx

5、多节点共享存储
1、安装 NFS
[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u666 -g666 www
[root@nfs ~]# yum install nfs-utils -y2、配置 NFS
[root@nfs ~]# vi /etc/exports
/data/zrlog 10.0.0.0/24(rw,all_squash,anonuid=666,anongid=666)
[root@nfs ~]# systemctl enable --now nfs-server3、初始化NFS
[root@nfs ~]# mkdir /data/zrlog -p
[root@nfs ~]# chown -R www.www /data/zrlog
[root@nfs ~]# systemctl restart nfs-server4、多web节点挂载
[root@web02 ~]# mkdir /code/zrlog/ROOT/attached/
[root@web01 ~]# mkdir /code/zrlog/ROOT/attached/
[root@web01 ~]# dnf -y install nfs-utils
[root@web02 ~]# dnf -y install nfs-utils
[root@web01 ~]# mount -t nfs 10.0.0.49:/data/zrlog /code/zrlog/ROOT/attached/
[root@web02 ~]# mount -t nfs 10.0.0.49:/data/zrlog /code/zrlog/ROOT/attached/

6、Tomcat配置Https
6.1 单机配置Https
Tomcat 单机配置证书【了解即可】阿⾥云文档传送⻔

1.修改 Tomcat 配置
📎21395293_tomcat.zhouhaoit.com_tomcat.zip
[root@rocky9 ~]# mkdir /app/tomcat/ssl
[root@rocky9 ~]# unzip 21395293_tomcat.zhouhaoit.com_tomcat.zip -d /app/tomcat/ssl/
[root@rocky9 ~]# cat /app/tomcat/ssl/pfx-password.txt
18oev28f
[root@web01 ~]# vim Tomcat安装⽬录/conf/server.xml
# <!--http连接器->处理请求与响应请求-->
<Service name="Catalina">
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
# <!--https连接器-->
<Connector port="443" #port属性根据实际情况修改(https默认端⼝为443)
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/app/tomcat/ssl/tomcat.zhouhaoit.com.pfx" #证书名称需要写绝对路径
keystoreType="PKCS12"
keystorePass="18oev28f" ##替换为密码文件pfx-password.txt中的内容
clientAuth="false"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECD HE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>2.配置 web.xml 文件,开启 HTTP 强制跳转 HTTPS ,在文件 </welcome-file-list> 后添加如下内容:
[root@rocky9 ~]# vi /app/tomcat/conf/web.xml
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
[root@rocky9 ~]# systemctl restart tomcat

测试http访问,自动跳转到https

6.2 集群配置Https
1、创建 ssl ⽬录,并将证书存放⾄该⽬录即可
📎21214937_www.zhouhaoit.com_nginx.zip
[root@lb01 ~]# mkdir -p /etc/nginx/ssl && cd /etc/nginx/ssl
#上传证书
[root@lb01 /etc/nginx/ssl]# unzip 21214937_www.zhouhaoit.com_nginx.zip
[root@lb01 /etc/nginx/ssl]# ls
2、编辑负载均衡,将 http 协议升级为 https
[root@proxy01 ~]# cat /etc/nginx/conf.d/proxy_zrlog.ops.net.conf
upstream zrlog {
server 10.0.0.9:8080;
server 10.0.0.29:8080;
}
server {
listen 443 ssl;
ssl_certificate ssl/www.zhouhaoit.com.pem;
ssl_certificate_key ssl/www.zhouhaoit.com.key;
ssl_session_timeout 5m;
server_name www.zhouhaoit.com;
location / {
proxy_pass http://zrlog;
proxy_set_header Host $http_host;
}
}
server {
listen 80;
server_name www.zhouhaoit.com;
return 302 https://$server_name$request_uri;
}3、重启 Nginx
[root@lb01 ~]# nginx -t
[root@lb01 ~]# systemctl restart nginx

7、Tomcat会话保持
7.1 会话保持架构概述
通过 redis 方式实现 Tomcat 的 session 共享

7.2 会话保持地址规划
7.3 添加虚拟主机配置
在所有的tomcat节点上添加虚拟主机
[root@web01 ~]# vim /app/tomcat/conf/server.xml
<!--session站点-->
<Host name="session.ops.net" appBase="/code/session"
unpackWARs="true" autoDeploy="true">
</Host>7.4 添加sesion页面
[root@web01 ~]# mkdir /code/session/ROOT -p
#注意第二个web把web01改成web02,以便更好的看到效果
[root@web01 ~]# cat /code/session/ROOT/index.jsp
<body>
<%
//HttpSession session = request.getSession(true);
System.out.println(session.getCreationTime());
out.println("<br> web01 SESSION ID:" + session.getId() + "<br>");
out.println("Session created time is :" + session.getCreationTime()
+ "<br>");
%>
</body>7.5 配置负载均衡调度
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_session.ops.net.conf
upstream java {
server 10.0.0.9:8080;
server 10.0.0.29:8080;
}
server {
server_name session.ops.net;
listen 80;
location / {
proxy_pass http://java;
proxy_set_header Host $http_host;
}
}
[root@lb01 ~]# systemctl reload nginx
7.6 测试session状态
通过负载均衡测试访问,然后轮询调度到后端web集群,会发现不同主机的 session 不⼀致。

解决会话保持的问题:ip_hash

再次强刷浏览器,发现始终调度到同一节点

7.7 安装Redis Server
安装 redis,当然可以搭建 redis sentinel 或 redis cluster 集群
[root@redis ~]# yum -y install redis
[root@redis ~]# vi /etc/redis/redis.conf
bind 127.0.0.1 10.0.0.49
requirepass 123456 #在903行附近
[root@redis ~]# systemctl enable --now redis
[root@redis ~]# ss -ntl | grep 6379
LISTEN 0 511 127.0.0.1:6379 0.0.0.0:*
LISTEN 0 511 10.0.0.49:6379 0.0.0.0:*
[root@redis ~]# redis-cli
127.0.0.1:6379> info
NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info
[root@redis ~]# redis-cli -a "123456"
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> info下载 TomcatClusterRedisSessionManager (所有web集群都需要操作) GitHub地址
📎tomcat-cluster-redis-session-manager.zip
[root@web01 ~]# unzip tomcat-cluster-redis-session-manager.zip7.8 配置Redis Sesssion Manager
1.将下载的 jar 移动到 tomcat/lib ⽬录
[root@web01 ~]# cp tomcat-cluster-redis-session-manager/lib/* /app/tomcat/lib/
[root@web02 ~]# cp tomcat-cluster-redis-session-manager/lib/* /app/tomcat/lib/2.将 redis-data-cache.properties 文件移动到 tomcat/conf ⽬录,并完成配置
[root@web01 ~]# cp tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties /app/tomcat/conf/
[root@web02 ~]# cp tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties /app/tomcat/conf/
# 配置连接redis
[root@web01 ~]# vim /app/tomcat/conf/redis-data-cache.properties
...
redis.hosts=10.0.0.49:6379
redis.password=123456
...
[root@web02 ~]# vim /app/tomcat/conf/redis-data-cache.properties
...
redis.hosts=10.0.0.49:6379
redis.password=123456
...3.在 tomcat/conf/context.xml 中添加如下两行类
[root@web01 ~]# vi /app/tomcat/conf/context.xml
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />
[root@web02 ~]# vi /app/tomcat/conf/context.xml
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />
4.修改 tomcat/conf/web.xml 中的会话过期时间(分钟)
[root@web01 ~]# vi /app/tomcat/conf/web.xml
#修改会话缓存时间
<session-config>
<session-timeout>60<session-timeout>
<session-config>
[root@web02 ~]# vi /app/tomcat/conf/web.xml
#修改会话缓存时间
<session-config>
<session-timeout>60<session-timeout>
<session-config>5.最后启动所有节点的 tomcat
[root@web01 ~]# systemctl restart tomcat7.9 验证 Tomcat 会话保持
通过 nginx 进行访问,每次刷新 SessionID 都是⼀致的,但提供的节点不⼀致;
说明基于 Redis 方式共享 tomcat session 配置成功;
[root@redis ~]# redis-cli -a "123456"
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> flushall #清空session数据
OK
8、源码包-jar包-war包区别
参考说明:https://www.baeldung-cn.com/java-jar-war-packaging

jar包方式直接运行参考:

