搭建以 Nginx + Tomcat 集群来实现 负载均衡、动静分离 ------- 精彩无需错过

本文介绍如何配置Nginx与Tomcat集群实现负载均衡和动静分离,包括安装步骤、配置过程及测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nginx + Tomcat 特点概述

关于 Nginx 服务器 与 Tomcat 服务器 前博客有记载噢,这里就偷个小懒,客官可以 点击 以下链接进行浏览

请参考前文:Nginx服务器的详细安装步骤

请参考前文:Tomcat 服务器 —— 安装详解

Nginx 负载均衡和动静分离 的实现原理

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

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

献上参考图一份:
在这里插入图片描述

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

应用场景

  • 通常情况下,一台 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的 请求等问题,不能单独应用于生产环境下,所以需要一套更可靠的解决方案来完善 Web 站点 架构。
  • Nginx 是一个非常强大的静态 web 服务,Tomcat 处理动态请求效率不高,而一般网站大
    多数的内容都是静态文件(如图片、html、css、js 等),经过 Nginx 前端的反向代理加速 和过滤,后端 Tomcat 处理请求的压力便可大大减少,只需负责处理动态内容就可以了。在 性能与稳定性的权衡下,使用 Nginx+Tomcat 搭配便可让它们在各自擅长的领域大展拳脚
部署 Nginx + Tomcat 群集
环境部署
  • 本次部署将在虚拟机上进行演示;虚拟机将采用最小化安装的方式安装(所需安装包、照片都上传至所需服务器)
    一、1台 Nginx 调度器

    ip:192.168.100.21/24   
    网关:192.168.100.1 
    软件安装包:nginx-1.15.9.ta
    一张照片
    

    二、1台 Tomcat 节点服务器

    ip:192.168.100.22/24
    网关:192.168.100.1
    软件安装包:apache-tomcat-8.5.23.tar
               jdk-8u 144-linux-x64.tar 
    

    三、1台 Tomcat 节点服务器

    ip:192.168.100.23/24
    网关:192.168.100.1
    软件安装包:apache-tomcat-8.5.23.tar
               jdk-8u 144-linux-x64.tar 
    
  • 所有服务器关闭防火墙、核心防护,安装本地yum源

配置 Tomcat 1 节点服务器(192.168.100.22)

在安装 Tomcat 之前必须先安装 JDK
安装 JDK 部分:
1、将安装包 apache-tomcat-8.5.23.tar 和 jdk-8u 144-linux-x64.tar 上传至 /opt 目录下;查看 JDK 是否安装,已安装则显示已安装内容(安装包不需要安装或卸载掉Java在安装jdk安装包);没有安装则显示命令没有找到(则解压jdk安装包)

[root@localhost ~]# java -version 
-bash: java: command not found                 ####报错,则没有安装 java    
 
[root@localhost ~]# cd /opt
[root@localhost opt]# tar xzvf jdk-8u144-linux-x64.tar.gz   
 
[root@localhost opt]# cp -rv jdk1.8.0_144/ /usr/local/java     
[root@localhost opt]# vi /etc/profile  
                                          #######在文件末尾添加以下四行
export JAVA_HOME=/usr/local/java                                          
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib
 
[root@localhost opt]# source /etc/profile
[root@localhost opt]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

安装 Tomcat 部分:
1、 解压包

[root@localhost opt]# tar zxvf apache-tomcat-8.5.23.tar.gz

2、解压后生成 apache-tomcat-8.5.23 文件夹,将该文件夹移动到/usr/local/下,并 改名为 tomcat8

[root@localhost opt]# mv apache-tomcat-8.5.23 /usr/local/tomcat8

3、Tomcat 启动优化

[root@localhost opt]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@localhost opt]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
[root@localhost opt]# tomcatup                               ####启动
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java/jre
Using CLASSPATH:           /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
 
[root@localhost opt]# netstat -anpt | grep 8080                   #####检测是否启动,8080端口是否工作正常

在这里插入图片描述
显示找不到命令;原因为缺少工具包

[root@localhost opt]# yum -y install net-tools                 ####安装工具包

在这里插入图片描述
4、在真机上测试是否工作正常
网页输入: 192.168.100.22:8080
在这里插入图片描述

编辑测试页面

