36 Debian如何配置Nginx+Tomcat负载均衡

作者:网络傅老师

特别提示:未经作者允许,不得转载任何内容。违者必究!

Debian如何配置Nginx+Tomcat负载均衡

《傅老师Debian知识库系列之36》——原创


==前言==

傅老师Debian知识库特点:

1、拆解Debian实用技能;

2、所有操作在VMware虚拟机实测完成;

3、致力于最终形成Debian知识手册;

适合人群:想通俗易懂地学习Debian相关知识的同学

阅读建议:无。过于精炼易懂,正常看就行。

所用版本:Debian 12.4


一、概念

本篇开始讲解一些常见的高可用部署,今天我们来聊聊Nginx和Tomcat这对黄金搭档,它们在构建高性能Web服务时可是大显身手的。想象一下,你的网站突然火了,成千上万的用户同时涌进来,这时候怎么办?别担心,Nginx+Tomcat负载均衡群集来帮你!

首先,说说它们的高并发处理能力。

Nginx这家伙,简直就是处理高并发的神器。它能同时应对好几万用户的访问,还不带喘气的。而Tomcat呢,擅长处理动态内容,比如JSP、Servlet这些。但单独用它来扛高并发,可能会有点吃力。所以,我们让Nginx站前台,处理静态文件和分发请求;Tomcat则躲在后面,专心处理动态内容。这样一来,两者搭配,干活不累,效率翻倍!

再来说说负载均衡的灵活性。

Nginx很聪明,它会根据你的设置,把用户的请求分配给不同的Tomcat服务器。你可以用“轮询”的方式,让每个Tomcat轮流接客;也可以用“权重”的方式,让性能好的Tomcat多干点活;还有“ip_hash”,确保同一个用户的请求总是去同一个Tomcat,这样就不会出现session丢失的问题了。这些策略,就像你分配班级任务一样,灵活又实用。

然后,是故障转移和自动剔除。

想象一下,如果某个Tomcat服务器突然“罢工”了,怎么办?Nginx这时候就会说:“嘿,这家伙不行了,我把它从名单里划掉。”然后,它会自动把请求分给其他还活着的Tomcat。这样,即使有个别服务器出问题,也不会影响到整个系统的运行,是不是很贴心?

还有啊,Nginx的资源消耗特别低。

它就像个勤俭节约的好学生,不占用过多的内存和CPU。这意味着,你可以在不增加太多硬件成本的情况下,通过增加Nginx和Tomcat的数量,来提升整个系统的处理能力。这对于预算有限的项目来说,可是个大好消息!

最后,我们来说说应用场景。

Nginx+Tomcat这套组合,简直就是为那些需要处理大量并发请求的Web应用量身定制的。比如电商网站、在线游戏平台,还有那些动不动就搞秒杀、抢购的网站。它们都需要快速响应成千上万的用户请求,这时候Nginx+Tomcat就派上用场了。

而且啊,在微服务架构越来越流行的今天,Nginx还可以作为API网关,帮助你把请求分发到不同的微服务实例上。这样一来,你的系统就更加灵活、可扩展了

二、前置知识

本篇案例需要对Nginx主配置文件和默认网站配置文件的结构稍有了解。需要查阅的话可参考之前的文章《25 Debian如何部署LNMP环境》。

三、操作方法

案例:如图36.1所示。随着某在线购物平台的用户量不断增长,平台面临的访问压力也越来越大。最初,平台使用单个Tomcat服务器来处理所有请求,包括动态页面渲染、数据库交互以及静态资源的传输。然而,随着用户并发访问量的增加,单个Tomcat服务器逐渐出现了性能瓶颈,导致响应速度变慢,甚至在某些高峰时段出现服务不可用的情况。

为了解决这个问题,平台决定采用Nginx+Tomcat的架构方案。Nginx作为高性能的反向代理和负载均衡器,被部署在前端,负责接收用户的所有请求。Nginx根据配置的负载均衡策略(如轮询、权重等),将请求分发到后端的多个Tomcat服务器上。每个Tomcat服务器都负责处理一部分请求,并返回相应的结果给Nginx,再由Nginx将结果返回给用户。

图36.1 Nginx+Tomcat案例环境

1、部署Tomcat01

(1)安装Java环境

root@Tomcat01:~# apt update
root@Tomcat01:~# apt install default-jdk
root@Tomcat01:~# java --version
openjdk 17.0.11 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9-Debian-1deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.11+9-Debian-1deb12u1, mixed mode, sharing)

(2)安装Tomcat

root@Tomcat01:~# apt install tomcat10*

安装完后Tomcat默认已经启动状态,可以访问其默认首页,如图36.2所示。Tomcat的默认端口为8080。

图36.2 Tomcat10的默认首页

关于Tomcat10配置文件内容以及各种管理方法,不是本文的目的。感兴趣的同学可自行查找Tomcat官方文档。本文重点是配置Nginx实现负载均衡群集。

所以接下来我们只要修改这个Tomcat首页就够了,以便使客户端能看出来是由哪台Tomcat响应的。

