Nginx+Tomcat负载均衡、动静分离群集介绍

负载均衡 专栏收录该内容
4 篇文章 0 订阅

Tomcat概述

简介:

1.最初是由Sun的软件构架师詹姆斯·邓肯·戴维森开发
2.安装Tomcat后,安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件

Tomcat重要目录:

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

Nginx应用

1.Nginx是一款非常优秀的HTTP服务器软件

  • 支持高达50000个并发连接数的响应,响应连接数的范围在
    30000~50000之间
  • 拥有强大的静态资源处理能力
  • 运行稳定
  • 内存、CPU等系统资源消耗非常低

2.目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力。

Nginx负载均衡实现原理

Nginx实现负载均衡是通过反向代理实现;
反向代理原理
在这里插入图片描述

Nginx配置反向代理的主要参数

upstream 服务池名 { }
配置后端服务器池,以提供响应数据

proxy_pass http://服务池名
配置将访问请求转发给后端服务器池的服务器处理

动静分离概述

动静分离是将网站的静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用的访问。

静态资源的部署

1.静态资源部署在Nginx,将静态资源部署在Nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求,全部去请求nginx服务器,达到动静分离的目标。

2.静态资源部署在CDN上,将项目中的JavaScript,CSS以及img文件都存放在CDN服务器上,将HTML文件一起存放到CDN上之后,可以将静态资源统一放置在一种服务器上,便于前端进行维护;而且用户在访问静态资源时,可以很好利用CDN的优点。

3.后端API提供数据,后端应用提供API,根据前端的请求进行处理,并将处理结果通过JSON格式返回至前端。目前应用主要采用Java平台开发,因此应用服务器主要是Tomcat服务器,现在也开始有部分应用采用node进行开发,应用服务器也开始使用node服务器。

4.前后端域名,动静分离因为静态资源和应用服务分别部署在不同的服务器上,因此会面临域名策略的选择。采用相同域名下,用户请求API时可以避免跨域所带来的问题,相对开发更为快速,工作量也相对小一些。前后端采用不同域名时,需要前后端开发时兼容跨域请求的情况,开发量相对上一种会稍多一些。解决跨域方式最常用的方式就是采用JSONP,还有一种解决方式使用CORS(HTTP访问控制)允许某些域名下的跨域请求。

动静分离实现的优缺点

优点:
API接口服务化;前后端开发并行;减轻后端服务器的压力,提高静态资源访问速度。

缺点:
不利于网站SEO(搜索引擎优化);开发量变大;在业务高速发展时需要慎重考虑。

动静分离的适用场景

  • 静态文件访问量大,服务器负载高,I/O问题导致用户访问卡顿。
  • 静态文件数量大,服务器存储空间不够。
  • 静态文件用户访问量大,且分布在各地。
  • 移动更新包在某个时间段需要高速下载,且并发下载量高。

Nginx动静分离实现原理

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

Nginx静态处理优势

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

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

在Nginx服务器上安装Nginx,反向代理两个Tomcat站点,并实现负载均衡。

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

Nginx与Tomcat实现动静分离具体步骤

1.由于Tomcat本身处理静态效率不高,还会带来资源消耗,因此使用动静分离,将静态请求交由Nginx处理,动态请求交由Tomcat处理。

2.Nginx根据客户端请求的url来判断请求的是否是静态资源,如果请求的url包含jpg、png,则由Nginx处理;如果请求的url是.php或者.jsp等,则被认为是动态的,将转发tomcat处理。即Nginx通过url来区分请求的类型,并且转发给不同的服务端。

实验环境:
Nginx服务器:
IP地址:192.168.100.11/24(调度器1)

Tomcat服务器:
IP地址:192.168.100.2/24(tomcat1)
IP地址:192.168.100.3/24(tomcat2)

NFS存储服务器:
IP地址:192.168.100.4/24

Client客户端:
IP地址:192.168.100.5/24

NFS存储服务器:IP地址:192.168.100.4/24

mkdir web1
mkdir web2

vi /web1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>tomcat1</title>
</head>
<body>
<% out.println("this is tomcat1 server");%>
<div>动态页面</div><br/><img src="a.jpg" />
</body>
</html>


