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

news2024/11/23 15:34:52

这里写目录标题

  • Tomcat多实例+动静分离、负载均衡
    • 一、Tomcat多实例部署
      • 1、安装JDK
      • 2、安装启动tomcat
    • 二、Nginx+Tomcat负载均衡、动静分离
      • 1、Nginx负载均衡实现原理
        • 1.1 原理
        • 1.2 Nginx配置反向代理的主要参数
      • 2、Nginx动静分离实现原理
        • 2.1 原理
        • 2.2 Nginx静态处理优势
      • 3、动静分离配置(七层代理)
        • 1)部署3台tomcat应用服务器
          • (1)安装JDK
          • (2)安装启动tomcat
        • 2)部署Nginx 负载均衡器
          • (1)安装nginx
          • (2)参数配置
          • (3)配置nginx处理动态页面请求
        • 3)动静分离配置
          • (1)配置tomcat动态页面
          • (2)配置Nginx静态页面
          • (3)测试动静分离效果
      • 4、负载均衡配置(四层代理)
        • 1)安装nginx服务器并配置动态和静态页面
        • 2)部署nginx负载均衡器
        • 3)配置反向代理的参数
        • 4)关掉长连接
        • 5)浏览器测试负载均衡效果

Tomcat多实例+动静分离、负载均衡

一、Tomcat多实例部署

1、安装JDK

7-4(192.168.210.104)
cd /opt
tar xf jdk-8u91-linux-x64.tar.gz
#解压
mv jdk1.8.0_91/ /usr/local/
#移到/usr/local/目录下

在这里插入图片描述

vim /etc/profile.d/java.sh
#配置环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

在这里插入图片描述

source /etc/profile.d/java.sh
#刷新
java -version
#查看版本

在这里插入图片描述

2、安装启动tomcat

1)安装tomcat

cd /opt
tar xf apache-tomcat-8.5.16.tar.gz
cp -a apache-tomcat-8.5.16 /usr/local/tomcat1
#把apache-tomcat-8.5.16复制到tomcat1
cp -a apache-tomcat-8.5.16 /usr/local/tomcat2
#把apache-tomcat-8.5.16复制到tomcat2
cd /usr/local/
ls

在这里插入图片描述

2)修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号

#修改tomcat2的端口号
vim /usr/local/tomcat2/conf/server.xml
#8005改成8006
#8080改成8081
#8009改成8010

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

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

vim /usr/local/tomcat1/bin/startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1

在这里插入图片描述

vim /usr/local/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=/usr/local/tomcat1
export TOMCAT_HOME=/usr/local/tomcat1

在这里插入图片描述

vim /usr/local/tomcat2/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=/usr/local/tomcat2
export CATALINA_HOME=/usr/local/tomcat2
export TOMCAT_HOME=/usr/local/tomcat2

在这里插入图片描述

vim /usr/local/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=/usr/local/tomcat2
export CATALINA_HOME=/usr/local/tomcat2
export TOMCAT_HOME=/usr/local/tomcat2

在这里插入图片描述

4)启动各 tomcat 中的 /bin/startup.sh

/usr/local/tomcat1/bin/startup.sh 
/usr/local/tomcat2/bin/startup.sh

在这里插入图片描述

ss -lntp | grep java
#过滤java中开启的端口

在这里插入图片描述

5)浏览器访问测试

http://192.168.210.104:8080
http://192.168.210.104:8081

在这里插入图片描述

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

1、Nginx负载均衡实现原理

1.1 原理
  • Nginx实现负载均衡是通过反向代理实现
  • 反向代理是原理
1.2 Nginx配置反向代理的主要参数
  • upstream 服务池名{}(配置后端服务器池,以提供响应数据)
  • proxy_pass http://服务池名(配置将访问请求转发给后端服务器池的服务器处理)

2、Nginx动静分离实现原理

2.1 原理

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

2.2 Nginx静态处理优势
  • Nginx处理静态页面的效率远高于Tomcat的处理能力
  • 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
  • Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
  • Nginx处理静态资源的能力是Tomcat处理的6倍

3、动静分离配置(七层代理)

在这里插入图片描述

1)部署3台tomcat应用服务器
(1)安装JDK
#tomcat1和tomcat2在上面tomcat多实例部署中已经部署过了,不再演示,现在部署tomcat3#
7-3(192.168.210.103)
cd /opt 
rpm -ivh jdk-8u201-linux-x64.rpm 
#安装JDK
java -version
#查看版本

在这里插入图片描述

设置JDK环境变量

vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

在这里插入图片描述

source /etc/profile.d/java.sh
java -version
#版本发生变化,配置成功

在这里插入图片描述

使用文本工具编写java源代码Hello.java

vim Hello.java

public class Hello {
  public static void main(String[] args){
    System.out.println("Hello World!");
  }
}

在这里插入图片描述

