目录

一:Nginx实现负载均衡原理

二:Nginx动静分离原理

三:Nginx+Tomcat负载均衡、动静分离实验

3.1部署Nginx负载均衡器

3.1.1关闭防火墙,将安装nginx所需的软件包传到/opt目录下

3.1.2安装依赖包

3.1.3创建运行用户、组

3.1.4解压安装包

3.1.5编译安装Nginx

3.1.6添加nginx系统服务

3.1.7赋权及开启服务、开启开机自启

3.2部署2台tomcat应用服务器

配置tomcat服务器1

3.2.1关闭防火墙和增强机制,将所需依赖包上传到/opt目录下

3.2.2安装JDK

3.2.3设置JDK环境变量

3.2.4安装启动tomcat

3.2.5查看端口

配置tomct服务器2

3.2.1关闭防火墙和增强机制,将所需依赖包上传

3.2.2安装JDK

3.2.3设置JDK环境变量

3.2.4安装启动tomcat

3.2.5查看端口

3.3动静分离配置

配置tomcat服务器1

3.3.1创建指定首页目录

3.3.2创建默认首页文件,并写入内容

3.3.3编辑tomcat主配置文件

3.3.4重启tomcat服务

配置tomcat服务器2

3.3.1创建tomcat1指定首页目录

3.3.2编辑tomcat1主配置文件

3.3.3重启tomcat1服务

3.3.4创建tomcat2指定首页目录

3.3.5编辑tomcat2主配置文件

3.3.6重启tomcat2服务

3.4Nginx server 配置

3.4.1 准备静态页面和静态图片

3.4.2配置负载均衡的服务器列表

3.4.3重启nginx服务

3.5测试效果

四:Nginx 负载均衡模式

4.1rr 负载均衡模式

4.2least_conn 最少连接

4.3ip_hash 负载均衡模式

4.4fair(第三方)负载均衡模式

4.5url_hash(第三方)负载均衡模式

五:总结

前言:本章我们学习Nginx负载均衡原理以及动静分离原理并且如何实现负载均衡和动静分离

一:Nginx实现负载均衡原理

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

如图所示:
Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。

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

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

Nginx服务器
1、首页使用精准匹配
2、静态页面使用正则匹配自己处理
3、动态页面使用正则匹配jsp结尾的请求,使用proxy_pass转发给Tomcat服务器

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

upstream 服务池名 {}

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

proxy_pass http://服务池名

配置将访问请求转发给后端服务器池的服务器处理

二:Nginx动静分离原理

动静分离原理:

服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端

Nginx静态处理优势:

●Nginx处理静态页面的效率远高于Tomcat的处理能力

●若Tomcat的请求量为1000次,则Nginx的请求量为6000次

●Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3 .6M

●Nginx处理静态资源的能力是Tomcat处理的6倍

三:Nginx+Tomcat负载均衡、动静分离实验

●Nginx服务器:192.168.137.15

●Tomcat服务器1:192.168.137.10:80

●Tomcat服务器2:192.168.137.20:8080  192.168.137.20:8081

3.1部署Nginx负载均衡器

3.1.1关闭防火墙,将安装nginx所需的软件包传到/opt目录下

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

3.1.2安装依赖包

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

3.1.3创建运行用户、组

useradd -M -s /sbin/nologin nginx

3.1.4解压安装包

tar zxvf nginx-1.12.0.tar.gz -C /opt/

3.1.5编译安装Nginx

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \                                   #启用文件修改支持
--with-http_stub_status_module \                    #启用状态统计
--with-http_gzip_static_module \                    #启用 gzip静态压缩
--with-http_flv_module \                            #启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module \                            #启用 SSL模块,提供SSL加密功能
--with-stream                                       #启用 stream模块,提供4层调度make -j2 && make installln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/        #让系统识别nginx的操作命令

3.1.6添加nginx系统服务

