当前位置: 首页 > news >正文

Tomcat多实例 + Tomcat负载均衡、动静分离(Nginx联动)

多实例+联动

  • 一、Tomcat 多实例
    • 1.1 什么是Tomcat多实例?
    • 1.2 配置思路
    • 1.3 配置实现
      • 1.3.1 安装jdk
      • 1.3.2 安装tomcat
      • 1.3.3 配置 tomcat 环境变量
      • 1.3.4 修改端口号
      • 1.3.5 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
      • 1.3.6 启动各 tomcat 中的 /bin/startup.sh
      • 1.3.7 浏览器访问测试
  • 二、Nginx+Tomcat负载均衡、动静分离
    • 2.1 原理部分
    • 2.2 配置思路
    • 2.3 配置部分
      • 2.3.1 配置nginx1,四层代理实现负载均衡
      • 2.3.2 配置nginx2和nginx3,七层代理动静分离
      • 2.3.3 Tomcat配置,作为动态资源服务器
      • 2.3.4 静态页面测试
      • 2.3.5 动态资源测试

一、Tomcat 多实例

1.1 什么是Tomcat多实例?

Tomcat 多实例是指在同一台服务器上运行多个独立的 Tomcat 实例

每个 Tomcat 实例都具有独立的配置文件、日志文件、应用程序和端口。

通过配置不同的端口和文件目录,可以实现同时运行多个独立的 Tomcat 服务器,每个服务器都可以独立处理用户的请求。

这样可以提高服务器的并发处理能力和灵活性,同时隔离不同的应用程序和配置。

1.2 配置思路

1)修改 tomcat 主配置文件 server.xml 中的三个端口号 8080 8005 8009;
2)修改 tomcat 启动停止脚本 startup.sh shutdown.sh,添加 export CATALINA BASE CATALINA HONE TOWCAT HOME 变量都指向实例的工作目录。

1.3 配置实现

1.3.1 安装jdk

步骤1这里不再赘述,详见上一篇博客。

1.3.2 安装tomcat

mkdir /usr/local/tomcat
#实例1
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1 
#实例2
cp -a /usr/local/tomcat/tomcat1  /usr/local/tomcat/tomcat2 
#实例3
cp -a /usr/local/tomcat/tomcat1  /usr/local/tomcat/tomcat3

在这里插入图片描述

1.3.3 配置 tomcat 环境变量

vim /etc/profile.d/tomcat.sh#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2#tomcat3
export CATALINA_HOME3=/usr/local/tomcat/tomcat3
export CATALINA_BASE3=/usr/local/tomcat/tomcat3
export TOMCAT_HOME3=/usr/local/tomcat/tomcat3source /etc/profile.d/tomcat.sh

1.3.4 修改端口号

----------------------------------------------------------------------------------------------------------
第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
第二个连接器默认监听8009端口,AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口。
----------------------------------------------------------------------------------------------------------
#tomcat2
vim /usr/local/tomcat/tomcat2/conf/server.xml  
#22行,修改Server prot,默认为8005 -> 修改为8006
#69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#tomcat3
vim /usr/local/tomcat/tomcat3/conf/server.xml
#22行,修改Server prot,默认为8005 -> 修改为8007
#69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8082
#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8011

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3.5 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量

以tomcat1为例,tomcat2和tomcat3配置相同

#tomcat1
vim /usr/local/tomcat/tomcat1/bin/startup.shexport CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1vim /usr/local/tomcat/tomcat1/bin/shutdown.shexport CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1

在这里插入图片描述
在这里插入图片描述

1.3.6 启动各 tomcat 中的 /bin/startup.sh

#都是后台启动
/usr/local/tomcat/tomcat1/bin/startup.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 
/usr/local/tomcat/tomcat3/bin/startup.sh 

在这里插入图片描述

ss -natp | grep java

在这里插入图片描述

1.3.7 浏览器访问测试

