群集——Nginx+Tomcat负载均衡与动静分离群集

一、Nginx+Tomcat负载均衡与动静分离概述

1. Tomcat简介

  • 最初是由Sun的软件构架师詹姆斯·邓肯·戴维森开发
  • 安装Tomcat后,安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件
  • Tomcat 支持动态页面处理。

2. Tomcat重要目录

  • bin :存放启动和关闭Tomcat脚本
  • conf :存放Tomcat不同的配置文件
  • doc:存放Tomcat文档
  • lib:存放Tomcat运行需要的库文件
  • logs:存放Tomcat执行时的LOG文件
  • src:存放Tomcat的源代码
  • webapps:Tomcat的主要Web发布目录
  • work:存放jsp编译后产生的class文件

3. Nginx应用

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

4. nginx负载均衡实现原理

  • Nginx实现负载均衡是通过反向代理实现

在这里插入图片描述

5. 反向代理原理

Nginx配置反向代理的主要参数
upstream 服务池名 { }

  • 配置后端服务器池,以提供响应数据
    proxy_pass http://服务池名
  • 配置将访问请求转发给后端服务器池的服务器处理

6. 动静分离原理

服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端
在这里插入图片描述
分析
在这里插入图片描述

7. Nginx静态处理优势

  • Nginx处理静态页面的效率远高于Tomcat的处理能力
  • 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
  • Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
  • Nginx处理静态资源的能力是Tomcat处理的6倍

二、实验

2.1 Nginx配置负载均衡、动静分离

  • 要求部署两台后端Tomcat服务器

  • 为了进行负载均衡测试,搭建两个内容不同的网站

  • Tomcat部署与网站搭建步骤

    • 1.关闭firewall防火墙
    • 2.安装JDK,配置JAVA环境
    • 3.安装配置Tomcat
    • 4.创建/web/webapp1目录,修改server.xml,将网站文件目录更改到/web/webapp1/路径下
    • 5./web/webapp1/下建立测试页面index.jsp,并进行测试
  • 在Nginx服务器上安装Nginx,反向代理两个Tomcat站点,并实现负载均衡

    • 关闭Firewalld防火墙
    • 安装Nginx依赖软件包
    • 解压并编译安装Nginx
    • 配置nginx.conf,添加location静态页面处理及添加upstream配置段与proxy_ pass
    • 检测配置文件与启动Nginx
    • 测试负载均衡、动静分离效果

2.2 实验一 Nginx+Tomcat动静分离

实验环境:
一台:Nginx 作为反向代理动静分离的静态页面 192.168.200.60
一台:tomcat 作为动态页面处理的 192.168.200.80
实验目的:
nginx 处理静态页面
tomcat01 处理动态界面
实验步骤:
1、配合nginx服务

[root@localhost ~]# hostnamectl set-hostname nginx
[root@localhost ~]# su
[root@nginx ~]# tar zxvf nginx-1.12.0.tar.gz -C /opt/
[root@nginx ~]# cd /opt/nginx-1.12.0/
[root@nginx nginx-1.12.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@nginx nginx-1.12.0]# iptables -F
[root@nginx nginx-1.12.0]# setenforce 0
[root@nginx nginx-1.12.0]# yum -y install pcre-devel zlib-devel gcc-c++
[root@nginx nginx-1.12.0]# useradd -M -s /sbin/nologin nginx
[root@nginx nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_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/
[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]# vim /etc/init.d/nginx
#!/bin/bash
#chkconfig:- 99 20
#description:Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
 start)
  $PROG
 ;;
stop)
   kill -s QUIT $(cat $PIDF)
 ;;
restart)
 $0 stop
 $0 start
 ;;
reload)
 kill -s HUP $(cat $PIDF)
 ;;
 *)
   echo "Usage:$0{start|stop|restart|reload}"
   exit 1
esac
exit 0
[root@nginx nginx-1.12.0]# cd /etc/init.d/
[root@localhost init.d]# chmod +x nginx   //添加权限
[root@localhost init.d]# chkconfig --add nginx   //添加到systemctl启动文件设置中
[root@nginx init.d]# netstat -antp | grep nginx 
[root@nginx init.d]# service nginx start 
[root@nginx init.d]# netstat -antp | grep nginx 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      15902/nginx: master 

2、配置tomcat01服务器

