Nginx+Tomcat负载均衡群集

发布于:2025-06-04 ⋅ 阅读:(20) ⋅ 点赞:(0)

一:案例:部署Tomcat 

1.案例分析

1.1案例概述

1.2案例前置知识点

(1)Tomcat 简介

      名称由来:Tomcat 最初是由 Sun 的软件构架师詹姆斯・邓肯・戴维森开发的。后来他帮助将其变为开源项目,并由 Sun 贡献给 Apache 软件基金会。由于大部分开源项目 O’Reilly 都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希望这种设计动物能够自己照顾自己,最终,他将其命名为 Tomcat(公猫)。而 O’Reilly 出版的介绍 Tomcat 的书籍的封面也被设计成了一个公猫的形象。而 Tomcat 的 Logo 兼吉祥物也被设计成了一只公猫。
      其实 Tomcat 在开始研发的时候并不叫这个名字,早期 Tomcat 项目的名字叫 Catalina,所以当我们安装完 Tomcat 后会发现安装路径下面有很多和 Catalina 有关的目录和文件,而这些文件通常也是我们使用或者配置 Tomcat 的重要文件。

(2)应用场景

      Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器, 在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的 功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作 为一个 Servlet 和 JSP 容器,单独运行在后端

1.3案例环境

(1)本案例环境
主机 IP 地址 操作系统 应用
Tomcat 服务器 OpenEuler24 192.168.10.101 apache-tomcat-9.0.8
(2)案例需求

① 服务器及硬件选购;
② 测试并安装 tomcat;
③ 部署 tomcat 站点。

2.案例实施

2.1案例准备

(1)关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
(2)在安装Tomcat 之前必须先安装JDK。

      JDK 的全称是 Java Development Kit,是 Sun 公司免费提供的 Java 语言的软件开发工具包,其中包含 Java 虚拟机(JVM)。编写好的 Java 源程序经过编译可形成 Java 字节码,只要安装了 JDK,就可以利用 JVM 解释这些字节码文件,从而保证了 Java 的跨平台性。
      在平台兼容性方面,JDK 作为解释字节码文件并据此调用操作系统 API 实现对应功能的 Java 虚拟机,与操作系统类型和平台位数密切相关,因此存在不同类型的版本,而 Tomcat 也具有上述特征,默认情况下 JDK 已经安装,所以需要预先下载 Tomcat,本章中所使用的 Tomcat 软件的源码包为 apache-tomcat-9.0.8.tar.gz。

2.2查看JDK是否安装

运行 java -version 命令查看 Java 是否安装。如果没有安装需要自行下载安装。

[root@localhost tomcat9]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

2.3安装配置Tomcat

(1)Tomcat 的安装和配置步骤如下:

解压 apache-tomcat-9.0.8.tar.gz 包。

[root@localhost ~]# tar xf apache-tomcat-9.0.8.tar.gz
(2)解压后生成apache-tomcat-9.0.8/ 文件夹,将该文件夹移动到/usr/local/下,并改名为tomcat9
[root@localhost ~]# mv apache-tomcat-9.0.8 /usr/local/tomcat9
(3)启动tomcat
[root@localhost tomcat9]# /usr/local/tomcat9/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat9
Using CATALINA_HOME:   /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME:        /usr
Using CLASSPATH:
/usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.

Tomcat 默认运行在 8080 端口,运行 netstat 命令查看 8080 端口监听的信息。

[root@localhost ~]# netstat -anpt | grep 8080
tcp6  0  0 :::8080 :::*  LISTEN  2809/java
(4)访问测试

打开浏览器访问测试:http://172.16.16.172:8080/

2.4Tomcat配置相关说明

Tomcat 的主目录为 /usr/local/tomcat9/。

[root@localhost ~]# ll /usr/local/tomcat9/
总计 112
drwxr-x--- 2 root root 4096 4月14日 18:22 bin
drwxr-x--- 3 root root 4096 4月14日 18:58 conf
drwxr-x--- 2 root root 4096 4月14日 18:22 lib
-rw-r----- 1 root root 57092 2018年4月28日 LICENSE
drwxr-x--- 2 root root 4096 4月14日 18:24 logs
-rw-r----- 1 root root 1804 2018年4月28日 NOTICE
-rw-r----- 1 root root 6852 2018年4月28日 RELEASE-NOTES
-rw-r----- 1 root root 16246 2018年4月28日 RUNNING.txt
drwxr-x--- 2 root root 4096 4月14日 18:22 temp
drwxr-x--- 7 root root 4096 2018年4月28日 webapps
drwxr-x--- 3 root root 4096 4月14日 18:24 work
(1)主要目录说明

|--bin/:存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件。
|--conf/:存放 Tomcat 服务器的各种全局配置文件,其中最重要的是 server.xml 和 web.xml。
|--lib/:存放 Tomcat 运行需要的库文件(JARS)。
|--logs:存放 Tomcat 执行时的 LOG 文件。
|--webapps:Tomcat 的主要 Web 发布目录(包括应用程序示例)。
|--work:存放 JSP 编译后产生的 class 文件。

(2)配置文件说明