javac Hello.java
#生成字节码文件
java Hello
#运行字节码文件

在这里插入图片描述

(2)安装启动tomcat
cd /opt/
tar xf apache-tomcat-9.0.16.tar.gz
#解压软件包
mv apache-tomcat-9.0.16 /usr/local/tomcat
#把源码包目录移到/usr/local/tomcat目录下

在这里插入图片描述

cd /usr/local/tomcat/bin/
#切换到/usr/local/tomcat/bin/目录
ls
/usr/local/tomcat/bin/startup.sh
#启动
ss -lntp | grep :8080
#8080端口开启

在这里插入图片描述

http://192.168.210.103:8080
#在浏览器访问8080端口,tomcat部署完成

在这里插入图片描述

2)部署Nginx 负载均衡器
(1)安装nginx
#用yum安装的方式在192.168.210.105服务器上配置nginx
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak
vim nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

yum install nginx -y

在这里插入图片描述

(2)参数配置
vim /etc/nginx/nginx.conf
#修改主配置文件
http{
#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
upstream backend{
   server 192.168.210.104:8080 weight=1
   server 192.168.210.104:8081 weight=1
   server 192.168.210.103:8080 weight=1
 }
}

在这里插入图片描述

(3)配置nginx处理动态页面请求
vim /etc/nginx/conf.d/default.conf
#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
server{
    location ~* .*\.jsp$ {
       proxy_pass http://backend;
       #设置后端的Web服务器可以获取远程客户端的真实IP
       #设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来自反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了
       proxy_set_header HOST $host;
       ##把$remote_addr赋值给X-Real-IP,来获取源IP
       proxy_set_header X-Real-IP $remote_addr;
       ##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
       proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
  }
}

在这里插入图片描述

nginx -t
#检查语法
nginx -s reload
#刷新

在这里插入图片描述

3)动静分离配置
(1)配置tomcat动态页面
#192.168.210.103服务器
vim /usr/local/tomcat/webapps/wyx/test.jsp
#制作test.jsp动态页面3
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP tomcat3 page</title>  
</head>
<body>
<% out.println("动态页面 3,i love you");%>
</body>
</html>

在这里插入图片描述

#192.168.210.104服务器
cd /usr/local/tomcat1/webapps/
mkdir wyx
#建立wyx目录
cd wyx/
vim test.jsp
#编辑test.jsp动态页面1

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP tomcat1 page</title>  
</head>
<body>
<% out.println("动态页面 1,you like me");%>
</body>
</html>

在这里插入图片描述

#192.168.210.104服务器
cd /usr/local/tomcat2/webapps/
mkdir wyx
vim test.jsp
#编辑test.jsp动态页面2

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP tomcat2 page</title>  
</head>
<body>
<% out.println("动态页面 2,i love you and you like me");%>
</body>
</html>

在这里插入图片描述

在浏览器访问测试效果

http://192.168.210.103:8080/wyx/test.jsp
http://192.168.210.104:8080/wyx/test.jsp
http://192.168.210.104:8081/wyx/test.jsp

在这里插入图片描述

(2)配置Nginx静态页面
cd /usr/share/nginx/html/
#切换到网页根目录
echo '<h1>this is nginx static web1 page!</h1>' > test.html
#准备一个静态页面输入到test.html
systemctl start nginx
#开启nginx

在这里插入图片描述

mkdir /usr/share/nginx/html/wyx
#创建wyx目录
mv test.html wyx/
#把test.html移到wyx目录下

在这里插入图片描述

#在浏览器访问
http://192.168.210.105/wyx/test.html

在这里插入图片描述

(3)测试动静分离效果
http://192.168.210.105/wyx/test.html
#测试静态页面效果

在这里插入图片描述

192.168.210.105/wyx/test.jsp
#动态页面每刷新一次,就会出现不同的动态页面

在这里插入图片描述

4、负载均衡配置(四层代理)

在这里插入图片描述

1)安装nginx服务器并配置动态和静态页面
#192.168.210.105服务器
scp /etc/yum.repos.d/nginx.repo 192.168.210.106:`pwd`
#把nginx传给192.168.210.106服务器

在这里插入图片描述

#192.168.210.106服务器
systemctl stop firewalld
setenforce 0
#关闭防火墙
cd /etc/yum.repos.d/
ls
yum install nginx -y
#安装nginx

在这里插入图片描述

#192.168.210.105服务器
cd /etc/nginx/
scp -r conf.d/ nginx.conf 192.168.210.106:`pwd`
#把nginx下的conf.d目录和nginx.conf文件传给192.168.210.106服务器
cd /usr/share/nginx/html/
scp -r wyx/ 192.168.210.106:`pwd`
#把wyx目录传给192.168.210.106服务器

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