1、在根目录下建立一个 web 目录,并在里面建立一个 webapp1 目录,用于存放网站文件

[root@localhost ~]# mkdir -pv /web/webapp1

2、在webapp1 目录下建立一个 index.jsp 的测试页面

[root@localhost ~]# vi /web/webapp1/index.jsp
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
	<title>程序员一夜秃了头</title>
</head>
<body> 
	<% out.println("聪明绝顶,http://www.51xit.com");%>
</body>
<body>
	<div>金刚不坏</div><br><img src="logo.jpg">
</body>
</html>

3、修改 Tomcat 的 server.xml 文件。
定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webapp1,在 host 段增加 context 段

[root@localhost ~]# vi /usr/local/tomcat8/conf/server.xml
 
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">              ######在下面插入
<Context docBase="/web/webapp1" path="" reloadable="false" >
</Context>

4、关闭 Tomcat,再重新启动。

[root@localhost ~]# tomcatdown
[root@localhost ~]# tomcatup

5、真机测试
通过浏览器访问 :192.168.100.22:8080
显示“金刚不坏”文字,并没有出现 logo.jpg 图片,原因是由于静态图片暂时没配,所以加载不出来

在这里插入图片描述

配置 Tomcat 2 节点服务器(192.168.100.23)

在安装 Tomcat 之前必须先安装 JDK
安装 JDK 部分:
1、将安装包 apache-tomcat-8.5.23.tar 和 jdk-8u 144-linux-x64.tar 上传至 /opt 目录下;查看 JDK 是否安装,已安装则显示已安装内容(安装包不需要安装或卸载掉Java在安装jdk安装包);没有安装则显示命令没有找到(则解压jdk安装包)

[root@localhost ~]# java -version 
-bash: java: command not found                 ####报错,则没有安装 java    
 
[root@localhost ~]# cd /opt
[root@localhost opt]# tar xzvf jdk-8u144-linux-x64.tar.gz   
 
[root@localhost opt]# cp -rv jdk1.8.0_144/ /usr/local/java     
[root@localhost opt]# vi /etc/profile  
                                          #######在文件末尾添加以下四行
export JAVA_HOME=/usr/local/java                                          
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib
 
[root@localhost opt]# source /etc/profile
[root@localhost opt]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

安装 Tomcat 部分:
1、 解压包

[root@localhost opt]# tar zxvf apache-tomcat-8.5.23.tar.gz

2、解压后生成 apache-tomcat-8.5.23 文件夹,将该文件夹移动到/usr/local/下,并 改名为 tomcat8

[root@localhost opt]# mv apache-tomcat-8.5.23 /usr/local/tomcat8

3、Tomcat 启动优化

[root@localhost opt]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@localhost opt]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
[root@localhost opt]# yum -y install net-tools
[root@localhost opt]# tomcatup
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java/jre
Using CLASSPATH:           /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
 
[root@localhost opt]# netstat -anpt | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      19988/java 

4、在真机上测试是否工作正常
网页输入:192.168.100.23:8080
在这里插入图片描述

编辑测试页面
1、在根目录下建立一个 web 目录,并在里面建立一个 webapp1 目录,用于存放网站文件

[root@localhost ~]# mkdir -pv /web/webapp1

2、在webapp1 目录下建立一个 index.jsp 的测试页面。

[root@localhost ~]# vi /web/webapp1/index.jsp
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
	<title>程序员一夜秃了头</title>
</head>
<body> 
	<% out.println("铁头娃,http://www.51xit.com");%>
</body>
<body>
	<div>世间无敌</div><br><img src="logo.jpg">
</body>
</html>

3、修改 Tomcat 的 server.xml 文件。
定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webapp1,在 host 段增加 context 段

[root@localhost ~]# vi /usr/local/tomcat8/conf/server.xml

4、关闭 Tomcat,再重新启动。

[root@localhost ~]# tomcatdown
[root@localhost ~]# tomcatup

5、真机测试
通过浏览器访问 :192.168.100.22:8080
显示“世间无敌”文字,并没有出现 logo.jpg 图片,原因是由于静态图片暂时没 配,所以加载不出来

在这里插入图片描述

配置 Nginx 调度器(192.168.100.21)

在 Nginx 服务器 192.168.100.21上安装 Nginx,反向代理到两个 Tomcat 站点,并实现 负载均衡