http://192.168.2.100:8080
http://192.168.2.100:8081
http://192.168.2.100:8082

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Tomcat 多实例配置成功

二、Nginx+Tomcat负载均衡、动静分离

2.1 原理部分

服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端。

2.2 配置思路

使用七层代理实现动静分离+负载均衡,配置tomcat多实例,多个tomcat轮流处理动态资源(轮询算法);

访问静态资源,由nginx直接处理并响应。

使用四层代理实现nginx负载均衡,客户端到nginx1的请求,由nginx2和nignx3轮流处理(轮询算法)。

2.3 配置部分

在这里插入图片描述

nginx1 192.168.2.102

nginx2 192.168.2.103

nginx3 192.168.2.104

tomcat1 192.168.2.100:8080

tomcat2 192.168.2.100:8081

tomcat3 192.168.2.100:8082

2.3.1 配置nginx1,四层代理实现负载均衡

前置准备

#关闭防火墙和selinux
systemctl disable firewalld.service --now
setenforce 0

编译安装nginx,用systemd管理

#依赖
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#创建管理用户
useradd -M -s /sbin/nologin nginx#编译安装ngnix
cd /opt
tar -zxf nginx-1.18.0\ .tar.gzcd nginx-1.18.0./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \									#启用文件修改支持
--with-http_stub_status_module \					#启用状态统计
--with-http_gzip_static_module \					#启用 gzip静态压缩
--with-http_flv_module \							#启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module								#启用 SSL模块,提供SSL加密功能
--with-stream										#启用 stream模块,提供4层调度make -j2 && make install #软连接 添加到环境变量中
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

在这里插入图片描述

#添加到系统服务中
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsystemctl daemon_reload
chmod 754 /lib/systemd/system/nginx.service
#启动nginx
systemctl start nginx
systemctl status nginx 

在这里插入图片描述

配置负载均衡,四层代理实现

vim /usr/local/nginx/conf/nginx.conf
...
#写在http部分上面
stream {upstream myserver {server 192.168.2.103:80 weight=1;server 192.168.2.104:80 weight=1;}server {listen 80;proxy_pass myserver;}
}nginx -t
nginx -s reload 

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

ss -natp | grep nginx

在这里插入图片描述

2.3.2 配置nginx2和nginx3,七层代理动静分离

nginx2和nginx3的配置基本相同

以nginx2为例

前置准备

systemctl disable firewalld --now
setenforce 0

yum安装nginx

yum -y install epel-release.noarch -y
yum -y install nginx systemctl start nginx 

编辑配置文件 七层代理负载均衡,轮询+动静分离

在这里插入图片描述

在这里插入图片描述

nginx -t 
nginx -s reload

创建静态页面+准备测试图片

#静态页面
cd /usr/share/nginx/html
mkdir byyb
echo "This is static source ,from byyb" > index.html#准备测试图片,放在byyb下

在这里插入图片描述

nginx3的配置大概相同,除了准备相同名字,不同内容的图片和静态网页,用于测试负载均衡

在这里插入图片描述

2.3.3 Tomcat配置,作为动态资源服务器

已经配置了多实例,配置详细过程见上文。

前置准备

systemctl disable firewalld --now
setenforce 0

准备动态资源

mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test /usr/local/tomcat/tomcat3/webapps/test
#创建动态页面#tomcat1
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>#tomcat2
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>  
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>#tomcat3
vim /usr/local/tomcat/tomcat3/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title>   #指定为 test2 页面
</head>
<body>
<% out.println("动态页面 3,http://www.test3.com");%>
</body>
</html>
#重启服务/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat1/bin/startup.sh /usr/local/tomcat/tomcat2/bin/shutdown.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh /usr/local/tomcat/tomcat3/bin/shutdown.sh 
/usr/local/tomcat/tomcat3/bin/startup.sh 
ss -natp | grep java #测试

在这里插入图片描述

2.3.4 静态页面测试

浏览器访问 http://192.168.2.102/test.jpg
多次刷新

在这里插入图片描述

