搭建Nginx+Tomcat集群运作负载均衡及动静分离

想必大家对于Nginx和Tomcat都非常熟悉了,Nginx的应用非常广泛,不仅是对web静态资源非常友好,而且也是非常实用的反向代理和负载均衡软件。结合后端Tomcat的服务,从而搭建Nginx+Tomcat集群。
 
ASP站长网对于直接想要实践的朋友而言可以获取本文的链接中的软件包后直接看第三备份的内容。
 
一、集群搭建结构及拓扑
1.1集群架构图示
Nginx+Tomcat集群的结构示意图如下:
 
搭建Nginx+Tomcat集群实现负载均衡及动静分离
 
1.2系统环境与地址规划
使用三台CentOS7服务器(7.4),规划如下:
 
服务器 网卡模式 IP地址
Nginx NAT 20.0.0.128
Tomcat1 NAT 20.0.0.130
Tomcat2 NAT 20.0.0.136
1.3拓扑图如下
搭建Nginx+Tomcat集群实现负载均衡及动静分离
 
1.4相关资源软件
链接:https://pan.baidu.com/s/1Qdla-vrpcspcAKJucZdSUg
提取码:40it
 
二、搭建思路及核心部分配置
​ 根据上述的结构图示,为了完成该实践内容,需要先梳理搭建的思路,搞清楚核心部分的操作与配置。
 
1、首先我们需要在三台服务器上编译安装对应的服务(软件包在上面的链接中),测试服务是否正常;
 
2、其次基于核心功能:负载均衡以及动态分离,需要一步一步理清楚
 
基于负载均衡
​ 负载均衡是在Nginx服务器上配置的,就需要对nginx的主配置文件进行配置,实现负载均衡的模块是使用upstream模块以及对应需要的算法(本文使用简单的加权轮循算法实现负载均衡)。核心配置:
 
#server指令外层
upstream tomcat-server {
                server 20.0.0.130:8080 weight=1;
                server 20.0.0.136:8080 weight=1;
        }
#server指令中
location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://tomcat-server;
        }
访问nginx的服务器地址,可以轮循访问后端的两台真实的Tomcat服务器。
 
基于动态分离
​ 我们知道对于Nginx而言,其对静态资源的支持是非常友好的,而Tomcat对于Java的动态web页面的支持非常好。所以需要实现动态分离就是将静态请求给予nginx服务器运行,Tomcat负责处理类似jsp文件的动态请求。
 
​ 本次案例使用nginx服务器和一台Tomcat服务器做动态分离。最终将结合静态图片让nginx负责处理,而使用Tomcat处理动态页面。
 
核心配置:
 
nginx服务器:
 
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
            root html/demo;
            expires 30d;
        }
location ~.*.jsp$ {       ##匹配jsp页面跳转代理服务器池
           proxy_pass http://tomcat-server;
           proxy_set_header Host $host;
        }
 location / {
            root   html;
            index  index.html index.htm;
            #proxy_pass http://tomcat-server;
        }
tomcat服务器:
 
 
        <Context docBase="/usr/local/tomcat/webapps/demo" path="" reloadable="false">
         </Context>
3、在部署和配置的过程中,进行必要的验证
 
好了大致的流程和核心配置讲完了,下面开始本次案例的完整演示。
 
三、部署流程与实践过程
负载均衡集群搭建
3.1部署配置两个tomcat服务器
​ 由于部署两个tomcat服务器的流程几乎一致(除了页面显示的内容部分不一致,当然是为了验证负载均衡),并且不显得本文过于冗长,就演示tomcat1服务器上的部署。
 
