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

一、前言

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;
        }
    }
} 

未完待续。。。

posted @ 2024-05-09 11:39  無心的Man  阅读(17)  评论(0编辑  收藏  举报