工作中经常会用到nginx负载均衡这一块,下面对nginx负载均衡策略做个总结。本人在工作中最常用到的负载均衡策略是轮询策略。


  在一般情况下,Web中间件最大的作用就是负责对请求进行分发,也就是我们常说的起到负载均衡的作用。当然负载均衡只是nginx的作用之一,nginx常见的负载均策略一般包括轮询、指定权重(weight)、ip_hash、least conn、fair、url_hash 等六种。其中默认执行的策略为轮询,fair和url_hash属于第三方策略,这两种策略不是nginx自带支持的策略,需要安装第三方的插件来辅助支持。在不同的场景下,每一种策略的选择对系统的整体性能都影响非常大,一般建议根据实际场景和服务器配置来选择对应的负载均衡策略。

1. 轮询策略:

  Nginx负载均衡通过配置upstream来实现请求转发。如果在upstream中没有指定其他任何的策略时,Nginx会自动执行轮询转发策略,upstream中配置每台服务器的权重都一样,会按照顺序依次转发。如下所示就是一个简单的 upstream 配置,由于配置了 192.168.1.14和192.168.1.15两台服务器,所以请求会按照接收到的顺序,依次轮询地转发给192.168.1.14和192.168.1.15两台服务器进行执行。Nginx能自动感知需要转发到的后端服务器是否挂掉,如果挂掉,Nginx 会自动将那台挂掉的服务器从upstream中剔除。

upstream applicationServer{server 192.168.1.14;server 192.168.1.15;}

 2. 指定权重(weight):

  通过在upstream 配置中给相应的服务器指定weight权重参数来实现按照权重分发请求。weight参数值的大小和请求转发比率成正比,该配置一般用于后端应用程序服务器硬件配置差异大而导致承受的访问压力不一样的情况下,配置示例如下:

upstream applicationServer {
server 192.168.1.14 weight=8;
server 192.160.1.15 weight=10;
}

3. ip_hash:

  每个请求按原始访问ip的hash结果来进行请求转发。由于同一个ip的hash 值肯定是不变的,这样每个固定客户端就会只访问一个后端应用程序服务器。此种配置一般可以用来解决多个应用程序服务器的session复制和同步的问题,因为同一个ip的请求都转发到了同一台服务器的应用程序上了,所以也就不会有session不同步的问题了,但是这可能会导致后端应用服务器的负载不均的情况,因为在这种策略下后端应用服务器收到的请求数肯定是很难一样多。示例配置如下:

upstream applicationServer {
ip_hash;
server 192.168.1.14;
server 192.168.1.15;
}

4. least_conn:

  通过在upstream配置中增加least_conn配置后,Nginx在接收到请求后会把请求转发给连接数较少的后端应用程序服务器,前面讲到的轮询算法是把请求平均地转发给各个后端,使它们的负载大致相同,但是有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。示例配置如下:

upstream applicationServer {
least conn;
server 192.168.1.14;
server 192.168.1.15;
}

5. fair:

  fair 属于第三方策略,即不是 Nginx 本身自带的策略,需要安装对应的第三方插件。fair 是按照服务器端的响应时间来分配请求给后端应用程序服务器,响应时间短的优先分配。示例配置如下:

upstream applicationServer {
server 192.168.1.14;
server 192.168.1.15;
fair;
}