(3)创建测试页面

root@Tomcat01:~# mkdir -pv /web/javaweb

root@Tomcat01:~# nano /web/javaweb/index.jsp
//内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
  <head>
    <title>JSP测试页面</title>
  </head>
  <body>
    <% out.println("Tomcat01响应的JSP页面");%>
  </body>
</html>

(4)修改主配置文件

目的有2个:

  • 能够监听来自Nginx作为代理发来的请求
  • 定位测试页面的位置
root@Tomcat01:~# nano /etc/tomcat10/server.xml

把下面这段代码前面的“<!--” 和后面的“-->” 删掉,以启用之,用于监听来自Nginx作为代理发来的请求。

    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />

然后在</Host>之前插入以下内容,以定位测试页面的位置

         <Context docBase="/web/javaweb" path="" reloadable="false" >
         </Context>

重启服务并查看测试页面,如图36.3。

root@Tomcat01:~# systemctl restart tomcat10.service

图36.3 Tomcat01的测试页面

2、部署Tomcat02

方法与Tomcat01相同,不再赘述,唯一区别就是测试页面的内容。如图36.3所示。

图36.4 Tomcat02的测试页面

3、安装和配置Nginx

root@Nginx:~# apt install nginx*

编辑nginx的静态页面(咱们实验环境就用默认首页了)。

root@Nginx:~# nano /etc/nginx/sites-enabled/default

在location / {……}中加入以下内容,意思是访问nginx根目录的请求都匹配到后端服务器组“tomcat-cluster”

proxy_pass http://tomcat-cluster;

那么这个名为“tomcat-cluster”的后端服务器组都包括哪些主机呢?如何分配客户端的请求呢?我们来编辑nginx的主配置文件。

root@Nginx:~# nano /etc/nginx/nginx.conf

在http{……}中加入以下内容,定义后端服务器组名为tomcat-cluster,默认算法为轮询,其中weight表示权重,权重值越大那么被分配到的概率就越大,此处都为1,表示平均分配。

        upstream tomcat-cluster {
        server 192.168.9.201:8080 weight=1;
        server 192.168.9.202:8080 weight=1;
        }

重启nginx服务

root@Nginx:~# systemctl restart nginx.service

4、测试负载均衡

客户端访问Nginx,并不断刷新页面,可看到分别由2台Tomcat服务器响应的页面。说明负载均衡部署成功。如图36.5所示。

图36.5 测试负载均衡

查看Tomcat的访问日志,也能看到由Nginx转发来的访问请求:

root@Tomcat02:~# tail -5 /var/log/tomcat10/localhost_access_log.2024-07-12.txt
192.168.9.75 - - [12/Jul/2024:11:40:24 +0800] "GET / HTTP/1.0" 200 121
192.168.9.75 - - [12/Jul/2024:11:59:15 +0800] "GET / HTTP/1.0" 200 121
192.168.9.75 - - [12/Jul/2024:11:59:17 +0800] "GET / HTTP/1.0" 200 121
192.168.9.75 - - [12/Jul/2024:11:59:18 +0800] "GET / HTTP/1.0" 200 121
192.168.9.75 - - [12/Jul/2024:11:59:19 +0800] "GET / HTTP/1.0" 200 121

好了,Nginx+Tomcat负载均衡群集部署就介绍到这。

同学们快做起来~~

尾部有傅老师的微信名片

欢迎沟通交流:)

相关推荐

  1. Nginx 负载均衡配置

    2024-07-12 17:22:01       32 阅读
  2. nginx负载均衡配置

    2024-07-12 17:22:01       36 阅读
  3. Nginx配置负载均衡

    2024-07-12 17:22:01       30 阅读
  4. # 如何在Nginx中配置服务器负载均衡(SLB)

    2024-07-12 17:22:01       57 阅读
  5. NGINX配置负载均衡算法

    2024-07-12 17:22:01       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 17:22:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 17:22:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 17:22:01       58 阅读
  4. Python语言-面向对象

    2024-07-12 17:22:01       69 阅读

热门阅读

  1. Linux跨服务器文件传输

    2024-07-12 17:22:01       20 阅读
  2. 软设之享元模式

    2024-07-12 17:22:01       20 阅读
  3. 3179. K 秒后第 N 个元素的值

    2024-07-12 17:22:01       22 阅读
  4. mysql中的二进制数据类型

    2024-07-12 17:22:01       20 阅读
  5. mysql8遇到的报错Public Key Retrieval is not allowed

    2024-07-12 17:22:01       22 阅读
  6. MySQL事务

    2024-07-12 17:22:01       20 阅读
  7. C语言阶乘(只用逻辑运算中的短路效应判断)

    2024-07-12 17:22:01       21 阅读
  8. numpy 解释函数nanmax

    2024-07-12 17:22:01       22 阅读
  9. AIGC:AI创作短片-流程以及工具介绍(学习笔记)

    2024-07-12 17:22:01       23 阅读