Tomcat 集群部署

article/2025/9/23 17:18:08

Tomcat快速入门

Tomca基本介绍

环境准备

  • JVM介绍
  • Java业务都是运行在java虚拟机上,java虚拟机简称JVM( java virtual machine)

​ 虚拟机是通过软件模拟出具有完整硬件系统的功能

​ 为什么Java需要JVM虚拟机

​ 早期C语言不支持跨平台,如果C语言想要在Windows Linux Mac上运行,需要进行分别编译,那么在Linux上有很多优秀的软件,如果需要在Windows上使用需要重新编译,移植性差

而Java则不同,Java是可以跨平台,只需要将源码进行一次编译,能够在不同的操作系统运行

JAVA是如何做到的?

​ 它只需要在Windwos Linux系统上运行一个jvm,这样我们能将Java编译好的war包在Windows和Linux平台运行起来,无需我们重复编译。而JVM是由jre提供

JAVA环境JRE和JDK的区别

jre是java的运行环境,包含jvm

jdk是java的开发环境,会包含java的运行环境jre

如果说单纯的运行java代码,只需要jre足够,但如果需要提供开发环境以及运行环境则需要JDK

Tomcat

Tomcat和Nginx类似,都是WEB服务器软件 只不过Tomcat是基于JAVA开发的WEB服务,主要解析JAVA代码

Nginx仅支持静态资源解析,而Tomcat支持解析Java开发的WEB应用,还支持解析静态资源(效率不高)

Nginx适合做前端负载均衡,Tomcat适合做后端应用服务处理

通常情况企业会使用Nginx+Tomcat结合,Nginx处理静态资源,Tomcat处理动态资源

在这里插入图片描述

Tomcat快速安装

安装jdk

yum -y install java
或者上传rpm包
rpm -ivh  jdk....rpm

安装Tomcat

(下载 Tomcat、解压、启动 )

Tomcat官网: https://tomcat.apache.org/

[root@web01 ~]#wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.58/bin/apache-tomcat-9.0.58.tar.gz --no-check-certificate[root@web01 ~]#`mkdir /soft`
[root@web01 ~]#`tar xf  apache-tomcat-9.0.39.tar.gz  -C /soft/`
[root@web01 ~]#` ln -s /soft/apache-tomcat-9.0.39/ /soft/tomcat`
[root@web01 ~]# `/soft/tomcat/bin/startup.sh`     # 启动
[root@web01 ~]# `/soft/tomcat/bin/shutdown.sh`	# 停止
[root@web01 ~]# netstat -lntp |grep javatcp6    0    0 127.0.0.1:8005      :::*           LISTEN    6867/java       tcp6    0    0 :::8080            :::*           LISTEN    6867/java# 8080 对外提供服务的端口
# 8005 关闭Tomcat端口

配置systemc方式启动

复制过来修改一下

[root@web03 ~]# systemctl cat  nginx 

写入配置文件

cat >/usr/lib/systemd/system/tomcat.service<<'EOF'
[Unit]
Description=Apache Tomcat Server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStart=/soft/tomcat/bin/startup.sh
ExecStop=/soft/tomcat/bin/shutdown.sh
ExecRetart=/soft/tomcat/bin/shutdown.sh  && sleep2  && /soft/tomcat/bin/startup.sh[Install]
WantedBy=multi-user.target
EOF

启动

[root@web03 ~]# systemctl daemon-reload  `#重新加载系统控制配置文件[root@web03 ~]# systemctl start  tomcat[root@web03 ~]# systemctl enable  tomcatCreated symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.

配置文件

配置文件

tomcat软件目录结构:bin		      ---主要包含启动和关闭tomcat的脚本(启停java脚本依赖jar包文件)
conf		    ---tomcat配置文件的目录(站点配置:server.xml)
lib		      ---tomcat运行时需要加载的jar包
logs		    ---tomcat日志存放位置
temp		    ---tomcat临时存放文件路径
webapps		  ---tomcat默认站点目录
work		    ---tomcat运行时产生的缓存文件

配置文件详解-----> tomcat/conf/server.xml [📎server.xml]

虚拟主机

在这里插入图片描述

cat   tomcat/conf/server.xml
...
<Host name="diy.ahui.org"  appBase="/code/tomcat/diy" #代码目录unpackWARs="true" autoDeploy="true"> #是否自动解包
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="diy_access_log" #日志名称 suffix=".txt"  #日志后缀名pattern="%h %l %u %t &quot;%r&quot; %s %b" /> #日志格式
</Host>...