在这里插入图片描述

浏览器访问 http://192.168.2.102/index.html

在这里插入图片描述
在这里插入图片描述

2.3.5 动态资源测试

#访问代理服务器
浏览器访问http://192.168.2.102/test/index.jsp
多次刷新

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

相关文章:

Tomcat多实例 + Tomcat负载均衡、动静分离(Nginx联动)

多实例联动 一、Tomcat 多实例1.1 什么是Tomcat多实例&#xff1f;1.2 配置思路1.3 配置实现1.3.1 安装jdk1.3.2 安装tomcat1.3.3 配置 tomcat 环境变量1.3.4 修改端口号1.3.5 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件&#xff0c;添加 tomcat 环境变量1.3.6 启…...

bootstrap和application的区别

SpringBoot项目的配置文件支持两种四个&#xff1a; bootstrap和application。 YML文件两个&#xff1a;bootstrap.yml&#xff0c;application.yml 属性文件两个&#xff1a;bootstrap.properties&#xff0c;application.properties 配置文件优先级 SpringBoot支持同时使用…...

【狂神】SpringMVC笔记(一)之详细版

1.Restful 风格 概念&#xff1a; 实现方式&#xff1a; 使用PathVariable 在url相同的情况下&#xff0c;会根据请求方式的不同来执行不同的方法。 使用RestFull风格的好处&#xff1a;简洁、高效、安全 2、接受请求参数及数据回显 2.1、请求参数 方式一&#xff1a;这里…...

vue 对axios进行封装

token配置、中英文配置、对所有接口统一设置防抖、对所有post接口统一设置节流 废话少说直接上代码 request.js import axios from axios // 使用element-ui Message做消息提醒 import { ElMessage } from element-plus//这是为了防止刁民反复切换页面&#xff0c;切换页面…...

第十二章 YOLO的部署实战篇(下篇-cuda)