[root@localhost ~]# ls
anaconda-ks.cfg              initial-setup-ks.cfg     公共  视频  文档  音乐
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm  模板  图片  下载  桌面
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname tomcat01
[root@localhost ~]# su
[root@tomcat01 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/           //解压Java
[root@tomcat01 ~]# 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_HOME}/bin:$PATH
[root@tomcat01 ~]# source /etc/profile
[root@tomcat01 ~]# tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/local/
[root@tomcat01 ~]# cd /usr/local/
[root@tomcat01 local]# ls
apache-tomcat-9.0.16  bin  etc  games  include  jdk1.8.0_91  lib  lib64  libexec  sbin  share  src
[root@tomcat01 local]# mv apache-tomcat-9.0.16/ tomcat
[root@tomcat01 local]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
[root@tomcat01 local]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
[root@tomcat01 local]# netstat -antp | grep 8080
[root@tomcat01 local]# 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@tomcat01 local]# netstat -antp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      13215/java  

3、配置动静分离

#########配置nginx服务器##########
[root@nginx init.d]# vim /usr/local/nginx/conf/nginx.conf
 44         location ~.*.jsp$ {
 45           proxy_pass http://192.168.200.80:8080;
 46           proxy_set_header Host $host;
 47         }
[root@nginx init.d]# cd /usr/local/nginx/html/
[root@nginx html]# ls
50x.html  index.html
[root@nginx html]# vim index
<!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>
[root@nginx html]# service nginx start
##########配置tomcat01服务器##############
[root@tomcat01 local]# cd /usr/local/tomcat/webapps/
[root@tomcat01 webapps]# mkdir test
[root@tomcat01 webapps]# cd test/
[root@tomcat01 test]# vim index.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动态页面</title>
</head>
<body>
<div>动态页面</div>
</body>
</html>
######配置nginx服务器##############
图片属于静态资源,因为Nginx处理的是静态页面。所以图片应该放在Nginx目录中,但是要与Tomcat的JSP文件的路径相对应
[root@nginx html]# vim /usr/local/nginx/conf/nginx.conf
 47         location ~.*\.(gif|jpg|jpeg|png|bmg|swf|css)$ {
 48             root html;
 49             expires 30d;
 50         }
[root@nginx html]# mkdir test
[root@nginx html]# ls
50x.html  index  index.html  test
[root@nginx test]# ls
game.jpg           //插入的图片
#########配置tomcat01服务器##################
[root@tomcat01 test]# vim index.jsp                //完整路径 vim /usr/local/tomcat/webapps/test/index.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动态页面</title>
</head>
<body>
<div>动态页面</div>
<img src="22.jpg"width=250>                //添加
</body>
</html>

使用win10 访问192.168.200.60 访问静态页面 192.168.200.60/test/index.jsp访问动态页面
由于图片是静态的,所以图片存在nginx服务器中,客户端访问动态页面走nginx处理静态图片
在这里插入图片描述
在这里插入图片描述

2.3 实验二:负载均衡

实验环境:
Nginx 192.168.200.60 作为负载均衡服务器
Tomcat1 192.168.200.80 作为后端web服务器1
Tomcat 2 192.168.200.90 作为后端web服务器2
实验目的:
以Nginx作为负载均衡器,Tomcat作为web服务器,验证nginx反向代理
实验步骤:
1、配置tomcat02服务器

[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname tomcat02
[root@localhost ~]# su
[root@tomcat02 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
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_HOME}/bin:$PATH
[root@tomcat02 ~]# source /etc/profile
[root@tomcat02 ~]# tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/local/
[root@tomcat02 ~]# cd /usr/local/
[root@tomcat02 local]# ls
apache-tomcat-9.0.16  etc    include      lib    libexec  share
bin                   games  jdk1.8.0_91  lib64  sbin     src
[root@tomcat02 local]# mv apache-tomcat-9.0.16/ tomcat
[root@tomcat02 local]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
[root@tomcat02 local]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
[root@tomcat02 local]# netstat -antp | grep 8080
[root@tomcat02 local]# 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@tomcat02 local]# netstat -antp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      69143/java     

在这里插入图片描述
2、配置tomcat02网页,并重启服务

[root@tomcat02 local]# mkdir -pv /web/webapp1
mkdir: 已创建目录 "/web"
mkdir: 已创建目录 "/web/webapp1"
[root@tomcat02 local]# cd /web/webapp1
[root@tomcat02 webapp1]# vim index.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP test1 page</title>
</head>
<body>
<div>welcome test1 web</div>
</body>
</html>
[root@tomcat02 webapp1]# vim /usr/local/tomcat/conf/server.xml 
151       <Context docBase="/web/webapp1" path="" reloadable="false">     插入
152         </Context>  
[root@tomcat02 webapp1]# shutdown.sh 
[root@tomcat02 webapp1]# startup.sh 

3、配置tomcat01网页,并重启服务

[root@tomcat01 webapps]# mkdir -p /web/webapp1
[root@tomcat01 webapps]# cd /web/webapp1
[root@tomcat01 webapp1]# vim index.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>web   web   web   web   web  webb   !!!!</title>
</head>
<body>
<div>web   web   web   web   web  webb   !!!!</div>
</body>
</html>
[root@tomcat01 webapp1]# vim /usr/local/tomcat/conf/server.xml 
151       <Context docBase="/web/webapp1" path="" reloadable="false">     插入 
152          </Context>
[root@tomcat01 webapp1]# shutdown.sh 
[root@tomcat01 webapp1]# startup.sh 

4、nginx做反向代理

root@nginx test]# vim /usr/local/nginx/conf/nginx.conf
在http的全局添加
 34     upstream tomcatserver {              //名字里面不能加下划线,nginx中upstream后面的名称不能使用下滑线,Nginx不能识别会报400错误。
 35     server 192.168.200.80:8080 weight=1;
 36     server 192.168.200.90:8080 weight=2;
 37     }
在server中添加
56         location / {
 57             root   html;
 58             index  index.html index.htm;
 59             proxy_pass http://tomcatserver;
 60         }
[root@nginx test]# service nginx stop 
[root@nginx test]# service nginx start

在这里插入图片描述
在这里插入图片描述
报错详情请查看:https://blog.csdn.net/m0_47161295/article/details/108445524

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值