纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Nginx负载均衡及动静分离 Nginx负载均衡以及动静分离的原理与配置

Jahony   2021-06-23 我要评论
想了解Nginx负载均衡以及动静分离的原理与配置的相关内容吗Jahony在本文为您仔细讲解Nginx负载均衡及动静分离的相关知识和一些Code实例欢迎阅读和指正我们先划重点:nginx动静分离配置,nginx负载均衡,nginx动静分离配置下面大家一起来学习吧

一、Nginx实现负载均衡原理

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


Nginx服务器作为前端Tomcat服务器作为后端web页面请求由Nginx服务来进行转发

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

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

Nginx服务器

1、首页使用精准匹配

2、静态页面使用正则匹配自己处理

3、动态页面使用正则匹配jsp结尾的请求使用proxy_pass转发给Tomcat服务器

二、Nginx动静分离原理

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

Nginx 静态处理优势

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

三、Nginx + Tomcat 动静分离、负载均衡配置步骤

环境准备:

Nginx 服务器:192.168.121.13

Tomcat 服务器1:192.168.121.12:8080 192.168.121.12:8081

Tomcat 服务器2:192.168.121.10

1、部署 Nginx 负载均衡服务器

首先将 nginx-1.12.0.tar.gz 压缩包上传到 /opt 目录下

systemctl stop firewalld.service 
systemctl disable firewalld.service 
setenforce 0

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

useradd -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_flv_module \
--with-http_ssl_module

make && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

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
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

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

2、部署两台 Tomcat 应用服务器

所需安装包为:
apache-tomcat-9.0.16.tar.gz  
jdk-8u201-linux-x64.rpm 
#scp apache-tomcat-9.0.16.tar.gz root@192.168.121.10:/opt    #将所需的压缩包在Tomcat1上传给Tomcat2 server当然我们也可以自己直接将压缩包拉到/opt目录下


systemctl stop firewalld.service 
systemctl disable firewalld.service 
setenforce 0

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

vim /etc/profile.d/java.sh
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

source /etc/profile.d/java.sh
java -version

cd /opt
vim abc.java
public class abc {
  public static void main(String[] args){
    System.out.println("Hello World!")
  }
}

[root@localhost?opt]#javac abc.java      #用来检测JDK环境是否设置成功
[root@localhost?opt]#java abc
Hello World!

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat

##启动tomcat##
/usr/local/tomcat/bin/startup.sh
netstat -natp | grep  8080


动静分离配置

(1)Tomcat1 server 配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   #指定为 test1 页面
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>


vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
 </Context>
</Host>

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

(2)Tomcat2 server 配置
mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test

vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>   #指定为 test2 页面
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>


vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>

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


vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title>   #指定为 test3 页面
</head>
<body>
<% out.println("动态页面 3,http://www.test3.com");%>
</body>
</html>


vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>

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

Nginx 负载均衡模式

rr 负载均衡模式:

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

least_conn 最少连接:

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

ip_hash 负载均衡模式:

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

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

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

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

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

总结


相关文章

猜您喜欢

  • Android 录制音视频 Android 录制音视频的完整代码

    想了解Android 录制音视频的完整代码的相关内容吗原总破局在本文为您仔细讲解Android 录制音视频的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Android,录制音视频,Android,音视频下面大家一起来学习吧..
  • python 出行路线规划 python四种出行路线规划的实现

    想了解python四种出行路线规划的实现的相关内容吗Python研究者在本文为您仔细讲解python 出行路线规划 的相关知识和一些Code实例欢迎阅读和指正我们先划重点:python,出行路线规划,python路线规划图下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式