6. url_hash:

  url_hash 同样属于第三方策略,也是需要安装对应的第三方插件, url_hash是按照访问的目标url的hash值来分配请求,使同一个url的请求转发到同一个后端应用程序服务器,请求的分发策略和ip_hash 有点类似。在进行性能调优时,主要是适用对缓存命中进行调优,同一个资源(也就是同一个目标url地址多次请求,可能会到达不同的后端应用程序服务器上,会导致不必要的多次下载使用url_hash后,可以使得同一个目标url(也就是同一个资源请求)会到达同一台后端应用程序服务器,这样可以在服务端进行资源缓存,再次收到请求后,就可以直接从缓存中读取了。示例配置如下:

upstream applicationServer {
server 192.168.1.14;
server 192.168.1.15;
hash $request uri;
}

参考资料:《软件性能测试、分析与调优实践之路》(张永清 著)

Nginx负载均衡策略的介绍与调优的更多相关文章

  1. nginx 负载均衡策略

    nginx 负载均衡策略   1. 轮询轮询方式是nginx负载均衡的默认策略,根据每个server的权重值来轮流发送请求,例如:upstream backend {server backend1.e ...

  2. 解析 Nginx 负载均衡策略

    转载:https://www.cnblogs.com/wpjamer/articles/6443332.html 1 前言 随着网站负载的不断增加,负载均衡(load balance)已不是陌生话题. ...

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

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

  4. Nginx负载均衡策略

    目前nginx负载均衡支持的5种方式的分配 1. 轮询 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. upstream backserver { server ...

  5. 负载均衡(四)Nginx负载均衡策略

    一.Nginx的作用 1.反向代理 代理:转发请求的服务器,分代理和反向代理.代理一般指的是我们使用的DNS,反向代理是放在服务端的大家通常用Nginx来解决.实际应用中,由于服务端处于一个中心位置, ...

  6. nginx负载均衡策略url_hash配置方法

    参考文章: https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/ 根据路径,进行一致性hash,具体的配 ...

  7. nginx负载均衡六种策略

    Nginx服务器之负载均衡策略(6种)   一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的 ...

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

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

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

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

随机推荐

  1. 【Java】学习路径48-线程锁ReentrantLock

    与上一章学习的线程锁synchronized类似,都是为了解决线程安全的问题. 使用方法: 新建一个ReentrantLock对象.(如果使用Thread多线程,则需要声明static静态) 然后在需 ...

  2. ELK技术-Logstash

    1.背景 1.1 简介 Logstash 是一个功能强大的工具,可与各种部署集成. 它提供了大量插件,可帮助业务做解析,丰富,转换和缓冲来自各种来源的数据. Logstash 是一个数据流引擎 它是用 ...

  3. day29--Java泛型02

    Java泛型02 5.自定义泛型 5.1自定义泛型类 基本语法: class 类名<T,R...>{//-表示可以有多个泛型 成员 } 注意细节: 普通成员可以使用泛型(属性.方法) 使用 ...

  4. 第五十一篇:webpack中的loader(二) --less-loader

    好家伙 先扩充一下知识点: 什么是.less文件? 作为一名前端开发的同学,很多时候我们都无法避免地要去写大量的 CSS 代码, 而且耗费的时间还不少,所以学习一种能够提升开发效率的 CSS 预处理器 ...

  5. 再谈NULL和nullptr(C++11)区别

    在谈NULL和nullptr区别之前,我们先看段代码: #include "stdafx.h" #include <iostream> using namespace ...

  6. 从源码中理解Spring Boot自动装配原理

    个人博客:槿苏的知识铺 一.什么是自动装配 SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot在启动时会扫描外部引用jar包中的META-INF/spring.factori ...

  7. 给 SSH 启用二次身份验证

    转载自:https://mp.weixin.qq.com/s/ssuhFbfaHxxzGmLg6Y2MjA 目前来说,二次验证(这里就不做过多解释了)是比较常用的安全手段,通过设置二次验证(谷歌或其他 ...

  8. echarts 改变个别省份的边界线颜色

    想要实现地图,首先要引入china.js文件,如果有引入就直接调过本步骤去下方看代码,没有引入可以点击下方链接自行Ctrl c + Ctrl v china.js import "../.. ...

  9. 企业MES系统与ERP信息集成要素有哪些?

    关于要讲明企业MES系统与ERP信息集成要素有哪些,得先弄清楚他们之间的关系:从工厂的管理来说,ERP在上MES在下,ERP统领企业全局包括MES,为管理层服务,重心在于企业决策,ERP对企业宏观管理 ...

  10. Qemu/Limbo/KVM镜像 最精简Linux+Wine,可运行Windows软件,内存占用不到70M,存储占用500M

    镜像特征: Alpine Edge系统 内置Wine 7.8,可运行大量Windows 软件 高度精简,内存占用仅68MB,存储占用仅500MB 完全开源 镜像说明: 用户名为root,密码为空格. ...