环境安装部分

1、安装Nginx所需模块

[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel gcc-c++
[root@localhost ~]# yum -y install net-tools

2、上传 静态图片到 /opt 目录下(图片名为 logo.jpg )

安装Nginx部分
1、解压并安装 nginx

[root@localhost ~]# groupadd www
[root@localhost ~]# useradd -g www www -s /bin/false
[root@localhost opt]# tar xzvf nginx-1.15.9.tar.gz
[root@localhost opt]# cd nginx-1.15.9/
 
[root@localhost nginx-1.15.9]# 
./configure --prefix=/usr/local/nginx --user=www --group=www --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module
 
[root@localhost nginx-1.12.0]# make
[root@localhost nginx-1.12.0]# make install
[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.12.0]# ls -l /usr/local/sbin/nginx
lrwxrwxrwx 1 root root 27 5 月 16 16:50 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx

2、检查配置文件是否正确

[root@localhost nginx-1.12.0]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

3、启动 Nginx ,并查看是否开启

[root@localhost nginx-1.15.9]# nginx
[root@localhost nginx-1.15.9]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      30035/nginx: master 

4、添加 Nginx 系统服务

[root@localhost nginx-1.15.9]# vi /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
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
 
  
[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to
/usr/lib/systemd/system/nginx.service.

5、编辑 Nginx 静态页面文件

[root@localhost nginx-1.15.9]# vi /usr/local/nginx/html/index.html
 
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<title>静态页面</title>
<style>
body {
	width: 35em;
	margin: 0 auto;
	font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>静态页面</h1>
<p>这是个静态页面</p>
</body>
</html>

6、在 http {…} - server{…}中加入 location ~ .*.jsp${…} 动态请求条件规则 以及 静态图片请求规则;
把 Nginx 的默认站点通过 proxy_pass 方法代理到了设定好的 tomcat_server 负载均衡服务器组上。

[root@localhost nginx-1.15.9]# vi /usr/local/nginx/conf/nginx.conf
 
http {

  .........省略内容


#gzip on;                 #####这行往下插入以下4行
upstream tomcat_server {
server 192.168.100.22:8080 weight=1;
server 192.168.100.23:8080 weight=1;
}

server {                       #####到这行结束
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;            ######在这行插入以下  location ~ .*.jsp$ {}(表示动态页面正则);location ~ .*\.()${}(表示静态图片正则)
location ~ .*.jsp$ {
	proxy_set_header HOST $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header Client-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_pass http://tomcat_server;
	}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 30d;
}

location / {                       ####到这行结束
root html;
index index.html index.htm;
}

7、创建静态文件目录

[root@localhost nginx-1.15.9]# cd
[root@nginx ~]# mkdir /usr/local/nginx/html/img
[root@nginx ~]# cp /opt/logo.jpg /usr/local/nginx/html/img

8、启动 Nginx 服务。

[root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

9、查看 Nginx 服务进程。

[root@localhost ~]# ps aux | grep nginx
root      30035  0.0  0.0  20564   620 ?        Ss   Sep26   0:00 nginx: master process nginx
www       30036  0.0  0.0  21020  1332 ?        S    Sep26   0:00 nginx: worker process
root      30121  0.0  0.0 112708   976 pts/0    S+   01:07   0:00 grep --color=auto nginx

10、查看端口号及 PID 进程号

[root@localhost ~]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      30035/nginx: master
群集安装完毕,进行测试

(1)测试静态页面效果 打开浏览器访问 http://192.168.100.21/,可以看到访问到 nginx 静态页面
在这里插入图片描述

(2)测试负载均衡效果 打开浏览器访问 http://192.168.100.21/index.jsp。 不断刷新浏览器测试,
可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现 22 的测试页面,
并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 23 的测试页面,
表示负载均衡群集搭建成功,已经可以 在两个 Tomcat server 站点进行切换了。
在这里插入图片描述
在这里插入图片描述
注意:如果报错: 端口号能过滤出来、也能查看nginx进程服务,配置文件也是好的,就是无法实现负载均衡
解决: 安装 yum -y install psmisc ;killall -3 nginx ; 杀死进程再重启nginx就好了


感谢浏览,您老的支持是我最大的动力

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值