在服务器集群中,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种负载均衡策略的更多相关文章

  1. nginx的几种负载均衡策略

    转自https://www.cnblogs.com/1214804270hacker/p/9325150.html 一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即 ...

  2. [转帖]Nginx服务器的六种负载均衡策略详解

    Nginx服务器的六种负载均衡策略详解 咔咔侃技术 2019-09-11 17:40:12 一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独 ...

  3. 【Nginx(三)】Nginx配置集群 负载均衡策略

    Nginx配置集群 负载均衡策略 一.安装环境 1.安装JDK8的环境,配置JDK8的环境变量 2.上传jar包demo-1.jar 和 demo-2.jar demo-1.jar 监听8080端口; ...

  4. Spring Cloud Ribbon 中的 7 种负载均衡策略

    负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者--客户端负载均衡器. 服务端负载均衡器的问题是,它提供了更强的流量控制权,但 ...

  5. 【Nginx(四)】Nginx配置集群 负载均衡策略

    1.Nginx常见的负载均衡策略 ip_hash (固定分发) 简介:根据请求按访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器 场景:服务器业务分区.业务缓存.Session需要 ...

  6. Nginx的两种负载均衡搭建(Tomcat版)

    前言 Nginx的负载均衡一般采用upstream来实现,但是,还有另一种文件拓展的方式,同样可以实现负载均衡. 一.一般的负载均衡 upstream my_server { server local ...

  7. DNS负载均衡与NGINX负载均衡策略

    负载均衡是指的是把请求均匀的分摊到多个服务器上处理.一般常见的负载均衡有两种:①客户端与反向代理服务器之间的DNS负载均衡②反向代理服务器与应用服务器之间的负载均衡(这种负载均衡有很多,可以是webl ...

  8. Nginx服务器之负载均衡策略(6种)

    一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器.详情请查看我的另一篇博客. 二.Ng ...

  9. Nginx几种负载均衡算法及配置实例

    本文装载自: https://yq.aliyun.com/articles/114683 Nginx负载均衡(工作在七层"应用层")功能主要是通过upstream模块实现,Ngin ...

随机推荐

  1. RaiseException函数逆向

    书中内容: 代码逆向: 存在一个疑问:为什么在ExceptionAddress本来是错误产生代码的地址,但这里给存入一个_RaiseException的偏移地址. 答案在下个函数中:rtlRaiseE ...

  2. MySQL学习——查看数据库信息

    MySQL学习——查看数据库信息 摘要:本文主要学习了查看数据库信息的方法. 查询指定表的索引 语法 show index from 表名; 示例 mysql> show index from ...

  3. Dynamics CRM定制子网格添加按钮实例之二:调试代码、打开Web资源及获取选择的记录

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复222或者20160501可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  4. Android Studio compile error ---- enum constant INSTANT_RUN_REPLACEMENT does not

    原文:http://stackoverflow.com/questions/34868876/android-studio-compile-error-enum-constant-instant-ru ...

  5. DevOps 工程师成长日记系列一:必备知识与技能组合

    原文地址:https://medium.com/@devfire/how-to-become-a-devops-engineer-in-six-months-or-less-366097df7737 ...

  6. 微服务(入门学习五):identityServer4+ocelot+consul实现简单客户端模式

    简介 主要是采用identity Server4 和ocelot 加上consul 实现简单的客户端模式 开发准备  环境准备 下载并安装Consul具体请参考前几篇的内容 项目介绍 创建ocelot ...

  7. [b0006] Spark 2.0.1 伪分布式搭建练手

    环境: 已经安装好: hadoop 2.6.4  yarn 参考: [b0001] 伪分布式 hadoop 2.6.4 准备: spark-2.0.1-bin-hadoop2.6.tgz 下载地址:  ...

  8. [20190531]ORA-600 kokasgi1故障模拟与恢复.txt

    [20190531]ORA-600 kokasgi1故障模拟与恢复.txt --//昨天看链接:http://www.xifenfei.com/2019/05/ora-600-kokasgi1-rec ...

  9. day35作业

    1. 查询所有大于60分的学生的姓名和学号 (DISTINCT: 去重) -- 2.查询每个老师教授的课程数量 和 老师信息 -- 3. 查询学生的信息以及学生所在的班级信息 -- 4.学生中男生的个 ...

  10. 渗透测试之wep无线网络破解

    WEP 无线网络破解 WEP(无线等效协议)于 1999 年诞生,并且是用于无线网络的最古老的安全标准.在 2003 年,WEP 被 WPA 以及之后被 WPA2 取代.由于可以使用更加安全的协议,W ...