自定义日志格式:
在这里插入图片描述

重新启动tomcat加载配置文件

[root@web01 ]#  systemctl restart tomcat

创建网页测试

[root@web01 ]#  mkdir /code/tomcat/diy/ROOT -p
[root@web01 ]#  echo "tomcat-diy" > /code/tomcat/diy/ROOT/index.html

解析host 浏览器访问

Tomcat HTTP请求过程

在这里插入图片描述

Ps: tomcat中Context的作用:

...
<Host >
<!--访问/tt这个uri,上 / code/tt中获取页面资源,不存在该目录会报错 无法启动Tomcat 需要提前创建-->
<Context docBase=" / code/tt" path="/tt" reloadable="true" />
</Host>
...

context作用:----> 类似于nginx中的alias

用户发出一个请求,如http://tomcat.ahui.com:8080/index.jsp

Connector发现是http/1.1协议,而且还是8080端口,于是就把请求接收后交给符合条件的Engine

Engine通过请求中的主机名tomcat.ahui.com查找满足条件的虚拟主机(Host)

找到后就去此虚拟主机指定的appBase(代码存放的目录)最后将解析产生的结果返回给用户。

Tomcat管理页面

在这里插入图片描述
Tomcat自带的管理页面
管理功能
监控功能

1.所有的管理页面,都将权限赋予给了角色,而角色的名称是固定的: manager-gui admin-gui
2.需要添加一个用户,将用户捆绑至对应的角色,这样用户就可以访问到对应的页面

[root@web01 ROOT]# vim /soft/tomcat/conf/tomcat-users.xml
...
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="123456" roles="manager-gui,admin-gui"/>
</tomcat-users>

3.由于项目默认允许127.0.0.1访问,所以配置好了角色和用户也无法正常访问:

[root@web01 ROOT]# vim /soft/tomcat/webapps/host-manager/META-INF/context.xml
[root@web01 ROOT]# vim /soft/tomcat/webapps/manager/META-INF/context.xml

默认状态

<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

修改后的状态:10.0.0.\d

<Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

4.重启tomcat并访问

在这里插入图片描述

Tomcat部署zrlog项目

1.定义虚拟主机

vim /soft/tomcat/conf/server.xml
...<!--站点zrlog.ahui.com--><Host name="zrlog.ahui.com"  appBase="/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 &quot;%r&quot; %s %b" /></Host>

上传war包至指定目录

zrlog官网: https://zrlog.com/

[root@web01 conf]# mkdir /zrlog
[root@web01 conf]# ll /zrlog/总用量 11316
-rw-r--r-- 1 root root 11585583 5月  11 11:32 ROOT.war

重启tomcat应用

[root@web01 conf]# /soft/tomcat/bin/shutdown.sh
[root@web01 conf]# /soft/tomcat/bin/startup.sh

在/zrlog目录下的解压.war包

自动部署ROOT.war包 (自动生成ROOT目录)

检查是否部署ok

[root@web01 conf]# tail -f /soft/tomcat/logs/catalina.out
11-May-2020 11:33:32.577 信息 [main] org.apache.coyote.AbstractProtocol.start 
开始协议处理句柄["http-nio-8080"]
11-May-2020 11:33:32.681 信息 [main] org.apache.catalina.startup.Catalina.start 
Server startup in [4,035] milliseconds

配置远程数据库连接

MariaDB [(none)]> create  database zrlog charset utf8;
MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'xxxxxx';

访问zrlog站点

在这里插入图片描述

Tomcat集群实战

tomcat集群架构图解

在这里插入图片描述

lb0110.0.0.6 172.16.1.6
web1172.16.1.7
web2172.16.1.8
其他后端节点

安装tomcat