vim /lib/systemd/system/nginx.service[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

3.1.7赋权及开启服务、开启开机自启

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

3.2部署2台tomcat应用服务器

配置tomcat服务器1

3.2.1关闭防火墙和增强机制,将所需依赖包上传到/opt目录下

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

3.2.2安装JDK

cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
java -version

3.2.3设置JDK环境变量

vim /etc/profile.d/java.shexport 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:$PATHsource /etc/profile

3.2.4安装启动tomcat

tar zxvf apache-tomcat-9.0.16.tar.gzmv /opt/apache-tomcat-9.0.16/ /usr/local/tomcat/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

3.2.5查看端口

netstat -anpt | grep 8080java -version

配置tomct服务器2

3.2.1关闭防火墙和增强机制,将所需依赖包上传

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

3.2.2安装JDK

cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
java -version

3.2.3设置JDK环境变量

vim /etc/profile.d/java.shexport 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:$PATHsource /etc/profile

3.2.4安装启动tomcat

tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/localmv /usr/local/apache-tomcat-9.0.16/ /usr/local/tomcat1
cp -rp /usr/local/tomcat1/ /usr/local/tomcat2/usr/local/tomcat1/bin/shutdown.sh
/usr/local/tomcat1/bin/startup.sh/usr/local/tomcat2/bin/shutdown.sh
/usr/local/tomcat2/bin/startup.sh

3.2.5查看端口

netstat -anpt | grep 8080java -version

3.3动静分离配置

配置tomcat服务器1

3.3.1创建指定首页目录

mkdir /usr/local/tomcat/webapps/xiao

3.3.2创建默认首页文件,并写入内容

vim /usr/local/tomcat/webapps/xiao/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP xiao page</title>   #指定为 xiao 页面
</head>
<body>
<% out.println("动态页面:名侦探柯南");%>
</body>
</html>

3.3.3编辑tomcat主配置文件

vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/xiao" path="" reloadable="true" />
</Host>/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

3.3.4重启tomcat服务

配置tomcat服务器2

3.3.1创建tomcat1指定首页目录

mkdir /usr/local/tomcat1/webapps/xiaovim /usr/local/tomcat1/webapps/xiao/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP hudie page</title>
</head>
<body>
<% out.println("动态页面 1:鬼灭之刃");%>
</body>
</html>

3.3.2编辑tomcat1主配置文件

cd /usr/local/tomcat1
cd conf/
cp server.xml server.xml.bak

vim server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat1/webapps/hudie" path="" reloadable="true"></Context>
</Host>

3.3.3重启tomcat1服务

/usr/local/tomcat1/bin/shutdown.sh
/usr/local/tomcat1/bin/startup.sh

3.3.4创建tomcat2指定首页目录

cd ../../tomcat2/
mkdir /usr/local/tomcat2/webapps/mifeng
vim /usr/local/tomcat2/webapps/mifeng/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP mifeng page</title>
</head>
<body>
<% out.println("动态页面 2 猫和老鼠");%>
</body>
</html>

3.3.5编辑tomcat2主配置文件

vim conf/server.xml<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat2/webapps/mifeng" path="" reloadable="true"></Context>
</Host>

先修改tomcat2的修改端口号

3.3.6重启tomcat2服务

/usr/local/tomcat2/bin/shutdown.sh
/usr/local/tomcat2/bin/startup.sh

3.4Nginx server 配置

3.4.1 准备静态页面和静态图片

echo '<html><body><h1>ming zhen tan ke nan</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img

mkdir /usr/local/nginx/html/img
cd /usr/local/nginx/html/img
rz -E

3.4.2配置负载均衡的服务器列表

配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf

3.4.3重启nginx服务

systemctl restart nginx.service

3.5测试效果

测试静态页面效果
浏览器访问 http://192.168.137.15/
浏览器访问 http://192.168.137.15/hudieren.jpg

在配置文件中加入字符集可显示中文

测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.137.15/index.jsp

四:Nginx 负载均衡模式

4.1rr 负载均衡模式

每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认1),在失效时间内(fail_timeout,默认10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后,那么将所有节点都恢复为有效继续探测,一般来说rr可以根据权重来进行均匀分配

4.2least_conn 最少连接

优先将客户端请求调度到当前连接最少的服务器

4.3ip_hash 负载均衡模式

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,但是ip_hash会造成负载不均,有的服务请求接受多,有的服务请求接受少,所以不建议采用ip_hash模式,session 共享问题可用后端服务的 session 共享代替 nginx 的 ip_hash

4.4fair(第三方)负载均衡模式

按后端服务器的响应时间来分配请求,响应时间短的优先分配

4.5url_hash(第三方)负载均衡模式

基于用户请求的uri做hash。和ip_hash算法类似,是对每个请求按url的hash结果分配,使每个URL定向到同一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时比较好

五:总结

在生产环境中我们需要用nginx负载均衡、动静分离的功能来实现我们的工作,所以我们需要熟悉动静分离和负载均衡的原理以及如何进行配置。

Nginx+Tomcat负载均衡、动静分离相关推荐

  1. ngixn+tomcat负载均衡 动静分离配置 (nginx反向代理)

    文章目录 Tomcat主要配置文件 Nginx负载均衡实现原理 实验环境 动静分离配置 创建静态页面 配置动态页面 图片动静分离 Tomcat主要配置文件 bin:存放启动和关闭Tomcat脚本 co ...

  2. Nginx+Tomcat负载均衡、动静分离集群

    Nginx+Tomcat负载均衡.动静分离集群 一.Nginx实现负载均衡原理 二.Nginx 配置反向代理的主要参数 三.Nginx 动静分离实现原理和优势 1.Nginx 静态处理优势 2.动静分 ...

  3. HAproxy负载均衡动静分离实现及配置详解

     HAproxy负载均衡动静分离实现及配置详解 HAproxy的介绍 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAP ...

  4. Nginx+Tomcat 负载均衡集群方案

    2019独角兽企业重金招聘Python工程师标准>>> Nginx+Tomcat 负载均衡集群方案 该方案是我之前做过的一个项目生产应用的,目前运行良好,如何您生产使用,请先做好测试 ...

  5. Nginx+Tomcat负载均衡

    Nginx+Tomcat 负载均衡集群方案 该方案是我之前做过的一个项目生产应用的,目前运行良好,如何您生产使用,请先做好测试. 系统架构图 下载软件包 [root@Nginx-node1 src]# ...

  6. 搭建Nginx+Tomcat 负载均衡集群

    Nginx+Tomcat 负载均衡集群 一. 实验拓扑: 二. 实验要求: 1. 试验环境: 主机 操作系统 所需软件 Nginx服务器 rhel 6.5 x86_64 nginx-1.6.0.tar ...

  7. ↑nginx+tomcat+httpd实现动静分离↑

    ↑nginx+tomcat+httpd实现动静分离↑ 2013-10-01 16:39:54 标签:tomcat动静分离 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本 ...

  8. Nginx+Tomcat负载均衡和动静分离理论实操详解来袭!

    文章目录 一:关于动静分离和负载均衡介绍 1.1:Nginx+Tomcat的动静分离 1.2:Nginx+Tomcat的负载均衡 1.3:Nginx配置反向代理的主要参数 二:Nginx+Tomcat ...

  9. Nginx的动态代理,负载均衡,动静分离的简单使用

    nginx 一 Nginx介绍 1.1 为什么要学习Nginx 问题1: 客户端到底要将请求发送那台服务器 问题2:所有客户端的请求都发送给了服务器1 问题3:客户端发送的请求可能是申请静态资源的,也 ...

最新文章

  1. 几张动态图捋清Java常用数据结构及其设计原理
  2. java swing 弹出登录框_用JavaSwing制作一个简单的登录框
  3. nyist-组队赛(七)
  4. joomla建站-双语CMS系统开发的实现
  5. 操作系统之文件管理:2、文件的逻辑结构(有结构文件、无结构文件、顺序文件、索引文件、索引顺序文件)
  6. 转载:Mongodb start
  7. CVE-2020-15999:Chrome FreeType 字体库堆溢出原理分析
  8. mysql导入txt linux_Linux中将txt导入到mysql的方法教程
  9. 不要版面费的期刊名称
  10. Locality-sensitive hashing
  11. 查询数据总数_Web | Django 与数据库交互,你需要知道的 9 个技巧
  12. 10g_DBWn_concept
  13. 魏尔斯特拉斯函数 matlab,函数变换论文,关于《复变函数积分变换》教学相关参考文献资料-免费论文范文...
  14. 高中计算机编程内容,高中信息技术课程标准
  15. 跨境电商:YouTube视频营销必看攻略
  16. 第三章 Guarded Suspension模式 等我准备好哦
  17. 深度学习的发展历史是什么?
  18. device unauthorized adbd cannot run as root in production builds insufficient permissions
  19. golang导入私有仓库报错:“server response: not found:xxx: invalid version: git ls-remote -q origin in xxx“
  20. 打印万年历的c语言程序,C语言打印万年历

热门文章

  1. 没有盖兹 微软会更好?
  2. 怎样娶到比尔盖茨的女儿
  3. 人脸识别系列(十五):COCO Loss
  4. html粘贴excel表格大小不一样,为什么excel表格粘贴的时候显示因为单元格形状大小不一样无法粘贴呢...
  5. 华为云 内容审核API调用 前端 js uni-app
  6. 在Adobe Acrobat Pro调整PDF页面大小(使得页面一样大)
  7. 【李佳辉_周报_2022.10.16】
  8. win10上运行linux程序吗,Win10可以运行 Linux 的图形界面程序了
  9. Javascript 合集 自己整理的收藏 记录一下(最下面有惊喜)
  10. [笔记]ESP32 踩坑 任务看门狗超时的问题---Task watchdog got triggered