vi /web2/index.jsp
<<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>tomcat2</title>
</head>
<body>
<% out.println("this is tomcat2 server");%>
<div>动态页面</div><br/><img src="b.jpg" />
</body>
</html>

vi /etc/exports
/web1 192.168.100.2/32(ro)
/web2 192.168.100.3/32(ro)


showmount -e
Export list for nfs:
/web2 192.168.100.3/32
/web1 192.168.100.2/32

systemctl restart nfs
systemctl restart rpcbind

在这里插入图片描述

Tomcat服务器:

IP地址:192.168.100.2/24(tomcat1)
IP地址:192.168.100.3/24(tomcat2)

配置java环境

tar zxvf jdk-8u91-linux-x64.tar.gz
tar zxvf apache-tomcat-8.5.16.tar.gz 

mv jdk1.8.0_91/ /usr/local/java 
vi /etc/profile
....
export JAVA_HOME=/usr/local/java    	'//设置JAVA根目录设为全局变量'
export JAVA_JRE=/usr/local/java/jre 
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_JRK/bin:$JAVA_JRE/lib 

'//环境变量,在PATH环境变量中添加JAVA根目录下的bin/子目录,jre/子目录'

source /etc/profile    '脚本导入到环境变量,使其生效'
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java/jre

java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

//配置tomcat环境
mv apache-tomcat-8.5.16 /usr/local/tomcat8
mkdir /webapp1
cd /webapp1/  '挂入图片 且先放人图片后挂入'
mount 192.168.100.4:/web1 /webapp1/
ll
-rw-r--r--. 1 root root 12855 1214 18:57 a.jpg

df -h
192.168.100.4:/web1       51G  5.5G   46G   11% /webapp1  'nfs的共享目录挂载成功'

配置tomcat环境修改主配置文件

vi /usr/local/tomcat8/conf/server.xml '查找到Host name ,添加以下配置'
<Context docBase="/webapp1" path="" reloadable="false">
  </Context>
  '//docBase:web应用的文档基准目录'
  '//path="": 指定访问路径URI(虚拟目录名),访问url路径下是否跟内容'
  '//reloadable:本项为true时,当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务'
  
优化服务启动关闭
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup  '优化开启'
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown  '优化关闭'
tomcatup  '服务启动'
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:          /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.   

Tomcat started '开启了'

注:tomcat2 上的配置与 tomcat1 上几乎相同 一样配置一下及好。 就挂载nfs是/web2文件。

tomcat访问NFS共享目录效果: 注:挂载nfs共享目录到/webapp1里面 覆盖了a.jsp 图片404找不到。
在这里插入图片描述
Nginx服务器:
IP地址:192.168.100.11/24(调度器1)
在这里插入图片描述
安装Nginx依赖包

tar zxvf nginx-1.13.7.tar.gz 
yum -y install gcc gcc-c++ make pcre-devel zlib-devel //pcre-devel:正则表达式库 //zlib-devel:函数库
useradd -M -s /sbin/nologin nginx '创建不可登录,不带宿主的用户'

cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install

创建命令链接

cd nginx-1.12.2/
ln -s /usr/local/nginx/conf/nginx.conf /etc/ '优化'
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ 

配置upstream服务池

vi /etc/nginx.conf  '优化后'
...//添加以下配置,upstream服务池  如#gzip  on;下面
upstream tomcat_server {
             server 192.168.100.2:8080 weight=1;
             server 192.168.100.3:8080 weight=1;
}
...
        location ~ \.jsp$ {
             proxy_pass http://tomcat_server;  
}

启动服务
nginx -t '检查语法问题'
cd /usr/local/nginx/html/   '导入图片 a.jpg b.jpg,保证静态资源的调度'

nginx  '开启服务'  killall -9 nginx
netstat -anpt | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN   27576/nginx: master

/usr/local/nginx/html/放入了两种图片在这里插入图片描述

访问测试192.168.100.11效果:
在这里插入图片描述
访问测试http://192.168.100.11/index.jsp效果: 刷新可以2个页面切换。
在这里插入图片描述
在这里插入图片描述
客户机虚拟机访问http://192.168.100.11/index.jsp
在这里插入图片描述

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:像素格子 设计师:CSDN官方博客 返回首页

打赏作者

蒙多笑你就会copy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值