Nginx负载均衡、动静分离Tomcat案例实战

news/2024/10/3 0:20:54

一、前言

1)Tomcat是一款开源的、免费的WEB软件服务器,是隶属于Apache基金会旗下的,主要是用于去发布网站代码、提供网页信息服务的。用户通过浏览器可以实现网站页面的访问。
2)Tomcat WEB软件默认可以处理静态网页(Apache、Nginx),同时也可以处理动态网页,主要是处理JSP动态网页,JSP(Java Server Pages)是基于Java语言开发的动态网站程序。
静态网页:一般是跟后端数据库不发生交互的网页,网页内容很少更新或者几乎不更新的,其网页文件后缀命名通常是.htm、.html、.xml等结尾的。
动态网页:一般是跟后端数据库发生交互的网页,网页内容经常更新或者随着后端数据库内容变化而更新的,其网页文件后缀命名通常是.asp、.jsp、.php等结尾的。
3)Java、JDK、Tomcat三者之间的关系?
Java是一门面向对象的编程语言,JDK是Java语言开发的环境、SDK工具包,同时JDK也是Java程序运行所需的环境(JRE:JVM虚拟机+Java类、库),Tomcat软件自身是基于Java语言开发的。
4)基于CentOS、Rocky Linux 9.x系统,部署一套Tomcat WEB集群(提前配置JDK环境),采用二进制Tar包方式。部署的方法和指令如下:

#从Apache官网下载tomcat软件包;
ls -l apache-tomcat-9.0.7.tar.gz
#通过Tar工具对其解压;(-x extract解压,-z gzip压缩格式,-v verbose详细显示,-f file文件属性)
tar -xzvf apache-tomcat-9.0.7.tar.gz
#Cd切换至Tomcat解压目录;
cd apache-tomcat-9.0.7/
#创建4个Tomcat实例的部署目录;
for i in $(seq 1 4);do mkdir -p /usr/local/tomcat_v$i.jfedu.net/ ;done
#将解压后的Tomcat程序文件拷贝至部署目录即可;
for j in `seq 1 4`;do \cp -a * /usr/local/tomcat_v$j.jfedu.net/ ;done
#修改4个Tomcat服务端口(8005:8001-8004   8080:8081-8084  8009:8111-8114);
for i in $(seq 1 4);do sed -i "s/8005/800$i/g;s/8080/808$i/g;s/8009/811$i/g" /usr/local/tomcat_v$i.jfedu.net/conf/server.xml ;done
#将4个Tomcat实例server.xml文件中HTTP协议端口找出来;
for i in $(find /usr/local/tomcat_v* -name server.xml);do grep -aiE "HTTP/1.1" $i ;done |grep -aiE "port="|awk -F\" '{print $2}'|sort -n|uniq
#启动4个Tomcat服务进程;
for m in $(seq 1 4);do /usr/local/tomcat_v$m.jfedu.net/bin/startup.sh ;sleep 5;done
#查看Tomcat服务进程;
ps -ef|grep -aiE tomcat
#查看4个Tomcat监听端口;
netstat -tnlp|grep -aiwE "java"
#Firewalld防火墙对外开放Tomcat HTTP协议端口;
for port in $(for i in $(find /usr/local/tomcat_v* -name server.xml);do grep -aiE "HTTP/1.1" $i ;done |grep -aiE "port="|awk -F\" '{print $2}'|sort -n|uniq );do firewall-cmd --add-port=$port/tcp --permanent ;done ;firewall-cmd --reload ;firewall-cmd --list-all 

根据如上Tomcat WEB集群实战,用户通过浏览器可以访问服务器IP地址+8081-8084,即可访问Tomcat测试页面,如图所示:
http://192.168.101.128:8081/

http://192.168.101.128:8082/

http://192.168.101.128:8083/

http://192.168.101.128:8084/

二、Nginx负载均衡、动静分离Tomcat集群

1)在企业生产环境中,Tomcat WEB集群不会直接放在网站最前端去提供访问,通常会引入负载调度器:LVS、Haproxy、Nginx,将Nginx和Tomcat集群整合形成一个完整的WEB架构,Nginx、Tomcat整合的意义:
负载均衡:
用户通过浏览器向Nginx发起Request请求,Nginx WEB会将请求转发(均衡分发、采用RR轮训方式)至后端4个Tomcat机器上,进而实现负载均衡,提高系统的性能。
反向代理:
用户通过浏览器向Nginx发起Request请求,Nginx WEB会将请求转发至后端Tomcat集群,后端Tomcat处理完成之后会将数据返回给Nginx,最终由Nginx返回给用户。
动静分离:
用户通过浏览器向Nginx发起Request请求,Nginx WEB检测到用户请求的静态网页,那么Nginx则直接处理。如果检测到用户请求的动态网页,Nginx是不能直接处理的,那么Nginx 会将动态网页请求转发至后端Tomcat去处理。
2)基于Nginx负载均衡、反向代理后端4个Tomcat WEB集群,修改nginx.conf配置文件添加upstream、proxy_pass参数,nginx.conf配置文件代码如下所示:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream tomcat_web {
         server 192.168.101.128:8081 weight=100 max_fails=2 fail_timeout=15s;
         server 192.168.101.128:8082 weight=100 max_fails=2 fail_timeout=15s;
         server 192.168.101.128:8083 weight=100 max_fails=2 fail_timeout=15s;
         server 192.168.101.128:8084 weight=100 max_fails=2 fail_timeout=15s;  
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
             proxy_pass http://tomcat_web;
             proxy_set_header host $host;
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

http://192.168.101.130/

3)基于Nginx负载均衡、反向代理、动静分离后端4个Tomcat WEB集群,修改nginx.conf配置文件添加upstream、proxy_pass参数,nginx.conf配置文件代码如下所示:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream tomcat_web {
         server 192.168.101.128:8081 weight=100 max_fails=2 fail_timeout=15s;
         server 192.168.101.128:8082 weight=100 max_fails=2 fail_timeout=15s;
         server 192.168.101.128:8083 weight=100 max_fails=2 fail_timeout=15s;
         server 192.168.101.128:8084 weight=100 max_fails=2 fail_timeout=15s;  
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
             proxy_pass http://tomcat_web;
             proxy_set_header host $host;
            root   html;
            index  index.html index.htm;
        }
         location ~ .*\.(htm|html|js|css|txt|jpg|jpeg|gif|png)$
         {
             root html;
             expires 30d;
         }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
} 