3.1.1安装jdk
====================================================================================
tomcat1
[root@localhost ~]# hostnamectl set-hostname tomcat1
[root@localhost ~]# su
[root@tomcat1 ~]# cd /opt/
[root@tomcat1 opt]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u91-linux-x64.tar.gz  rh
[root@tomcat1 opt]# tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[root@tomcat1 opt]# vim /etc/profile  #声明环境变量
#末尾
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_NAME}/bin:$PATH
[root@tomcat1 opt]# source /etc/profile
3.1.2部署安装tomcat
[root@tomcat1 opt]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u91-linux-x64.tar.gz  rh
[root@tomcat1 opt]# tar zxf apache-tomcat-9.0.16.tar.gz -C /usr/local/
[root@tomcat1 opt]# cd /usr/local/
[root@tomcat1 local]# ls
apache-tomcat-9.0.16  bin  etc  games  include  jdk1.8.0_91  lib  lib64  libexec  sbin  share  src
[root@tomcat1 local]# mv apache-tomcat-9.0.16/ tomcat
[root@tomcat1 local]# cd tomcat/
[root@tomcat1 tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@tomcat1 bin]# ls  #将下面中的启动脚本和关闭脚本建立软链接
bootstrap.jar       ciphers.sh                    daemon.sh     setclasspath.bat  startup.sh            version.bat
catalina.bat        commons-daemon.jar            digest.bat    setclasspath.sh   tomcat-juli.jar       version.sh
catalina.sh         commons-daemon-native.tar.gz  digest.sh     shutdown.bat      tomcat-native.tar.gz
catalina-tasks.xml  configtest.bat                makebase.bat  shutdown.sh       tool-wrapper.bat
ciphers.bat         configtest.sh                 makebase.sh   startup.bat       tool-wrapper.sh
[root@tomcat1 bin]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin
[root@tomcat1 bin]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin
 
#创建站点目录以及文件(web页面)
[root@tomcat1 local]# mkdir -p /web/webapp1
[root@tomcat1 local]# cd /web/webapp1/
[root@tomcat1 webapp1]# vim index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
 <head>
    <title>JSP test1 page</title>  #网页标题名字
 </head>
 <body>
    <% out.println("Welcome tomcat1 Web");%> #网页内容为:welcome tomcat1 web 唯一需要在tomcat2上面更改配置的部分(再次声明这样是为了验证效果,生产环境中是一致的哈~)
 </body>
</html>
[root@tomcat1 webapp1]# vim /usr/local/tomcat/conf/server.xml #配置服务文件在149行添加context标签语句 
148       <Host name="localhost"  appBase="webapps"
149             unpackWARs="true" autoDeploy="true">
150          <Context docBase="/web/webapp1" path="" reloadable="false">
151          </Context>
[root@tomcat1 webapp1]# startup.sh #开启服务
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat1 webapp1]# netstat -ntap | grep 8080 #检查tomcat服务是否开启
tcp6       0      0 :::8080                 :::*                    LISTEN      2020/java 
 
[root@tomcat1 webapp1]# systemctl status firewalld.service  #查看防火墙对防火墙进行设置
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2020-04-05 11:04:32 CST; 19min ago
   ......
[root@tomcat1 webapp1]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
success
[root@tomcat1 webapp1]# firewall-cmd --reload
success
3.2部署配置nginx服务器
3.2.1手工编译安装nginx服务(这里不必多说了哈)
[root@nginx opt]# tar zxf nginx-1.12.0.tar.gz -C /usr/local/
[root@nginx opt]# yum install -y gcc gcc-c++ make zlib-devel pcre-devel
 
[root@nginx opt]# useradd -M -s /sbin/nologin nginx
[root@nginx opt]# cd /usr/local/nginx-1.12.0/
[root@nginx nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module
[root@nginx nginx-1.12.0]# make && make install
[root@nginx nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
3.3配置验证实现负载均衡
3.3.1upstream模块实现负载均衡
[root@nginx nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
#在nginx.conf的gzip下面写入tomcat服务器池,tomcat-server表示一个名称,可以理解为服务器的域名
#gzip  on;
 
    upstream tomcat-server {
                server 20.0.0.130:8080 weight=1;#根据加权轮循算法调度访问后端的tomcat服务器
                server 20.0.0.136:8080 weight=1;
                }
location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://tomcat-server; #配置代理服务器
        }
[root@nginx nginx-1.12.0]# 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
[root@nginx nginx-1.12.0]# nginx #启动服务
[root@nginx nginx-1.12.0]# netstat -napt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      53804/nginx: master 
[root@nginx nginx-1.12.0]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@nginx nginx-1.12.0]# firewall-cmd --reload
success

dawei

【声明】:九江站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。