执行 “ll conf/” 命令,便可看到配置文件清单。

[root@localhost ~]# ll /usr/local/tomcat9/conf/
总计 228
drwxr-x--- 3 root root 4096 4月14日 18:24 Catalina
-rw------- 1 root root 13531 2018年4月28日 catalina.policy
-rw------- 1 root root 7202 2018年4月28日 catalina.properties
-rw------- 1 root root 1400 2018年4月28日 context.xml
-rw------- 1 root root 1149 2018年4月28日 jaspcic-providers.xml
-rw------- 1 root root 2313 2018年4月28日 jaspcic-providers.xsd
-rw------- 1 root root 3850 2018年4月28日 logging.properties
-rw------- 1 root root 7593 4月14日 18:58 server.xml
-rw------- 1 root root 2164 2018年4月28日 tomcat-users.xml
-rw------- 1 root root 2633 2018年4月28日 tomcat-users.xsd
-rw------- 1 root root 170202 2018年4月28日 web.xml
  • catalina.policy:权限控制配置文件。
  • catalina.properties:Tomcat 属性配置文件。
  • context.xml:上下文配置文件。
  • logging.properties:日志 log 相关配置文件。
  • server.xml:主配置文件。
  • tomcat-users.xml:manager - gui 管理用户配置文件(Tomcat 安装后提供一个 manager - gui 的管理界面,通过配置该文件可以开启访问)。
  • web.xml:Tomcat 的 servlet、servlet - mapping、filter、MIME 等相关配置。

2.5Tomcat主配置文件说明

server.xml 为 Tomcat 的主要配置文件,通过配置该文件,可以修改 Tomcat 的启动端口、网站目录、虚拟主机、开启 https 等重要功能。
整个 server.xml 由以下结构构成:<Server>、<Service>、<Connector />、<Engine>、<Host>、<Context>、</Context>、</Host>、</Engine>、</Service>和</Server>。
以下是默认安装后 server.xml 文件的部分内容,其中内的内容是注释信息,黑色斜体部分是需要注意和需要经常更改的部分。

<?xml version="1.0" encoding="UTF-8"?>
......  //省略部分内容
<Server port="8005" shutdown="SHUTDOWN">
//Tomcat 关闭端口,默认只对本机地址开放,可以在本机通过 telnet 127.0.0.1 8005 访问
// 对 Tomcat 进行关闭操作
......  //省略部分内容
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" />
//Tomcat 启动的默认端口号 8080,可以根据需要进行更改
......  //省略部分内容
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
//Tomcat 启动 AJP 1.3 连接器时默认的端口号,可以根据需要进行更改
......  //省略部分内容
//以下为 Tomcat 定义虚拟主机时的配置及日志配置
<Host  name="localhost"     appBase="webapps"    unpackWARS="true"
autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" /> -->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory
="logs"prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
</Engine>
</Service>
</Server>

2.6Tomcat Server 的组成部分说明

Tomcat Server 由 Server、Service、Connector、Engine、Host 和 Context 组成。

(1)Server

Server 元素代表了整个 Catalina 的 servlet 容器。

(2)Service

Service 是这样一个集合:它由一个或者多个 Connector,以及一个 Engine(负责处理所有 Connector 所获得的客户请求)组成。

(3)Connector

一个 Connector 在某个指定端口上侦听客户请求,并将获得的请求交给 Engine 来处理,从 Engine 处获得回应并返回客户。

Tomcat 有两个典型的 Connector,一个直接侦听来自 browser 的 http 请求,一个侦听来自其他 WebServer 的请求。
Coyote Http/1.1 Connector 在端口 8080 处侦听来自客户 browser 的 http 请求。
Coyote JK2 Connector 在端口 8009 处侦听来自其他 WebServer (Apache) 的 servlet/jsp 代理请

(4)Engine

Engine 下可以配置多个虚拟主机 Virtual Host,每个虚拟主机都有一个域名。当 Engine 获得一个请求时,它把该请求匹配到某个 Host 上,然后把该请求交给该 Host 来处理。
Engine 有一个默认虚拟主机,当请求无法匹配到任何一个 Host 上的时候,将交给该默认 Host 来处理。

(5)Host

Host 代表一个 Virtual Host,即虚拟主机,每个虚拟主机和某个网络域名 Domain Name 相匹配。
每个虚拟主机下都可以部署 (deploy) 一个或者多个 Web App,每个 Web App 对应于一个 Context,有一个 Context path。
当 Host 获得一个请求时,将把该请求匹配到某个 Context 上,然后把该请求交给该 Context 来处理,匹配的方法是 “最长匹配 ”,所以一个 path=="" 的 Context 将成为该 Host 的默认 Context。

所有无法和其他 Context 的路径名匹配的请求都将最终和该默认 Context 匹配。

(6)Context

一个 Context 对应于一个 Web Application,一个 Web Application 由一个或者多个 Servlet 组成。

2.7建立Java的web站点

