Nginx+Tomcat(多实例)实现动静分离和负载均衡四层、七层(总有些惊奇的际遇,比方说当我遇见你)

news/2024/11/28 7:44:42/

文章目录

  • 一、Tomcat 多实例部署
  • 二、反向代理的两种类型
  • 三、Nginx+Tomcat实现负载均衡和动静分离(七层代理)
    • 1.动静分离和负载均衡原理
    • 2.实现方法
    • 3.部署实例
      • (1)部署Nginx负载均衡服务器
      • (2)配置Tomcat多实例服务器1 (第一部分已完成)
      • (3)配置Tomcat服务器2
      • (4)添加动态和静态测试页面
      • (6)使用windows客户端测试访问静态和动态页面
  • 四、四层代理实例
    • 1.增设nginx服务器(七层代理)
    • 2.增设负载均衡器(四层代理)

一、Tomcat 多实例部署

1.在安装好jdk环境后,添加两例tomcat服务

#解压安装包
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz#移动并复制一例
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

在这里插入图片描述
2.添加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#启用文件
source /etc/profile.d/tomcat.sh

在这里插入图片描述
3.修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号

修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号
vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">		#22行,修改Server prot,默认为8005 -> 修改为8006
<Connector port="8081" protocol="HTTP/1.1"		#69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />	#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

第一个端口默认为8005,用于监听shutdown关闭信息
第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
第二个连接器默认监听8009端口,AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口。

在这里插入图片描述
4.修改两个 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
5.启动两例 tomcat 运行各自的 startup.sh 文件

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

在这里插入图片描述
检查是否都开启了
在这里插入图片描述

6.测试访问两个端口 8080和8081

http://192.168.17.50:8080
http://192.168.17.50:8081

在这里插入图片描述

二、反向代理的两种类型

1.基于七层协议(http、https、mail) 的反向代理

2.基于四层的 IP 和(TCP/UDP)端口的反向代理

三、Nginx+Tomcat实现负载均衡和动静分离(七层代理)

1.动静分离和负载均衡原理

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

由于Nginx服务是轻量级、高性能,处理静态页面强,但是几乎不能处理动态页面,所以需要转发给多台tomcat服务器处理动态页面请求。

负载均衡是以Nginx为复制均衡器,Tomcat作为应用服务器。Nginx的负载均衡是通过反向代理实现的。反向代理即作为服务端的代理,接受客户端的请求,并根据配置转发给后端的tomcat服务器,处理完之后再通过nginx返回给客户端。

在这里插入图片描述

2.实现方法

nginx + tomcat 动静分离
nginx使用location去正则匹配用户的访问路径的前缀或者后缀,去判断接收的请求是静态的还是动态的,静态资源请求在Nginx本地进行处理响应,动态页面请求通过反向代理转发给后端应用服务器

负载均衡
使用反向代理,先在http块中使用upstream模块定义服务器组名和服务器列表,使用location匹配路径再用proxy_pass http://… 服务器组名进行七层代理转发。
在这里插入图片描述

3.部署实例

实验准备
Liunx服务器
Tomcat服务器1:192.168.116.10:8080 192.168.116.10:8081(多实例部署,参考上面)
Tomcat服务器2:192.168.116.20:8080
Nginx 服务器:192.168.116.30:80
windows客户端
192.168.116.100 用于访问网页测试

(1)部署Nginx负载均衡服务器

关闭防火墙和selinux
在这里插入图片描述
安装前工作

#下载依赖工具
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make#准备nginx程序用户
useradd -M -s /sbin/nologin nginx

准备nginx安装包

在这里插入图片描述
编译安装
在这里插入图片描述

#解压安装包
tar zxvf nginx-1.12.0.tar.gz#自定义编译安装
cd nginx-1.12.0/./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-streammake && make install#优化路径便于使用
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

添加到系统服务(使用systemctl管理)

#编写nginx系统服务文件
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.target#打开nginx服务
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

检查nginx是否开启成功
在这里插入图片描述

(2)配置Tomcat多实例服务器1 (第一部分已完成)

(3)配置Tomcat服务器2

关闭防火墙和selinux

配置jdk环境

