nginx的6种负载均衡策略
在服务器集群中,Nginx起到一个反向代理服务器的作用。为了避免单独一个服务器压力过大导致服务器奔溃,就需要将不同用户的请求转发给不同给不同的服务器,保证集群中的每一台服务器都能正常运作,这种机制就叫做负载均衡。
下面说一下Nginx支持的6种负载均衡策略。
轮询(默认)
轮询是Nginx支持的默认负载均衡策略,轮询策略就是指每个请求会按时间顺序逐一分配到不同的后台服务器上。比如说一个集群中只有服务器A和服务器B,第一次访问是服务器A,第二次访问就是服务器B,第三次访问就是服务器A...以此类推。
- upstream balanceServer {
- server localhost:8081;
- server localhost:8082;
- server localhost:8083;
- server localhost:8084;
- }
轮询策略提供如下参数:
fail_timeout | 与max_fails结合使用,表示max_fails次失败后服务器暂停的时间。 |
max_fails |
设置在fail_timeout参数设置的时间内最大失败次数,默认是1,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,返回proxy_next_upstream模块定义的错误。
|
fail_time | 服务器会被认为停机的时间长度,默认为10s。 |
backup | 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里,当其他所有的非backup机器down掉或者繁忙的时候才会请求backup服务器,因此这台机器压力会最低。 |
down | 标记服务器永久停机了,表示当前的server暂时不参与负载。 |
weight | 负载的权重,默认为1。weight越大,表示这台服务器被访问的几率就越大。 |
在轮询策略下,如果集群中的某个服务器挂掉了,就会自动剔除该服务器。
轮询策略适合服务器配置相当,无状态且短平快的服务使用。
权重(weight,加权轮询)
权重策略是在轮询策略的基础上,另外指定了轮询的几率。
- upstream balanceServer {
- server localhost:8081;
- server localhost:8082 backup;
- server localhost:8083 max_fails=3 fail_timeout=20s;
- server localhost:8084 weight=2;
- }
在上面的例子中,weight参数用来指定轮询的几率,weight的默认值为1,weight的数值与访问比率成正比,比如8084端口的服务器被访问的几率是其他服务器的两倍。
权重越高,分配到需要处理的请求就越多。
权重策略可以与least_conn和ip_hash结合使用。
权重策略比较适合服务器的硬件配置差别较大的情况。
根据IP分配(ip_hash)
这种策略是按照客户端的IP去分配服务器,使同一个客户端的请求都转发到同一个后台服务器,保证了Session的统一性,可以用来解决Session的跨域问题。
- upstream balanceServer {
- ip_hash; # 指定负载均衡策略为ip_hash
- server localhost:8081;
- server localhost:8082 backup;
- server localhost:8083 max_fails=3 fail_timeout=20s;
- server localhost:8084 weight=2;
- }
在Nginx的1.3.1版本之前,不能在这种策略种使用权重(weight)。
ip_hash不能和backup参数同时使用。
这个策略适用于有状态服务,比如说Session会话。
当有服务器需要剔除的时候,必须手动down掉。
最少连接(least_conn)
这个策略是把请求转发给连接数较少的后端服务器。前面的轮询策略是把请求平均地转发给集群中的每个后台服务器,使得它们的负载大致相同,但是有些请求可能占用的时间会很长,可能导致所在的后端负载过高。这种情况下选用least_conn策略就能达到更好的负载均衡效果。
- upstream balanceServer {
- least_conn; # 指定负载均衡策略为least_conn
- server localhost:8081;
- server localhost:8082 backup;
- server localhost:8083 max_fails=3 fail_timeout=20s;
- server localhost:8084 weight=2;
- }
这个策略适合用在请求处理时间长短不一造成服务器过载的场景。
响应时间(fair)
这种策略是按照服务器的响应时间来分配请求,响应时间短的优先分配。
- upstream balanceServer {
- fair; # 指定负载均衡策略为fair
- server localhost:8081;
- server localhost:8082;
- server localhost:8083;
- server localhost:8084;
- }
fair策略是一种第三方策略,需要安装第三方插件。
根据URL分配(url_hash)
这种策略是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash的话,就可以使得同一个url(也就是同一个资源请求)到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以从缓存中读取。
- upstream balanceServer {
- url_hash; # 指定负载均衡策略为url_hash
- server localhost:8081;
- server localhost:8082;
- server localhost:8083;
- server localhost:8084;
- }
url_hash策略是一种第三方策略,需要安装第三方插件。
配置实例
- # user yanggb;
- worker_processes 4;
- events {
- # 最大并发数
- worker_connections 1024;
- }
- http {
- # 待选服务器列表
- upstream balanceServer {
- server 10.1.40.129:8099 fail_timeout=60s;
- server 10.1.40.23:9088;
- server 10.1.40.77:7086;
- }
- server {
- # 监听端口
- listen 80;
- # 根目录下
- location / {
- # 选择哪个服务器列表
- proxy_pass http://balanceServer;
- }
- }
- }
总结
Nginx的负载均衡其实也可以看作是5种,因为其中的权重轮询其实可以归类到轮询策略中。除了轮询策略(包括权重轮询)外的其他负载均衡策略都是使用不同的算法实现的,在实际的运用中,需要根据不同的场景有针对性地去选择不同的负载均衡策略(可以多种策略组合使用),来响应实际的需求。
"有没有那么一个特别的场景,能让你想起我。"
nginx的6种负载均衡策略的更多相关文章
- nginx的几种负载均衡策略
转自https://www.cnblogs.com/1214804270hacker/p/9325150.html 一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即 ...
- [转帖]Nginx服务器的六种负载均衡策略详解
Nginx服务器的六种负载均衡策略详解 咔咔侃技术 2019-09-11 17:40:12 一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独 ...
- 【Nginx(三)】Nginx配置集群 负载均衡策略
Nginx配置集群 负载均衡策略 一.安装环境 1.安装JDK8的环境,配置JDK8的环境变量 2.上传jar包demo-1.jar 和 demo-2.jar demo-1.jar 监听8080端口; ...
- Spring Cloud Ribbon 中的 7 种负载均衡策略
负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者--客户端负载均衡器. 服务端负载均衡器的问题是,它提供了更强的流量控制权,但 ...
- 【Nginx(四)】Nginx配置集群 负载均衡策略
1.Nginx常见的负载均衡策略 ip_hash (固定分发) 简介:根据请求按访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器 场景:服务器业务分区.业务缓存.Session需要 ...
- Nginx的两种负载均衡搭建(Tomcat版)
前言 Nginx的负载均衡一般采用upstream来实现,但是,还有另一种文件拓展的方式,同样可以实现负载均衡. 一.一般的负载均衡 upstream my_server { server local ...
- DNS负载均衡与NGINX负载均衡策略
负载均衡是指的是把请求均匀的分摊到多个服务器上处理.一般常见的负载均衡有两种:①客户端与反向代理服务器之间的DNS负载均衡②反向代理服务器与应用服务器之间的负载均衡(这种负载均衡有很多,可以是webl ...
- Nginx服务器之负载均衡策略(6种)
一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器.详情请查看我的另一篇博客. 二.Ng ...
- Nginx几种负载均衡算法及配置实例
本文装载自: https://yq.aliyun.com/articles/114683 Nginx负载均衡(工作在七层"应用层")功能主要是通过upstream模块实现,Ngin ...
随机推荐
- 【洛谷2791】幼儿园篮球题(第二类斯特林数,NTT)
[洛谷2791]幼儿园篮球题(第二类斯特林数,NTT) 题面 洛谷 题解 对于每一组询问,要求的东西本质上就是: \[\sum_{i=0}^{k}{m\choose i}{n-m\choose k-i ...
- 图解servlet
You can see the following illustration to better understand the lifecycle of the Servlet. When the r ...
- Python爬取知乎上搞笑视频,一顿爆笑送给大家
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:Huangwei AI 来源:Python与机器学习之路 PS:如有需 ...
- C#中巧用Lambda进行数据的筛选查询等处理
场景 有一个Record对象的list,如果要根据其某个属性CycleIndex进行分组,类似于sql的group by分组查询. 如果要在这个这个list中查找出符合某种条件的数据,类似于sql的w ...
- Qt Creator单步调试快捷键F10经常失灵问题
使用Qt Creator调试程序的时候经常会遇到F10单步调试快捷键不响应的问题. 打开调试菜单如下:有两个快捷键为F10的调试菜单项,于是快捷键冲突了! 解决办法:废话不说,直接上图 由于Start ...
- u盘 安装 centOS 7
实际上, 对于服务器的安装, 最好是能够远程批量安装(可能有些难度, 不是专业运维) 镜像下载地址: http://59.80.44.49/isoredirect.centos.org/centos/ ...
- 抓包工具Fiddler的简单使用
HTTP代理 http代理,就是代理客户机的http访问,主要代理浏览器访问页面 代理服务器是介于浏览器和web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务 ...
- Linux下迅速删除一个大文件夹
rsync -av --delete /tmp/null/ ./ 迅速删除大文件夹,如缓存 快速删除大目录(即大量文件)1.先建立一个空目录 mkdir /data/blank 2.用r ...
- -shared -fPIC
gcc -shared -fPIC -o 1.so 1.c 这里有一个-fPIC参数 PIC就是position independent code PIC使.so文件的代码段变为真正意义上的共享
- html学习之二(常用标签练习)
<!DOCTYPE html><head> <meta charset="utf-8"> <title>锚点链接</title ...