Nginx+Tomcat实现负载均衡、动静分离集群部署

目录

前言

一、项目详情

     1、项目工作分布

      2、Nginx负载均衡

二、环境部署

三、Nginx与Tomcat安装

     1、Nginx安装

     2、部署两台Tomcat

     3、动静分离配置

     4、Nginx server配置

     5、测试

 总结


前言

        通常情况下,一个Tomcat站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等问题,不能单独应用于生产环境中,这时就需要nginx服务器作为后端网站程序的反向代理及负载均衡器,来提升整个站点的负载并发能力。

一、项目详情

     1、项目工作分布

        由Nginx作为负载均衡器Tomcat作为应用服务器的负载集群的设置方法。

        Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。
但是不是把所有的web请求转发,而是将静态页面请求Nginx服务器自己来处理,动态页面请求,转发给后端的Tomcat服务器来处理。

        据我们所知,Tomcat是属于轻量级的应用服务器,可接受访问量可能会不足,所以我们需要多台Tomcat服务器,然后通过Nginx配置权重来进行挑选Tomcat服务器去进行处理,负载均衡的一种策略。

      2、Nginx负载均衡

         Nginx是一款非常优秀的 http服务器软件,它能够支持高达50000个并发连接数的响应,拥有强大的静态资源处理能力,运行十分的稳定,并且内存、CPU等系统资源消耗非常低。目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,来提升整个站点的负载并发能力。

二、环境部署

主机操作系统IP地址安装软件
NginxCentOS7.4192.168.159.11nginx-1.12.2.tar.gz
TomcatCentOS7.4192.168.159.20apache-tomcat-9.0.16.tar.gz、jdk-8u201-linux-x64.rpm
TomcatCentOS7.4192.168.159.50apache-tomcat-9.0.16.tar.gz、jdk-8u201-linux-x64.rpm

三、Nginx与Tomcat安装

    1、Nginx安装

       1-1、关闭防火墙及开机自启

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0

        1-2、脚本一键安装nginx

 

#!/bin/bash
#======编译安装nginx服务======
#安装所需开发包和编译环境、编译器
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#创建程序用户,便于准确控制访问
useradd -M -s /sbin/nologin nginx

#解压安装包
cd /opt
tar zxvf nginx-1.12.2.tar.gz -C /opt/

#指定安装路径、指定用户名、组名、启用模块以支持统计状态
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with
-file-aio --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module

#编译及安装
make && make install

#软链接便于系统识别nginx操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

#添加nginx系统服务
echo '[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/nginx.service

#赋权及开启服务、开启开机自启
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

         1-3、验证

 

     2、部署两台Tomcat

 

#!/bin/bash
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

#安装JDK
cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm 
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version

#设置JDK环境变量
echo 'export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar                                     
          export PATH=$JAVA_HOME/bin:$PATH' > /etc/profile.d/java.sh


source /etc/profile

#安装启动Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat

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

 执行脚本:

验证结果:

 

     3、动静分离配置

        3-1、Tomcat Server 1

              IP:192.168.159.20

[root@localhost ~]# mkdir /usr/local/tomcat/webapps/lic
[root@localhost ~]# vim /usr/local/tomcat/webapps/lic/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面:蓦然回首");%>
</body>
</html>

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml

 <Host name="tomcat1" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
         <Context docBase="/usr/local/tomcat/webapps/lic" path="" reloadable="true" />
 </Host>


#配置详解
Host name :主机名
appBase : Tomcat程序工作目录,相对路径为webapps,绝对路为/usr/local/tomcat/webapps
unpackWARs :tomcat在webapps文件夹中发现war包文件时,是否自动将其解压
autoDeploy :设为true,则web.xml发生变化时,tomcat自动重新部署程序。实现这个功能必需允许后台处理xmlvalidation :是否开启对XML文件的验证
xmlNamespaceAware :是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验
docBase : wEB应用的目录(本地路径)
path:设置访问的URI为WEB应用的根目录(URL路径),""表示默认,加载系统中自带的类(class文件)
reloadable :是否在程序有改动时重新载入

[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh

[root@localhost ~]# /usr/local/tomcat/bin/startup.sh

        3-2、Tomcat Server 2

                  IP:192.168.159.50

[root@localhost ~]# mkdir /usr/local/tomcat/webapps/lic
[root@localhost ~]# vim /usr/local/tomcat/webapps/lic/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面:那人却在灯火阑珊处");%>
</body>
</html>

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml

    <Host name="tomcat2" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
         <Context docBase="/usr/local/tomcat/webapps/lic" path="" reloadable="true" />
</Host>

[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh

[root@localhost ~]# /usr/local/tomcat/bin/startup.sh

     4、Nginx server配置

        4-1、静态页面配置

[root@localhost ~]# echo '<html><body><h1>这是默认目录静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
[root@localhost ~]# cat /usr/local/nginx/html/index.html
   <html><body><h1>这是默认目录静态页面</h1></body></html>
[root@localhost ~]# mkdir /usr/local/nginx/html/tupian
[root@localhost ~]# cd /usr/local/nginx/html/tupian
[root@localhost tupian]# rz -E
rz waiting to receive.
[root@localhost tupian]# ls
qiche.jpg
[root@localhost tupian]# vim /usr/local/nginx/conf/nginx.conf
 
  #gzip  on;
         upstream tomcat_server {
           server 192.168.159.20:8080 weight=1;
           server 192.168.159.50:8080 weight=1;
         }
  
      server {
          listen       80;
          server_name  www.accp.com;
          
          charset utf-8;
          
          #access_log  logs/host.access.log  main;
          
          location ~ .*.jsp$ {
                  proxy_pass http://tomcat_server;
                  proxy_set_header HOST $host;
                     
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          }
          
          
                  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
                          root /usr/local/nginx/html/tupian;
                          expires 10d;
        }
          
          location / { 
             root   html;
              index  index.html index.htm;   
        }

     5、测试

        5-1、测试静态页面效果
                 浏览器访问http://192.168.159.11/
                 浏览器访问http://192.168.159.11/qiche.jpg

        5-2、测试负载均衡效果,不断刷新浏览器测试
                  浏览器访问http://192.168.159.11/lic/index.jsp

 总结

        可将两个或多个Tomcat server放到Nginx的 upstream中组成一个负载均衡集群,然后通过proxy_pass这种Web代理的方式在location中设置集群站点,然后再通过weight值来分别对Tomcat server进行权重的设置。
       在生产环境中,Tomcat server的硬件配置可能不尽相同,可以通过修改相应服务器的weight值,对配置较高或配置较低的服务器的访问请求进行分配控制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值