Nginx进阶使用-负载均衡原理及配置实例
介绍
跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术。可以将Nginx用作非常有效的HTTP负载平衡器,以将流量分配到多个应用程序服务器,并使用Nginx改善Web应用程序的性能,可伸缩性和可靠性。
负载均衡
什么是负载均衡,单从字面理解可以解释为N台服务器平均分担负载,不会因为某台服务器负载高宕机而出现某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,目的是达到整个系统的高性能和高可用性。
Nginx负载均衡介绍
严格地说,Nginx仅仅是作为Nginx Proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果,所以我们称之为Nginx负载均衡。
Nginx负载均衡组件
实现Nginx负载均衡的组件主要有两个:
- ngx_http_upstream_module
负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查
- ngx_http_proxy_module
proxy代理模块,用于把请求转发给服务器节点或upstream服务器池
http_upstream模块
upstream模块介绍
upstream模块允许Nginx定义一组或多组节点服务器组,使用时可以通过proxy_pass代理方式把网站的请求发送到事先定义好的对应upstream组的名字上,具体写法为:
proxy_pass http://server_pool_name
其中server_pool_name就是一个upstream节点服务器组名字。
upstream典配
upstream server_pool_name {
server 192.168.0.2; #这行标签和下行是等价的
server 192.168.0.3:80 weight=1 max_fails=1 fail_timeout=10s; #这行标签和上一行是等价的,此行多余的部分就是默认配置,不写也可以。
server 192.168.0.4:80 weight=1 max_fails=2 fail_timeout=20s backup; #server最后面可以加很多参数,具体参数作用看下文的表格
}
upstream模块参数
- server
负载后面的RS配置,可以是ip或者域名。
- weight
请求服务器的权重。默认值为1,越大表示接受的请求比例越大。
- max_fails
nginx 尝试连接后端主机失败的次数。
这个数值需配合proxy_net_upstream,fastcgi_next_upstream和memcached_next_upstream这三个参数来使用的。
当nginx接收后端服务器返回这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如404,502,503
- fail_timeout
在max_fails定义的失败次数后,距离下次检查的时间间隔,默认10s
- backup
热备配置,标志这台服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求
- down
表示这个服务器永不可用,可配合ip_hash使用
- 举例
upstream web_pools {
server 192.168.0.3:80 weight=5;
server 192.168.0.4:80 max_fail=5 fail_timeout=10s;// 当5次连续检查失败后,间隔10s后重新检测。
server 192.168.0.5:80 backup; // 指定备份服务器。作用:等上面服务器全部不可访问时就向它转发请求。
}
http_proxy模块
proxy_pass指令介绍
proxy_pass指令属于ngx_http_proxy_module模块,此模块可以将请求转发到另一台服务器。在实际的反向代理工作中,会通过location功能匹配指定的URI,然后把接收到的符合匹配URI的请求通过proxy_pass抛给定义好的upstream节点池,就location指令具体如何配置和使用,会在后续文章中专题介绍,敬请期待。
location / {
proxy_pass http://upstream_name;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
http proxy模块参数
- proxy_set_header
设置http请求header项传给后端服务器节点。例如,可以实现让代理后端的服务器节点获取访问客户端用户真实的IP地址
- client_body_buffer_size
用于指定客户端请求主题缓冲区大小
- proxy_connect_timeout
表示反向代理与后端节点服务器连接的超时时间,即发起握手等候响应的超时时间
- proxy_send_timeout
表示代理后端服务器的数据回传时间,即在规定时间之内,后端服务器必须传完所有的数据,否则,nginx将断开这个连接
- proxy_read_timeout
设置nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,nginx等待后端服务器的响应时间,其实是nginx在后端排队等候处理的时间
- proxy_buffer_size
设置缓冲区大小,默认该缓冲区大小等于指令proxy_buffers设置的大小
- proxy_buffers
设置缓冲区的数量和大小,nginx从代理的后端服务器获取的响应信息,会放置在缓冲区
- proxy_busy_buffers_size
用于设置系统很忙时可以使用的proxy_buffers大小,官方推荐的大小为proxy_bufer*2
- proxy_temp_file_write_size
指定proxy缓存临时文件的大小
Nginx负载均衡调度算法
Nginx负载均衡是通过upstream模块来实现的,内置实现了三种负载策略,配置还是比较简单的。官网负载均衡配置说明:http://nginx.org/en/docs/http/load_balancing.html
round-robin(轮询)
默认调度算法,按照客户端请求逐一分配到不同的后端服务器,宕机的服务器会自动从节点服务器池中剔除。
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
注意:对于服务器性能不同的集群,该算法容易引发资源分配不合理等问题。
least-connected(最少连接)
最少连接允许在某些请求需要较长时间才能完成的情况下更公平地控制应用程序实例上的负载。使用最少连接的负载平衡,nginx将尝试不使繁忙的应用程序服务器因过多的请求而过载,而是将新的请求分配给不太繁忙的服务器。可以将nginx用作非常有效的HTTP负载平衡器,以将流量分配到多个应用程序服务器,并使用nginx改善Web应用程序的性能,可伸缩性和可靠性
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
ip-hash
每个请求按访问 IP 的hash结果分配,每个访客固定访问一个后端服务器,可解决session不共享的问题。
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
参考
- http://nginx.org/en/docs/http/load_balancing.html
- https://juejin.im/post/6844904144667590670#heading-4
结语
欢迎关注微信公众号『码仔zonE』,专注于分享Java、云计算相关内容,包括SpringBoot、SpringCloud、微服务、Docker、Kubernetes、Python等领域相关技术干货,期待与您相遇!
Nginx进阶使用-负载均衡原理及配置实例的更多相关文章
- 干货 | Nginx负载均衡原理及配置实例
一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 理解正向代理与反向代理的区别 ...
- Nginx几种负载均衡算法及配置实例
本文装载自: https://yq.aliyun.com/articles/114683 Nginx负载均衡(工作在七层"应用层")功能主要是通过upstream模块实现,Ngin ...
- Nginx 反向代理 负载均衡 虚拟主机配置
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- 【转】Nginx 反向代理 负载均衡 虚拟主机配置
原文:http://www.cnblogs.com/itdragon/p/8059000.html Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代 ...
- Nginx+keepalived实现负载均衡高可用配置
1. 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了屏蔽负载均衡服务 ...
- 【nginx】nginx:利用负载均衡原理实现代码的热部署和灰度发布
事情起因很简单,代码的改动量很大.而且刚接手服务器,对原有的代码进行了一定程度的重构.虽然在测试服务器上做了较多的测试工作,但是直接将代码送入生产环境还是不放心,万一配置出问题服务直接崩溃怎么解?万一 ...
- HAProxy负载均衡原理及企业级实例部署haproxy集群
一 HAProxy简介 HAProxy是一种高效.可靠.免费的高可用及负载均衡解决方案,非常适合于高负载站点的七层数据请求.客户端通过HAProxy代理服务器获得站点页面,而代理服务器收到客户请求 ...
- Nginx 反向代理 负载均衡 虚拟主机
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- Nginx 负载均衡原理简介与负载均衡配置详解
Nginx负载均衡原理简介与负载均衡配置详解 by:授客 QQ:1033553122 测试环境 nginx-1.10.0 负载均衡原理 客户端向反向代理发送请求,接着反向代理根据某种负载机制 ...
随机推荐
- 打开chm文件时出现“无法显示此页:确保 Web 地址 //ieframe.dll/dnserrordiagoff.htm# 正确”的解决办法
当我们打开chm文件时遇到下面这种情况: 解决方法: 1.一般情况下无法显示网页:右键 chm文件属性里最下面有个"解除锁定",点击"解除锁定"按钮就可以了. ...
- Eclipse创建Web项目后新建Servlet时报红叉错误 or 导入别人Web项目时报红叉错误 的解决办法
如图,出现类似红叉错误. 1.在项目名称上点击右键->Build Path->Configure Build Path 2.在弹出来的框中点击Add Library,如图 3.接下来选择U ...
- java基础(九)--方法重载
如System.out.println()方法即是方法重载的. 以下举例说明自定义sum()方法的重载 package cnblogs; public class TestBase09MathRelo ...
- 超详细windows安装mongo数据库、注册为服务并添加环境变量
1.官网下载zip安装包 官网地址https://www.mongodb.com/download-center/community?jmp=nav,现在windows系统一般都是64位的,选好版本. ...
- 【Laravel】 常用的artisian命令
全局篇 查看artisian命令 php artisan php artisan list 查看某个帮助命令 php artisan help make:model 查看laravel版本 php a ...
- 如何系统地学习Excel?
人在江湖,生不由己.人在职场,Excel必备. 为了帮助更多人快速掌握职场必备技能Excel,我写了一个免费的教程<职场Excel>,能帮助你解决99%职场中遇到的问题. 对,你没看错,是 ...
- PHP 魔术常量介绍
PHP 魔术常量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常 ...
- PHP preg_split() 函数
preg_replace 函数通过一个正则表达式分隔字符串.高佣联盟 www.cgewang.com 语法 array preg_split ( string $pattern , string $s ...
- PHP chunk_split() 函数
实例 在每个字符后分割一次字符串,并在每个分割后添加 ".": <?php$str = "Hello world!";高佣联盟 www.cgewang.c ...
- Mybatis 的连接池技术
我们在前面的 WEB 课程中也学习过类似的连接池技术,而在 Mybatis 中也有连接池技术,但是它采用的是自 己的连接池技术.在 Mybatis 的 SqlMapConfig.xml 配置文件中,通 ...