当前位置: 首页 > news >正文

5.Nginx+Tomcat负载均衡群集

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

一.Tomcat的安装部署

1.1实施准备

(1)关闭firewalld防火墙

systemctl stop firewalld

setenforce 0

(2)在安装Tomcat之前必须先安装JDK

JDK的全称是Java Development Kit,是sun公司免费提供的Java语言的软件开发工具包,其中包含Java虚拟机(JVM)。编写好的Java源程序经过编译可形成Java字节码,只要安装了JDK,就可以利用JVM解释这些字节码文件,从而保证了Java的跨平台性。

1.2查看JDK是否安装

java -version

1.3安装配置Tomcat

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

解压软件包

tar zxvf apache-tomcat-.......

(2)将解压后的文件夹移动到/usr/local下并改名为tomcat

mv apache-tomacat-....  /usr/local/tomcat

(3)启动tomcat

cat/usr/local/tomcat/bin/startup.sh

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

netstat -anpt | grep 8080

(4)打开浏览器访问测试:http://192.168.10.101:8080/,如果出现如下图,则表示已经启动成功

如果想关闭Tomcat,则运行/usr/local/tomcat/bin/shutdown.sh命令

1.4Tomcat配置相关说明

Tomcat的主目录为/usr/local/tomcat

ll /usr/local/tomcat/

(1)主要目录说明

bin/:存放Windowns或Linux平台上启动和关闭Tomcat的脚本文件

conf/:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml

lib/:存放Tomcat运行需要的库文件(JARS)

logs/:存放Tomcat执行时的LOG文件

webapps:Tomcat的主要Web发布目录(包括应用程序实例)

work:存放JSP编译后产生的class文件

(2)配置文件说明

catalina.policy:权限控制配置文件

catalina.propertise:Tomcat属性配置文件

context.xml:上下文配置文件

logging.properties:日志log相关配置文件

server.xml:主配置文件

tomcat-users.xml: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>。

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
    <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        <Engine name="Catalina" defaultHost="localhost">
            <Host name="localhost" appBase="webapps"
                  unpackWARs="true" autoDeploy="true">
                <Context path="/myapp" docBase="/path/to/myapp" />
            </Host>
        </Engine>
    </Service>
</Server>
<Server>

• port="8005":指定Tomcat服务器监听的用于接收关闭命令的端口。

• shutdown="SHUTDOWN":设置关闭服务器的命令字符串。

<Connector>

• port="8080":Tomcat监听HTTP请求的端口号。

• protocol="HTTP/1.1":使用的HTTP协议版本。

• connectionTimeout="20000":连接超时时间,单位为毫秒。

• redirectPort="8443":当需要SSL加密连接时,将请求重定向到的端口。

<Engine>

• name="Catalina":引擎的名称。

• defaultHost="localhost":默认的虚拟主机名。

<Host>

• name="localhost":虚拟主机的名称。

• appBase="webapps":Web应用程序的基础目录。

• unpackWARs="true":是否自动解压WAR文件。

• autoDeploy="true":是否自动部署应用程序。

<Context>

• path="/myapp":Web应用的上下文路径。

• docBase="/path/to/myapp":Web应用的实际文件目录。

2.6Tomcat Server的组成部分说明

(1)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的servlet/jsp代理请求

(4)Engine

Enginxe下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名,当Engine获得一个请求时,他把该请求匹配到某个Host上,然后把该请求交给该Host来处理

Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理

(5)Host

代表一个Virtual Host,即虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配

每个虚拟主机下都可以部署一个或者多个Web app,每个web app对应于一个Context,有一个Context path

当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理,匹配的方法是“最长的匹配”,所以一个path==""的Context将成为Host的默认Context

(6)Context

所有无法和其他Context对应于一个Web Application,一个Web application由一个或者多个Servlet组成

2.7建立Java的Web站点

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

mkdir -p /web/webapp1

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

vim /wen/webapp1/index.jsp

(3)修改Tomcat的server.xml文件

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

vim /usr/local/tomcat/conf/server.xml

   <Context doBase="/web/webapp1"  path=""  reloadable="false"  >

   </Context>

</Host>

(4)关闭Tomcat,再重新启动

/usr/local/tomcat/bin/shutdown.sh

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

(5)确认web站点

通过浏览器访问http://192.168.10.101:8080/,出现如图所示,说明该Tomcat站点已经配置成功,并且已经能够运行JSP了

显式“静态页面的图片2”文字,并没有出现logo.jpg图片,原因是由于静态图片暂时没配,所以加载不出来

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

1.案例分析

1.1案例概述

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

1.2案例环境

主机IP地址操作系统应用
Tomcat1服务器

192.168.10.101

openeuler24apache-tomcat
Tomcat2服务器192.168.10.102openeuler24apache-tomcat
Nginx服务器192.168.10.103openeuler24nginx

需求:

a.安装nginx、tomcat

b.nginx、tomcat配置