#192.168.210.106服务器
cd /usr/share/nginx/html/wyx/
vim test.html
#配置静态页面
<h1>this is nginx static web2 page!</h1>

在这里插入图片描述

cd /etc/nginx
vim nginx.conf
cd /etc/nginx/conf.d
vim default.conf
#查看一下nginx.conf和default.conf的配置
systemctl start nginx
#启动nginx

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

#在浏览器访问动态页面和静态页面
192.168.210.106/wyx/test.html
192.168.210.106/wyx/test.jsp

在这里插入图片描述

2)部署nginx负载均衡器
#192.168.210.107服务器
systemctl stop firewalld
setenforce 0
#关闭防火墙
#安装nginx
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel
#安装依赖包
cd /opt/
tar xf nginx-1.18.0.tar.gz 
#解压
cd nginx-1.18.0/

./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module

make -j2 && make install
#编译安装
vim /usr/lib/systemd/system/nginx.service
#创建.service自启动文件
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start nginx
#启动nginx服务
3)配置反向代理的参数
cd /usr/local/nginx/conf/
vim nginx.conf

stream {
   upstream nginx_server {
		server 192.168.210.105:80;
		server 192.168.210.106:80;
   }
   server {
		listen 80;
		#如果已经有了80端口,把另一个80端口改掉,不能有两个80端口
		proxy_pass nginx_server;
   } 
 }

在这里插入图片描述

nginx -t 
#检查语法格式
nginx -s reload
#刷新
ss -lntp | grep nginx
#过滤nginx端口号

在这里插入图片描述

4)关掉长连接
vim /usr/local/nginx/conf/nginx.conf
#为了保证实验的流畅性,把长连接关掉,其他两台nginx服务器也关掉
keepalive_timeout 0;
#keepalive_timeout 65;

在这里插入图片描述

5)浏览器测试负载均衡效果
#在浏览器访问
http://192.168.210.107/wyx/test.html
#每刷新一次,就会出现不同的静态页面,实现了负载均衡

在这里插入图片描述

http://192.168.210.107/wyx/test.jsp
#每刷新一次就会出现不同的静态页面,实现了负载均衡

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC(生成式AI)试用 7 -- 桌面小程序

生成式AI&#xff0c;别人用来写作&#xff0c;我先用来写个桌面小程序。 桌面小程序&#xff1a;计算器 需求 Python开发图形界面&#xff0c;标题&#xff1a;计算器 - * / 基本运算计算范围&#xff1a;-999999999 ~ 999999999** 乘方计算&#xff08;例&#xff0c;2*…

第78步 时间序列建模实战:随机森林回归建模

基于WIN10的64位系统演示 一、写在前面 之前我们以决策树为例子&#xff0c;展示了各种花里胡哨的时间序列建模。 从这一期开始&#xff0c;我们继续基于python构建各种机器学习和深度学习的时间序列预测模型。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》…

python - os模块 常用api方法和demo练习

文章目录 前言python-os模块常用api方法和demo练习1. 常用方法2. demo 练习3. demo 执行结果 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#…

进入IT行业:选择前端开发还是后端开发?

一、前言 开发做前端好还是后端好&#xff1f;这是一个常见的问题&#xff0c;特别是对于初学者来说。在编程世界中&#xff0c;前端开发和后端开发分别代表着用户界面和数据逻辑&#xff0c;就像城市的两个不同街区一样。但是&#xff0c;究竟哪个街区更适合我们作为开发者呢…

chatgpt 只会死记硬背吗

本周写两篇关于 chatgpt 的随感&#xff0c;我不善于写文档&#xff0c;所以我的文字多是输出直感和观点&#xff0c;而不是知识&#xff0c;没有关于 chatgpt 的原理和应用&#xff0c;甚至术语也不匹配&#xff0c;反正就是想到哪算哪吧。 都说 chatgpt 没有内在逻辑&#xf…

51单片机用IIc控制OLED显示数组内容

为了能够看到51单片机接收到的串口数据&#xff0c;我选择了用oled显示收到的数据&#xff0c;特此花重金买了一块oled屏128X64的屏幕大概10来块钱吧&#xff01;首先要达成的小目标就是能够显示数组的内容&#xff0c;建立一个字符数组&#xff0c;用来接收串口收到的数据&…

北斗智能终端:助力森林保护的新利器

北斗智能终端&#xff1a;助力森林保护的新利器 近年来&#xff0c;大兴安岭图强林业局利用北斗等技术&#xff0c;推进森林保护的数字化进程&#xff0c;为高质量发展注入了新的动力和活力。 据了解&#xff0c;当地利用北斗终端对森林资源进行精准管理。为88名管护员和10名监…

软件设计模式系列之十九——中介者模式

