nginx负载均衡原理3种(Nginx负载均衡以及动静分离的原理与配置)
nginx负载均衡原理3种
Nginx负载均衡以及动静分离的原理与配置目录
- 一、Nginx实现负载均衡原理
- 二、Nginx动静分离原理
- Nginx 静态处理优势
- 三、Nginx + Tomcat 动静分离、负载均衡配置步骤
- 环境准备:
- 动静分离配置
- 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.6M,Nginx 的每秒吞吐量为3.6M
- Nginx 处理静态资源的能力是 Tomcat 处理的6倍
环境准备:
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/
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定向到一个同 一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时比较好。
总结到此这篇关于Nginx负载均衡以及动静分离的原理与配置的文章就介绍到这了,更多相关Nginx负载均衡及动静分离内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- nginx404错误页面设置(Nginx tp3.2.3 404问题解决方案)
- nginx的15种优化方案(Nginx开启Brotli压缩算法实现过程详解)
- nginx配置404状态码(解决Nginx 配置 proxy_pass 后 返回404问题)
- nginx怎么支持http转https(Nginx域名转发https访问的实现)
- nginx动态路径配置(Nginx本地目录映射实现代码实例)
- nginx状态查询(使用goaccess分析nginx日志的详细方法)
- nginx动静分离的原理(Nginx动静分离实现案例代码解析)
- nginx反向代码解决跨域访问(nginx 解决跨域问题嵌入第三方页面)
- dedecms标签调用原理(DEDECMS安全设置 执行php脚本限制设置方法apache+nginx)
- nginx跨域怎么用(如何利用map实现Nginx允许多个域名跨域)
- nginx宝塔配置(宝塔面板安装云锁Nginx自编译web防护教程绝对有效)
- 静态web服务器nginx(WEB服务器该选择 Apache 还是 Nginx?)
- nginx把https转为http请求(使用nginx方式实现http转换为https的示例代码)
- nginx做转发配置weight啥意思(Nginx中break与last的区别详析)
- nginx代理转发域名(Nginx域名转发使用场景代码实例)
- 如何设置nginx使用ip访问(nginx基于域名,端口,不同IP的虚拟主机设置的实现)
- 览邦G08 Plus SMART WATCH 测评⑱ 全独立这才是智能手表该有的样子(览邦G08PlusSMART)
- 荣耀手表 GS 3 真机亮相 不支持无线充电(荣耀手表GS3)
- 通过体温就能为智能手表充电 原来是用NASA在空间站用的黑科技(通过体温就能为智能手表充电)
- 智能手表兼容Windows和Android 无需充电挑战苹果(智能手表兼容Windows和Android)
- 一天一冲也算表 麦步,一款待机 21 天的智能手表体验评测(一天一冲也算表)
- 魅族智能手表充电座曝光 Type-C 接口,线座分离设计(魅族智能手表充电座曝光)
热门推荐
- vue.js 怎么做插件(Vue.js实现音乐播放器)
- Vps主机和云服务器的区别(Vps主机和云服务器的区别)
- ExtJs中怎么上传文件
- mvc renderpartial
- app开发自定义导航栏(AmazeUI底部导航栏与分享按钮的示例代码)
- border:0和border:none的区别
- 利用xampp搭建服务器(xampp集成环境怎样使用MySQL数据库)
- sql中的map函数用法(Mapper sql语句字段和实体类属性名字有什么关系)
- 阿里云ECS实例中部署的Web网站运行速度慢的解决方法(阿里云ECS实例中部署的Web网站运行速度慢的解决方法)
- html5css3旋转特效效果(一款利用html5和css3实现的3D立方体旋转效果教程)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9