未完待续。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/29297.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

three.js基础之小案例

静态场景 <canvas id="mainCanvas"></canvas> <script type="importmap">{"imports": {"three": "./js/build/three.module.js","three/addons/": "./js/jsm/"}} </script> &l…

国密算法SM2-java实现

Maven依赖<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.56</version> </dependency>工具类import java.math.BigInteger;public class Util {/*** 整形转换成网络传输…

黑客精神和白帽子

在当今数字化的世界里,黑客精神和白帽子的角色变得愈发重要。本文将探讨黑客精神的本质,介绍白帽子的概念和职责。 1、黑客精神 所谓的“黑客精神”,主要指的是一种探索计算机软件和硬件极限,追求技术创新和完善的文化态度和哲学理念。 黑客精神强调的是对知识的渴求,对于…

NFS工作原理(重要)

NFS工作流程 1.NFS服务端启动后、将自己的端口信息,注册到rpcbind服务中 2.NFS客户端通过TCP/IP的方式,连接到NFS服务端提供的rpcbind服务,并且从该服务中获取具体的端口信息 3.NFS客户端拿到具体端口信息后,将自己需要执行的函数,通过网络发给NFS服务端对应的端口 4.NFS服…

mysql多表查询

1. 多表查询项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对多(多对一) 多对多 一对一2. 分类连接查询内连接:相当于查询A、B交集部分数据外…

text-generation-webui 推理模型相关报错问题解决

推理代码 text-generation-webui 推理模型 Qwen1.5-7B-Chat sys info nvcc --versioncuda 11.8 import torch >>> print(torch.__version__) 1 路径错误2 依赖没安装 ImportError: This modeling file requires the following packages that were not found in your …

通过 pip 安装自己的代码包

以前通过 pip 安装的时候总是很羡慕,别人的代码使用起来好方便啊,那时候觉得代码要提交到 pip 平台去管理肯定需要审核吧? 后来了解到自己的代码要可以 pip 安装不需要审核,只需要遵循几个步骤就能轻松实现:准备代码包 通过 setuptools 打包 通过 twine 上传 (需要 pypi …

微信小程序使用微信云托管添加自定义域名并转发到pexels.com

背景:我要在小程序上显示pexels.com上的图片,然后我得先把pexels.com的域名添加到小程序的request合法域名中,但是pexels.com是国外的,在国内没有备案所以添加不了。解决方案就是:用一个已经备案好的域名进行转发,转发的服务器我选择的是微信云托管,备案好的域名还需要s…