cuda教程目录 第一章 指针篇 第二章 CUDA原理篇 第三章 CUDA编译器环境配置篇 第四章 kernel函数基础篇 第五章 kernel索引(index)篇 第六章 kenel矩阵计算实战篇 第七章 kenel实战强化篇 第八章 CUDA内存应用与性能优化篇 第九章 CUDA原子(atomic)实战篇 第十章 CUDA流(strea…...

原生JavaScript+PHP多图上传实现

摘要 很多场景下需要选择多张图片上传&#xff0c;或者是批量上传以提高效率&#xff0c;多图上传的需求自然就比较多了&#xff0c;本文使用最简单的XMLHttpRequest异步上传图片。 界面 上传示例 代码 index.html <!DOCTYPE html> <html><head><titl…...

企业架构LNMP学习笔记30

1、upstream 中server的关键字&#xff1a;语法&#xff1a; upstream中的分发之后的几个关键字&#xff1a; 1&#xff09;backup 备 其他的没有backup标识的都不可用了&#xff0c;才分发到backup&#xff1b; 2&#xff09;down 此条配置&#xff0c;不会被分发到。 syst…...

数学建模算法汇总(全网最全,含matlab案例代码)

数学建模常用的算法分类 全国大学生数学建模竞赛中&#xff0c;常见的算法模型有以下30种&#xff1a; 最小二乘法数值分析方法图论算法线性规划整数规划动态规划贪心算法分支定界法蒙特卡洛方法随机游走算法遗传算法粒子群算法神经网络算法人工智能算法模糊数学时间序列分析马…...

openpnp - 底部相机高级矫正后,底部相机看不清吸嘴的解决方法

文章目录 openpnp - 底部相机高级矫正后,底部相机看不清吸嘴的解决方法概述解决思路备注补充 - 新问题 - N1吸嘴到底部相机十字中心的位置差了很多END openpnp - 底部相机高级矫正后,底部相机看不清吸嘴的解决方法 概述 自从用openpnp后, 无论版本(dev/test), 都发现一个大概…...

怎么提高自己当众讲话的能力?

当众讲话是一项重要的沟通技能&#xff0c;它可以帮助你在各种场合中表达自己的观点、影响他人&#xff0c;并建立自信。虽然对很多人来说&#xff0c;当众讲话可能是一项挑战&#xff0c;但通过一些实践和技巧&#xff0c;你可以提高自己的当众讲话能力。下面是一些方法&#…...

孙哥Spring源码第20集

第20集 refresh()-invokeBeanFactoryPostProcessor 四-处理Configuration下的Bean生成代理对象 【视频来源于&#xff1a;B站up主孙帅suns Spring源码视频】【微信号&#xff1a;suns45】 1、二行InvokeBeanFactoryPostProcessors的作用 registryProcessors&#xff1a;处理的…...

【计算机网络】HTTP(上)

文章目录 1.HTTP概念2. URLurlencode 和 urldecode转义规则 3. HTTP的宏观理解HTTP的请求HTTP的响应 4. 见一见HTTP请求和响应请求报头 1. 模拟一个简单的响应response响应报头 2. 从路径中获取内容ReadFile函数的实现 3.不同资源进行区分反序列化的实现ReadOneLine函数的实现P…...

Maven学习记录

一、Maven是什么 简单来说Maven是一个标准化的java管理和构建工具&#xff0c;它提供了一系列规范&#xff0c;包括项目结构&#xff0c;构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09;&#xff0c;依赖管理等。 标准化就是定下…...

H5游戏开发H5休闲小游戏定制H5软件定制

H5游戏是一种运行在网页浏览器中的HTML5技术开发的游戏。H5休闲小游戏通常具有简单的玩法&#xff0c;易于上手&#xff0c;适合快速的娱乐。以下是开发H5休闲小游戏的一般步骤&#xff1a; 1. 制定游戏开发概念&#xff1a; 确定H5游戏开发的主题和玩法。休闲小游戏通常应该…...

Spring基础及IoC容器的理解

Spring概念&#xff1a; 通常所说的Spring指的是Spring Framewprk(Spring框架)&#xff0c;它是一个开源的框架。用一句话概括就是&#xff1a;Spring是包含了众多工具方法的IoC容器。 什么是容器&#xff1f; 容器是用来容纳某种物品的装置&#xff0c;在之前的学习中&…...

护网行动为什么给的钱那么多

因为护网行动是国家应对网络安全问题所做的重要布局之一。 随着大数据、物联网、云计算的快速发展&#xff0c;愈演愈烈的网络攻击已经成为国家安全的新挑战。国家关键信息基础设施可能时刻受到来自网络攻击的威胁。网络安全的态势之严峻&#xff0c;迫切需要我们在网络安全领…...

软考知识汇总-计算机系统

文章目录 1 计算器 1 计算器 算术逻辑单元&#xff08;ALU&#xff09;&#xff1a;运算器重要组成部件&#xff0c;负责处理数据&#xff0c;实现对数据的算数运算和逻辑运算。累加寄存器&#xff08;AC&#xff09;&#xff1a;简称累加器&#xff0c;为ALU提供数据并暂存运…...

OpenCV 11(图像金字塔)

一、 图像金字塔 **图像金字塔**是图像中多尺度表达的一种&#xff0c;最主要用于图像的分割&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说, 图像金字塔是同一图像不同分辨率的子图集合. 图像金字塔最初用于机器视觉和图像压缩。其通过梯次向下采…...

Linux学习笔记-Ubuntu系统用户、群组、权限管理

一、概述 本文记录Ubuntu系统下通过命令操作用户账户进行管理。 Ubuntu系统版本&#xff1a; Linux ubuntu 5.15.0-1034-raspi #37-Ubuntu SMP PREEMPT Mon Jul 17 10:02:14 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux 注&#xff1a;查看系统版本号的指令如下 uname -…...

文章预览 安防监控/视频存储/视频汇聚平台EasyCVR播放优化小tips

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成&#xff0c;…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...