中介者模式目录 1 模式的定义2 举例说明3 结构4 实现步骤5 代码实现6 典型应用场景7 优缺点8 类似模式9 小结 1 模式的定义 中介者模式是一种行为型设计模式&#xff0c;它用于降低对象之间的直接通信&#xff0c;通过引入一个中介者对象来管理对象之间的交互。这种模式有助于…

如何配置代理

打开Clask&#xff0c;设置为系统代理&#xff0c;选择规则判断&#xff0c;规则判断就是需要走代理的走代理&#xff0c;不需要走的就不用走代理 本地使用代理 如何想要让某个地方使用代理&#xff0c;可以直接在该地方的终端进行设置 先复制一下终端代理命令&#xff0c;然…

python使用mitmproxy和mitmdump抓包在手机上抓包(三)

现在手机的使用率远超过电脑&#xff0c;所以这篇记录用mitmproxy抓手机包&#xff0c;实现手机流量监控。 环境&#xff1a;win10 64位&#xff0c;Python 3.10.4&#xff0c;雷电模拟器4.0.78&#xff0c;android版本7.1.2&#xff08;设置-拉至最底部-关于平板电脑&#xf…

一篇博客学会系列(2)—— C语言中的自定义类型 :结构体、位段、枚举、联合体

目录 前言 1、结构体 1.1、结构体类型的声明 1.2、特殊的结构体类型声明 1.3、结构体的自引用 1.4、结构体的定义和初始化 1.5、结构体成员变量的调用 1.6、结构体内存对齐 1.6.1、offsetof 1.6.2、结构体大小的计算 1.6.3、为什么存在内存对齐&#xff1f; 1.7、…

C理解(一):内存与位操作

本文主要探讨C语言的内存和为操作操作相关知识。 冯诺依曼结构和哈佛结构 冯诺依曼结构&#xff1a;数据和代码放在一起,便于读取和修改,安全性低 哈佛结构是&#xff1a;数据和代码分开存放,安全性高,读取和修麻烦 内存 内存是用来存储全局变量、局…

chatgpt,神经网络与拥塞控制

chatgpt 是一个巨大的带答案的完形填空题库&#xff0c;它可以回答几乎所有的文字类问题&#xff0c;不保证完全正确&#xff0c;但大致正确。它是怎么做到的&#xff1f; 它怎么知道我要问什么&#xff0c;如果它知道我要问什么&#xff0c;那么问题的不同表达形式它也一定知…

如何利用AI算法+EasyCVR视频监控技术打造鱼塘养殖监管方案

对鱼塘养殖行业来说&#xff0c;养殖区域面积大、管理难&#xff0c;经常会遇到偷钓者、盗窃鱼苗、非法入侵等监管难题。传统的人工监管模式不仅耗费人力成本&#xff0c;而且监管效率低下&#xff0c;无法满足当前养殖户的需求。因此&#xff0c;搭建智能化的远程视频监控系统…

Linux 基本语句_5_创建静态库|动态库

静态库 创建主函数&#xff1a;main.c 应用函数&#xff1a;add.c、sub.c、mul.c 创建calc.h文件作为头文件 生成可执行文件*.o文件 gcc -c add.c -o add.o ....包装*.o文件为静态库 ar -rc libmymath.a add.o sub.o mul.o编译静态库并指明创建静态库的位置 sudo gcc mai…

原型、原型链、判断数据类型

目录 作用 原型链 引用类型&#xff1a;__proto__(隐式原型)属性&#xff0c;属性值是对象函数&#xff1a;prototype(原型)属性&#xff0c;属性值是对象 Function&#xff1a;本身也是函数 相关方法 person.prototype.isPrototypeOf(stu) Object.getPrototypeOf(objec…

论企业IPV4和IPV6网络融合互通网络规划设计

01、IPv6改造问题及整体改造思路 随着“十四五”期间国家政策对IPv6深化改造及规模部署的推动&#xff0c;在IPv6改造过程中出现了越来越多的系统性问题&#xff0c;如图1所示。 图1 关于IPv6改造的各种疑问 所有跨设备通信的IT软硬件系统均需要处理IP地址&#xff0c;各领域…

Android SDK目录结构

目录结构如下&#xff1a; 1&#xff1a;add-ons 该目录中存放 Android 的扩展库&#xff0c;比如 Google Maps&#xff0c;但若未选择安装 Google API&#xff0c;则该目录为空。 2&#xff1a;build-tools 编译工具目录&#xff1a;保存了Android开发常用的工具&#xff0…

【.NET源码解读】Configuration组件及自动更新

Configuration组件是.NET中一个核心的、非常重要的组件。它提供了一种方便的机制&#xff0c;用于从配置文件、环境变量、命令行参数等各种数据源中读取和配置应用程序&#xff0c;以满足不同环境下应用程序的需求。 在本篇文章中&#xff0c;将会介绍Configuration的基本用法…

使用Visual Studio调试排查Windows系统程序audiodg.exe频繁弹出报错

VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&a…