(1)在跟目录下建立一个web目录,并在里面建立一个webapp1目录用于存放网站文件。
[root@localhost ~]# mkdir -pv /web/webapp1
mkdir: created directory "/web"
mkdir: created directory "/web/webapp1"
(2)在webapp1 目录下建立一个 index.jsp 的测试页面。
[root@localhost ~]# vim /web/webapp1/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>
<div>静态页面的图片1</div><br><img src="logo.jpg">
</body>
</html>
(3)修改Tomcat 的server.xml 文件。

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

[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml
......省略部分内容
<Host name="localhost"  appBase="webapps"
        unpackWARS="true" autoDeploy="true">
    <!-- SingleSignOn valve, share authentication between web applications
        Documentation at: /docs/config/valve.html -->
    <!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    -->
(4)关闭Tomcat ,再重启
root@localhost ~]# /usr/local/tomcat9/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat9/bin/startup.sh
(5)确认web站点

通过浏览器访问 http://192.168.10.101:8080/

二:案例:Nginx+Tomcat负载均衡,动静分离群集

1.案例分析

1.1案例概述

通常情况下,一台 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等问题,不能单独应用于生产环境下,所以需要一套更可靠的解决方案来完善 Web 站点架构。
Nginx 是一款非常优秀的 http 服务器软件,它能够支持高达 50000 个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU 等系统资源消耗非常低。目前很多大型网站都会应用 Nginx 服务器作为后端网站程序的反向代理及负载均衡器,来提升整个站点的负载并发能力。
Nginx 是一个非常强大的静态 web 服务,Tomcat 处理动态请求效率不高,而一般网站大多数的内容都是静态文件(如图 片、html、css、js 等),经过 Nginx 前端的反向代理加速和过滤,后端 Tomcat 处理请求的压力便可大大减少,只需负责处理动态内容就可以了。

1.2案例环境

(1)本案例环境 
主机 IP 地址 操作系统 应用
Tomcat1 服务器 OpenEuler24 192.168.10.101 apache-tomcat-9.0.8
Tomcat2 服务器 OpenEuler24 192.168.10.102 apache-tomcat-9.0.8
Nginx 服务器 OpenEuler24 192.168.10.103 nginx-1.26.3
(2)案例需求

① 安装 nginx、tomcat;
② nginx、tomcat 配置;
③ 编写动静分离页面。

2.案例实施

2.1Tomcat2 server 配置

Tomcat2 server 配置方法基本同 Tomcat1,其中包括:
(1)关闭防火墙。
(2)确认是否安装 JDK,JAVA 版本与 Tomcat1 server 保持一致。
(3)安装配置 Tomcat,版本与 Tomcat1 server 保持一致。
(4)创建 /web/webapp1 目录,修改 Tomcat 配置文件 server.xml,将网站文件目录更改到 /web/webapp1 / 路径下。
(5)在 /web/webapp1 / 路径下建立 index.jsp,为了区别将测试页面 index.jsp 的内容更改如下。

[root@localhost ~]# vim /web/webapp1/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>
<body>
<div>动态页面的图片 2</div><br><img src="logo.jpg">
</body>
</html>

(6)启动 Tomcat,浏览器访问 Tomcat2 server,测试 http://172.16.16.173:8080/

2.2Nginx服务器配置

在 Nginx 服务器 192.168.10.103 上安装 Nginx,反向代理到两个 Tomcat 站点,并实现负载均衡。
(1)关闭防火墙。

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

(2)安装相关软件包。

[root@localhost ~]# dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker

(3)解压并安装 Nginx。

[root@nodel ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tar zxf nginx-1.26.3.tar.gz
[root@localhost ~]# cd nginx-1.26.3
[root@localhost nginx-1.26.3]#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-pcre
[root@localhost nginx-1.26.3]# make && make install

(4)配置 nginx.conf。
配置命令如下:

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

在 http {...} 中加入以下代码,设定负载均衡的服务器列表,weight 参数表示权重,权重越高,被分配到的概率越大。为了使测试效果比较明显,我们把权重设置为一样。

upstream tomcat_server {
    server 192.168.10.101:8080 weight=1;
    server 192.168.10.102:8080 weight=1;
}

下面是编辑 Nginx 静态页面文件。

[root@nginx conf]# vim /usr/local/nginx/html/index.html
[root@nginx ~]# mkdir /usr/local/nginx/html/img //创建静态文件目录
[root@nginx ~]#cp /root/logo.jpg /usr/local/nginx/html/img

测试 Nginx 配置文件是否正确。

[root@localhost ~]# /usr/local/nginx/sbin/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

启动 Nginx 服务。

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

查看 Nginx 服务进程。

[root@localhost ~]# ps aux | grep nginx
root      5279  0.0  0.0  9836 2264?        Ss   09:00   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx     5280  0.0  0.0 11568 4052?        S    09:00   0:00 nginx: worker process
root      5315  0.0  0.1 21988 7852 pts/0    S+   09:03   0:00 grep --color=auto nginx

nginx 查看端口号及 PID 进程号。

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

2.3测试效果

(1)测试静态页面效果
打开浏览器访问 http://192.168.10.103/

(2)测试负载均衡效果
打开浏览器访问 http://192.168.10.103/index.jsp


网站公告

今日签到

点亮在社区的每一天
去签到