#解压到/usr/local/目录下
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/#配置java环境变量
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

部署tomcat

#解压并移动
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat#启动tomcat
/usr/local/tomcat/bin/startup.sh

检查tomcat是否启动
在这里插入图片描述

(4)添加动态和静态测试页面

Tomcat服务器1:8080添加动态测试页面

在/usr/local/tomcat/tomcat1/webapps/test/ 下编写一个简单的jsp页面

(1)Tomcat1 server 配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   #指定为 test1 页面
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
添加配置并重启服务

vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true"></Context>
</Host>/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

在这里插入图片描述
在这里插入图片描述
Tomcat服务器1:8081添加动态测试页面

在/usr/local/tomcat/tomcat2/webapps/test/ 下编写一个简单的jsp页面

mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/testvim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>   #指定为 test2 页面
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>

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

vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat1/bin/startup.sh 

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

Tomcat服务器2:8080 添加动态测试页面

在/usr/local/tomcat/webapps/test/ 下编写一个简单的jsp页面

vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title>   #指定为 test3 页面
</head>
<body>
<% out.println("动态页面 3,http://www.test3.com");%>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
添加配置并重启服务

vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>/usr/local/tomcat/tomcat2/bin/shutdown.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 

在这里插入图片描述
在这里插入图片描述
Nginx 服务器添加静态测试页面
在这里插入图片描述
(5)在nginx服务器配置文件中添加动静分离配置(七层代理)

#准备静态页面和静态图片
echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/game.jpg /usr/local/nginx/html/imgvim /usr/local/nginx/conf/nginx.conf
......
http {
......#gzip on;#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大upstream tomcat_server {server 192.168.80.100:8080 weight=1;server 192.168.80.101:8080 weight=1;server 192.168.80.101:8081 weight=1;}server {listen 80;server_name www.kgc.com;charset utf-8;#access_log logs/host.access.log main;#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理location ~ .*\.jsp$ {proxy_pass http://tomcat_server;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来自反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP,来获取源IPproxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}#配置Nginx处理静态图片请求location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {root /usr/local/nginx/html/img;expires 10d;}location / {root html;index index.html index.htm;}
......}
......
}

在这里插入图片描述
在这里插入图片描述
检查语法并重启服务
在这里插入图片描述

(6)使用windows客户端测试访问静态和动态页面

测试效果
测试静态页面效果
浏览器访问 http://192.168.17.52/
浏览器访问 http://192.168.17.52/game.jpg测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.17.52/index.jsp

访问nginx服务器地址下的静态页面
在这里插入图片描述
访问nginx服务器地址下的动态页面(会转发给tomcat处理)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、四层代理实例

实验架构图
在这里插入图片描述
在第三部分已经部署好了两台tomcat服务器和七层代理nginx服务器,现在需要增设一台nginx服务器和一台四层代理服务器。

1.增设nginx服务器(七层代理)

之前的nginx服务器使用的是源码安装,可以使用yum安装,配置文件位置会有所不同。

yum安装nginx服务

#添加yum源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1#安装
yum install -y nginx#启动服务
systemctl start nginx
systemctl enable nginx

在这里插入图片描述
在/etc/nginx/nginx.conf的http块中添加upstream指定服务器池
在这里插入图片描述
在/etc/nginx/conf.d/default.conf的server块中添加主要location配置
在这里插入图片描述
重启服务并自行添加静态资源用于测试

#重启服务
systemctl restart nginx#添加静态资源用于测试
cd /usr/share/nginx/html/
mkdir static
cd static/

在这里插入图片描述
访问效果应与第三部分实验一致

2.增设负载均衡器(四层代理)

可使用源码编译安装nginx

准备安装包
在这里插入图片描述
解压并自定义编译安装

#安装依赖包
yum install -y gcc gcc-c++ make zlib-devel pcre-devel openssl-devel#添加nginx系统用户
useradd -M -s /sbin/nologin nginx#解压并自定义安装
cd /opt
tar xf nginx-1.22.0.tar.gz
cd nginx-1.22.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-stream --with-http_stub_status_module#编译安装
make && make install

修改/usr/local/nginx/conf/nginx.conf配置文件