[root[@web02 ~]# `yum install java -y`

拷贝代码和文件 (注意是在web01节点操作的)

#发送代码文件
[root@web01 ~]# scp -rp /soft  10.0.0.8:/
[root@web01 ~]# scp -rp /zrlog  10.0.0.8:/
#发送配置文件
[root@web01 ~]# scp /usr/lib/systemd/system/tomcat.service  172.16.1.8:/usr/lib/systemd/system/tomcat.service

web02操作如下

[root[@web02 ]# ln -s /soft/apache-tomcat-9.0.34/ /soft/tomcat
[root@web02 ~]# systemctl daemon-reload
[root@web02 ~]# systemctl start tomcat
[root@web02 ~]# systemctl enable tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.

共享静态资源

[root@web02 ~]# `yum install nfs-utils -y
[root[@nfs ](https://www.yuque.com/nfs) ~]# `cat /etc/exports`
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zrlog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root[@nfs ~]# mkdir /data/zrlog
[root[@nfs ~]# chown -R www.www /data/zrlog/
[root[@nfs ~]# systemctl restart nfs

所有web节点都需要挂载

mount -t nfs 172.16.1.31:/data/zrlog /zrlog/ROOT/attached/

重启tomcat

[root@web01 ~]# `/soft/tomcat/bin/shutdown.sh && /soft/tomcat/bin/startup.sh`

注意: 在Nginx做代理时 Nginx代理后端
Nginx头部信息默认丢弃
Nginx代理后端Tomcat 头部信息自动携带,不管前面任何域名解析到负载 始终携带代理文件的头部信息

Nginx_proxy

[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_zrlog.ahui.com.conf
upstream zrlog {server 172.16.1.7:8080;server 172.16.1.8:8080;
}server {listen 80;server_name zrlog.ahui.com;location / {proxy_pass http://zrlog;    	#tomcat启动的java程序,可以直接通过proxy_pass进行负载均衡include proxy_params;}
}

为tomcat日志,获取http的Header信息

...<Host name="zrlog.ahui.org"  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 &quot;%r&quot; %s %b  %{User-Agent}i %{X-Forwarded-For}i" />
</Host>...

Tomcat+Nginx+HTTPS

Tomcat单节点 -–【了解项-安装PFX格式证书】

修改tomcat配置: server.xml

  1. 首先需要有证书 ( 必须 )
  2. 将http的默认监听端口8080 修改为 80,redirect至 443
  3. 开启https监听器,配置证书即可。
  4. 将http强制跳转https ( tomcat操作,与nginx无关。)

使用新机器web03演示

[root @nfs ~]# `yum install java -y`
[root @nfs ~](https://www.yuque.com/nfs) ~]# mkdir /soft
[root @nfs ~](https://www.yuque.com/nfs) ~]# tar xf apache-tomcat-9.0.34.tar.gz -C /soft/
[root @nfs ~](https://www.yuque.com/nfs) ~]# ln -s /soft/apache-tomcat-9.0.34/ /soft/tomcat
[root @nfs ~]# cat /soft/tomcat/conf/server.xml

修改 localhost

<Host name="aliyun.ahui.com"  appBase="webapps"

全栈https

web1web2lb3
172.16.1.7172.16.1.810.0.0.5
[root @lb01 conf.d]# cat /etc/nginx/conf.d/proxy_zrlog.ahui.com.confupstream zrlog {server 172.16.1.7:8080;server 172.16.1.8:8080;
}server {listen 443 ssl;server_name zrlog.ahui.com;ssl_certificate ssl_key/server.crt;ssl_certificate_key ssl_key/server.key;#tomcat启动的java程序,可以直接通过proxy_pass进行负载均衡location / {proxy_pass http://zrlog;include proxy_params;}
}server {listen 80;server_name zrlog.ahui.com;return 302 https://$server_name$request_uri;
}

Tomcat+Nginx+Redis会话保持

多种会话方式:1.ip_hash 2.mysql 3.redis 4.tomcat自带的cluster session复制 ( 官方建议不要超过4个tomcat节点 )

准备web01 和 web02

1.配置虚拟主机 (所有节点都需要配置)

[root@web02 ~]# vim /soft/tomcat/conf/server.xml<!--session.ahui.org--><Host name="session.ahui.org"  appBase="/code/session"unpackWARs="true" autoDeploy="true"></Host>

2.创建目录,编写代码(所有节点都需要配置)

[root@web02 ~]# mkdir /code/session/ROOT -p
[root@web02 ~]# vi /code/session/ROOT/index.jsp
<body><%//HttpSession session = request.getSession(true);System.out.println(session.getCreationTime());out.println("<br> web01/WEB2 SESSION ID:" + session.getId() + "<br>");out.println("Session created time is :" + session.getCreationTime()+ "<br>");%>
</body>

3.接入负载均衡

[root @lb01 conf.d]# cat >/etc/nginx/conf.d/proxy_session.ahui.com.conf<<'EOF'
upstream session {server 172.16.1.7:8080;server 172.16.1.8:8080;
}server {listen 80;server_name session.ahui.org;location / {proxy_pass http://session;include proxy_params;}
}
EOF

无会话保持:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yx8tH4DY-1656649697317)(Tomcat 集群部署.assets/image-20210913161153434.png)]

4.接入 TomcatClusterRedisSessionManager

( 参考官方地址: https://github.com/ran-jit/tomcat-cluster-redis-session-manager )

0. [root@web01 ~]# wget https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/download/4.0/tomcat-cluster-redis-session-manager.zip1.解压zip包   
[root@web01 ~]# unzip tomcat-cluster-redis-session-manager.zip2.拷贝jars到tomcat的/lib目录中
[root@web01 ~]# cp tomcat-cluster-redis-session-manager/lib/* /soft/tomcat/lib/3.拷贝conf下的redis.properties文件,到tomcat的conf文件
[root@web01 ~]# cp tomcat-cluster-redis-session-manager/conf/redis-data-cache.properties /soft/tomcat/conf/4.将配置文件中连接redis地址修改为如下地址即可
[root@web01 ~]# vim /soft/tomcat/conf/redis-data-cache.properties
redis.hosts=172.16.1.51:63795.添加如下两行至tomcat/conf/context.xml  (添加在</Context> 上一行 )
[root@web01 ~]# vim /soft/tomcat/conf/context.xml
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager" />

Tomcat+Nginx+Redis+Java

项目地址: https://gitee.com/mail_osc/wangmarket

—> 已编译: git clone https://gitee.com/zheguabaoshu/tomcat-project-compilation.git


http://chatgpt.dhexx.cn/article/x3BjHwor.shtml

相关文章

Tomcat系列之五:Tomcat集群

基于mod_proxy实现负载均衡 在httpd.conf中启用httpd-proxy.conf配置文件&#xff0c; Include /etc/httpd/extra/httpd-proxy.conf 修改httpd-proxy.conf文件&#xff1a; ProxyRequests Off <proxy balancer://lbcluster1>BalancerMember ajp://192.168.1.211:8009 loa…

集群与jetspeed

1 、 集群背景介绍 1.1 术语定义服务软体是b/s或c/s结构的s部分&#xff0c;是为b或c提供服务的服务性软件系统。 服务硬体指提供计算服务的硬件、比如pc机、pc服务器。 服务实体通指服务软体和服务硬体。 客户端指接受服务实体服务的软件或硬件。 1.2 两大关键特性集…

Tomcat集群搭建超详细

TOMCAT集群 目录 TOMCAT集群 1 1 集群 1 1.1 什么是集群 1 1.2 集群的特性 1 1.3 集群的分类 1 1.4 TOMCAT集群配置的优缺点 2 1.5 APACHETOMCAT 2 1.6 环境说明 2 2 软件安装 3 2.1 安装说明 3 2.2 JDK安装 3 2.3 APACHE安装 4 2.4 TOMCAT安装 4 3 集群配置 6 …

JAXB元素详解

JAXB简介 JAXB&#xff08;Java Architecture for XML Binding) 是一个业界的标准&#xff0c;是一项可以根据XML Schema产生Java类的技术。该过程中&#xff0c;JAXB也提供了将XML实例文档反向生成Java对象树的方法&#xff0c;并能将Java对象树的内容重新写到XML实例文档。从…

xml java jaxb_【Java】JAXB操作XML用法详解

什么是JAXB? JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。在JAX-WS(Java的WebService规范之一)中,JAXB可以实现对象和XML之间相互转换。Unmarshaller类管理将XML数据反序列化为新创建的Java内容树的进程,并可在解…

java jaxb 注解_一、JAXB注解的使用详解

一、首先先上一段测试的代码下面的说明和测试都已这一段代码为主 package shiqingxue.cn.itcast.utils.xml; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax…

JAXB应用实例

博文目录 一 JavaBean和XML相互转换初体验二 JAXB使用基础介绍三 应用实际四 问题补充 正文 过往的项目中数据存储都离不开数据库&#xff0c;不过最近做的一个项目的某些数据&#xff08;比如人员信息、菜单、权限等等&#xff09;却完全没有涉及任何数据库操作&#xff0c;直…

JAXB常用注解讲解(超详细)

简介&#xff1a; JAXB&#xff08;Java Architecture for XML Binding) 是一个业界的标准&#xff0c;是一项可以根据XML Schema产生Java类的技术。该过程中&#xff0c;JAXB也提供了将XML实例文档反向生成Java对象树的方法&#xff0c;并能将Java对象树的内容重新写到XML实例…

OpenCV-Python (Canny边缘检测)

Canny边缘检测是一种非常流行的边缘检测算法&#xff0c;是John Canny在1986年提出的。它是一个多阶段的算法&#xff0c;即由多个步骤构成。 图像降噪计算图像梯度非极大值抑制阈值筛选 原型 OpenCV-Python中Canny函数的原型为&#xff1a; edge cv2.Canny(image, thresh…

python-opencv之边缘检测(cv2.Canny)

理论 Canny边缘检测是一种常用的边缘检测算法&#xff0c;并且他是一个多阶段的算法&#xff0c;分成如下几个阶段&#xff1a; 1. 消除噪声 由于边缘检测容易受到图像中噪声的影响&#xff0c;第一步是用5x5高斯滤波器去除图像中的噪声。 2. 寻找图像的强度梯度 然后对平滑后…

Canny边缘检测算法及实现

Canny边缘检测算法及实现 微信公众号&#xff1a;幼儿园的学霸 目录 文章目录 Canny边缘检测算法及实现目录前言原理步骤实现参考资料 前言 提取图片的边缘信息是底层数字图像处理的基本任务之一.边缘信息对进一步提取高层语义信息有很大的影响. 对图像提取边缘可以通过图像的…

Canny边缘检测算法

Canny是目前最优秀的边缘检测算法&#xff0c;其目标为找到一个最优的边缘&#xff0c;其最优边缘的定义为&#xff1a; 好的检测&#xff1a;算法能够尽可能的标出图像中的实际边缘好的定位&#xff1a;标识出的边缘要与实际图像中的边缘尽可能接近最小响应&#xff1a;图像中…

Canny算子边缘检测原理及实现

写在前面 Canny边缘检是在在1986年提出来的&#xff0c;到今天已经30多年过去了&#xff0c;但Canny算法仍然是图像边缘检测算法中最经典、先进的算法之一。 相比Sobel、Prewitt等算子&#xff0c;Canny算法更为优异。Sobel、Prewitt等算子有如下缺点&#xff1a; 没有充分利…

Opencv(C++)学习系列---Canny边缘检测算法

目录 【1】边缘检测算法流程 【2】Canny算子介绍 【3】完整代码 【1】边缘检测算法流程 使用高斯滤波器来平滑图像&#xff0c;达到滤除噪声的效果。(降噪)计算图像中每个像素点的梯度大小和方向&#xff08;求梯度,与sobel算法求梯度一致&#xff09;使用非极大值抑制&…

OpenCV-Canny边缘检测

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 函数原型 void Canny( InputArray image, OutputArray edges,double threshold1, double threshold2,int apertureSize 3, boo…

Python cv.Canny()方法参数与用法详解

函数原型与参数详解 OpenCV提供了cv.Canny()方法&#xff0c;该方法将输入的原始图像转换为边缘图像。该方法的原型为&#xff1a; cv.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]]) -> edges cv.Canny(dx, dy, threshold1, threshold2[…

OpenCV—python 边缘检测(Canny)

边缘检测 一、边缘定义及类型二、边缘检测算子类别三、OpenCV-Python 中 Canny() 参数 一、边缘定义及类型 边缘类型&#xff1a;简单分为4中类型&#xff0c;阶跃型、屋脊型、斜坡型、脉冲型&#xff0c;其中阶跃型和斜坡型是类似的&#xff0c;只是变化的快慢不同。 二、边…

Canny算子Matlab实现

1、Canny边缘提取原理 Canny边缘检测方法利用了梯度方向信息&#xff0c;采用“非极大抑制”以及双阈值技术&#xff0c;获得了单像素连续边缘&#xff0c;是目前所认为的检测效果较好的一种边缘检测方法。 先利用高斯函数对图像进行低通滤波&#xff1b;然后对图像中的每个像…

canny算子的python实现以及pytorch实现

canny算子的python实现以及pytorch实现 canny的python实现canny的pytorch实现 canny的python实现 参考Canny边缘检测算法(python 实现&#xff09; import numpy as np import cv2 as cv from matplotlib import pyplot as pltdef smooth(image, sigma 1.4, length 5) :&qu…

Python 使用cv2.canny 进行图像边缘检测

CV2提供了提取图像边缘的函数canny。其算法思想如下&#xff1a; 1. 使用高斯模糊&#xff0c;去除噪音点&#xff08;cv2.GaussianBlur&#xff09;2. 灰度转换&#xff08;cv2.cvtColor&#xff09;3. 使用sobel算子&#xff0c;计算出每个点的梯度大小和梯度方向4. 使用非极…