c、编写动静分离页面

2.案例实施

2.1Tomcat2 server配置

(1)关闭防火墙

(2)确认是否安装 JDK,JAVA 版本与 Tomcatl server 保持一致。

(3)安装配置 Tomcat,版本与 Tomcatl server 保持一致。

(4)创建/web/webapp1 目录,修改 Tomcat 配置文件 server.xml,将网站文件目录更改 到/web/webapp1/路径下。

(5)在/web/webapp1/路径下建立 index.jsp,为了区别将测试页面 index.jsp 的内容更改如下。

vim /web/webapp1/index.jsp

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

2.2Nginx服务器配置

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

(1)关闭防火墙

systemctl stop firewalld

setenforce 0

(2)安装相关软件包。

dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker

(3)解压并安装 Nginx。

useradd-M-s /sbin/nologin nginx

tar zxf nginx-l.26.3. tar. gz

 cd nginx-l.26.3

./configure  --prefix=/usr/local/nginx  --user=nginx  --group=nginx  --with-http_ssl_module --with-http_v2_module  --with-pcre

make && make install

(4)配置 nginx.conf

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=l;

}

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

 vim /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>

//在 http{…}- server{…}中加入 location~.*.jsp${…}动态请求条件规则以及静态图片请求规则。

.......

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 jpgljpeg|pnglbmp|swf)$   {                  //静态图片正则

      root /usr/local/nginx/html/img;

      expires 30d;

}

location /  {
      root html;
      index index.html index.htm;

}

......

把 Nginx 的默认站点通过 proxy_pass 方法代理到了设定好的 tomcat_server 负载均衡服务器组上。配置完整的 nginx.conf 文件内容如下。

http  {
…… 
#gzip on;
upstream tomcat_server {
server 192.168.10.101:8080 weight=1;
server 192.168.10.102:8080 weight=1;

}

server {

      listen 80;
      server_name localhost;
      #charset koi8-r;
      #access_log logs/host.access.log main;

      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 ~ .*\.(gir | jpg | jpeg |png | bmp | swf | css)$ {

      root /usr/local/nginx/html/img;

      expires 30d;

}

location / {
      root html.
      index index.html index.htm;

}

下面在Nginx上准备静态图片

mkdir /usr/local/nginx/html/img //创建静态文件目录

cp /root/logo.jpg /usr/local/nginx/html/img

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

 /usr/local/nginx/sbin/nginx  -t

启动 Nginx 服务

/usr/local/nginx/sbin/nginx  -c 

查看 Nginx 服务进程

ps aux | grep nginx

nginx 查看端口号及 PID 进程号

netstat -anpt | grep nginx 

2.3测试效果

(1)测试静态页面效果

浏览器访问http://192.168.10.103/,可以看到访问到nginx静态页面

(2)测试负载均衡效果

打开浏览器访问 http://192.168.10.103/index.jsp。不断刷新浏览器测试,可以看到由于权重相同,页面会反复在以下两个页面来回切换。第一次访问,出现 test1 的测试页面,并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 test2 的测试页面。

此时负载均衡群集搭建成功,已经可以在两个Tomcat server站点进行切换了

相关文章:

  • Nginx+Tomcat负载均衡集群
  • Nginx+Tomcat 负载均衡群集
  • Nginx + Tomcat 负载均衡、动静分离群集
  • nginx+tomcat动静分离、负载均衡
  • 接口自动化测试之pytest接口关联框架封装
  • 业态即战场:零售平台的生意模型与系统设计解构
  • 数据解析:一文掌握Python库 lxml 的详细使用(处理XML和HTML的高性能库)
  • 基于YOLO-NAS-Pose的无人机象群姿态估计:群体行为分析的突破
  • B站缓存视频数据m4s转mp4
  • 网络安全-等级保护(等保) 3-3 GB/T 36627-2018 《信息安全技术 网络安全等级保护测试评估技术指南》-2018-09-17发布【现行】
  • 解锁Java多级缓存:性能飞升的秘密武器
  • 从基础原理到Nginx实战应用
  • Vert.x学习笔记-EventLoop与Handler的关系
  • AI数据集构建:从爬虫到标注的全流程指南
  • 人工智能挑战杯推荐项目
  • 【知识点】openai请求参数如何转为大模型的字符串?
  • 《仿盒马》app开发技术分享-- 个人中心关于逻辑完善(端云一体)
  • 嵌入式开发学习日志(linux系统编程--系统编程之 进程间通信IPC)Day32
  • [内核开发手册] ARM汇编指令速查表
  • 52. N 皇后 II【 力扣(LeetCode) 】
  • 网站被挂马做js跳转/网站seo哪家做的好
  • 辽宁建设工程信息网昂/东莞网站建设seo
  • 企业网站规划书范文/站长工具亚洲高清
  • 建网站的域名是什么意思/如何引流推广产品
  • 石湾网站建设/福州seo建站
  • 宣威网站建设/竞价sem培训