cd /usr/local/nginx/conf/
vim nginx.conf

在这里插入图片描述

重启服务并检查

#重启nginx服务
cd /usr/local/nginx/
./sbin/nginx 

在这里插入图片描述
访问测试

静态页面(等待连接保持结束后刷新,配置文件中是65s)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/241573.html

相关文章

联想计算机连接不上蓝牙耳机,thinkpad如何连接蓝牙耳机_thinkpad连接蓝牙耳机的步骤...

现在的电脑一般都配备有蓝牙功能&#xff0c;可以方便用户们使用一些蓝牙设备。例如最近就有小伙伴问小编thinkpad如何连接蓝牙耳机&#xff1f;那么针对这一问题&#xff0c;今天小编就来为大家整理分享关于thinkpad连接蓝牙耳机的步骤&#xff0c;一起往下看吧。 具体步骤如下…

别乱分层,PO、VO、DAO、BO、DTO、POJO 到底应该用在哪里,你知道吗

一、PO :&#xff08;persistant object&#xff09;&#xff0c;持久对象 二、VO :&#xff08;value object&#xff09;&#xff0c;值对象 三、DAO :&#xff08;Data Access Objects&#xff09;&#xff0c;数据访问对象接口 四、BO :&#xff08;Business Object&…

小米运动蓝牙耳机重新配对_小米运动蓝牙耳机怎么连接手机

小米运动蓝牙耳机怎么连接手机,对于这个网友们并不了解,小米运动蓝牙耳机面向喜欢运动的朋友,支持无线蓝牙连接手机端,解放双手摆脱有线的束缚,还支持同时连接两台手机,下面小编就来跟大家讲一讲这款耳机的连接步骤,赶紧跟着小编了解一下吧。 小米运动蓝牙耳机怎么连接手…

小米真蓝牙耳机说明书_【小米真无线蓝牙耳机Air 2评测使用说明书介绍】快充|降噪|蓝牙5.0|开盖即连|快捷操作_摘要频道_什么值得买...

小米真无线蓝牙耳机Air 2评测使用说明书介绍(快充|降噪|蓝牙5.0|开盖即连|快捷操作) 配件方面,我就不给大家多说了,除了一条Type-C充电线,以及一份说明(保修)文件外,就没有其他东西了。 先来看看充电盒的外观设计。小米真无线蓝牙耳机Air 2的充电盒采用了“白色简约”风格设…

android判断是否是蓝牙耳机,Android 检测是否连接蓝牙耳机

前言 欢迎大家我分享和推荐好用的代码段~~声明 欢迎转载&#xff0c;但请保留文章原始出处&#xff1a; CSDN&#xff1a;http://www.csdn.net 雨季o莫忧离&#xff1a;http://blog.csdn.net/luckkof 正文 BluetoothAdapter adapter BluetoothAdapter…

Linux蓝牙耳机软件,Linux下蓝牙耳机的配置与测试

一、在kernel中启动蓝牙支持 在kernel中使用.config作kernel setting Device Driver -> Networking Support -> (M) Bluetooth Sub system Support 二、安装软件包 yum -y install bluez bluez-libs bluez-utils 在rpm.pbone.net下载btsco软件包,并安装: sudo rpm -ivh…

真无线蓝牙耳机哪款延迟低?2020新款游戏专属蓝牙耳机盘点

耳机&#xff0c;相信大家对它并不陌生&#xff0c;不管是运动&#xff0c;办公或是日常娱乐都会用到它。不过随着技术的发展&#xff0c;耳机的形态也发生了翻天覆地的变化&#xff0c;从以前的有线耳机到了现在的无线蓝牙耳机&#xff0c;而真无线耳机的出现就是蓝牙耳机发展…

【Linux系统进阶详解】Linux命令date超细精讲、服务器企业级时间同步ntpdate介绍与实践

1. Linux命令date超细精讲 date命令在Linux系统中用于显示或设置系统时间。其基本语法如下: date [OPTION]... [+FORMAT]其中,[OPTION]是可选参数,用于设置date命令的行为,[+FORMAT]是可选的日期格式字符串,用于控制输出的日期格式。 下面是一些常用的选项: -s, --set…