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 ...
随机推荐
- C++ getline函数用法详解
转载自http://c.biancheng.net/view/1345.html 虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题. 当 cin 读取数 ...
- Python 学习 第16篇:数据类型(字典和Json)
字典是键/值对构成的集合,字典通过大括号来创建,字典的键是字符串,而值可以是任何数据对象. 字典有两个重要的特征: 字典是无序的,字典项没有特定的顺序,只能通过键来获取值: 字典是可变的,支持原处修改 ...
- Elasticsearch 6.x版本全文检索学习之Search API
Elasticsearch 6.x版本全文检索学习之Search API. 1).Search API,实现对es中存储的数据进行查询分析,endpoind为_search,如下所示. 方式一.GET ...
- Java开发桌面程序学习(11)——javafx 鼠标点击,右击,双击
javafx 鼠标事件 给某个控件设置鼠标点击监听器,三个条件分别判断为单击,右击还是双击 单击判断 event.getButton()==MouseButton.PRIMARY 右击判断 event ...
- Python爬取知乎单个问题下的回答
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 努力学习的渣渣哦 PS:如有需要Python学习资料的小伙伴可以加 ...
- Ajax的快速入门
1.什么是ajax ajax是技术名词的缩写: Asynchronous:异步: JavaScript:JavaScript语言: And:和.与: XML:数据传输格式 ajax是客户端通过HTTP ...
- CSS的border-radius 设置圆弧
现象:将div变为有一定幅度的圆形.椭圆形等 方法:使用css的border-radius 属性进行设置CSS3 border-radius 属性:向 div 元素添加圆角边框: 一:首先建立一个di ...
- SAP MM 有了采购订单历史的PO行项目里的采购附加费不允许再改了?
SAP MM 有了采购订单历史的PO行项目里的采购附加费不允许再改了? 正确答案是: 不允许,这是SAP标准逻辑. 那么问题来了!今日收到业务人员报说采购订单4300013979,完成了收货和IV, ...
- Saltstack_使用指南10_配置管理-状态模块
1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...
- mysql设置用户密码规则
一.查看密码规则 SHOW VARIABLES LIKE 'validate_password%'; 二.规则显示介绍 | Variable_name | Value | +------------- ...