【Nginx】Nginx服务器之负载均衡策略(6种)

article/2025/10/28 23:29:13

一、关于Nginx的负载均衡

  在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。

二、Nginx负载均衡策略

  负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:

    #动态服务器组upstream dynamic_zuoyu {server localhost:8080;  #tomcat 7.0server localhost:8081;  #tomcat 8.0server localhost:8082;  #tomcat 8.5server localhost:8083;  #tomcat 9.0}

  在upstream模块配置完成后,要让指定的访问反向代理到服务器列表:

        #其他页面反向代理到tomcat容器location ~ .*$ {index index.jsp index.html;proxy_pass http://dynamic_zuoyu;}

  这就是最基本的负载均衡实例,但这不足以满足实际需求;目前Nginx服务器的upstream模块支持6种方式的分配:

负载均衡策略
轮询默认方式
weight权重方式
ip_hash依据ip分配方式
least_conn最少连接方式
fair(第三方)响应时间方式
url_hash(第三方)依据URL分配方式

  在这里,只详细说明Nginx自带的负载均衡策略,第三方不多描述。

1、轮询

  最基本的配置方法,上面的例子就是轮询的方式,它是upstream模块默认的负载均衡默认策略。每个请求会按时间顺序逐一分配到不同的后端服务器。

  有如下参数:

fail_timeout与max_fails结合使用。
max_fails

设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,

fail_time服务器会被认为停机的时间长度,默认为10s。
backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
down标记服务器永久停机了。

  注意:

  • 在轮询中,如果服务器down掉了,会自动剔除该服务器。
  • 缺省配置就是轮询策略。
  • 此策略适合服务器配置相当,无状态且短平快的服务使用。

2、weight

  权重方式,在轮询策略的基础上指定轮询的几率。例子如下:

    #动态服务器组upstream dynamic_zuoyu {server localhost:8080   weight=2;  #tomcat 7.0server localhost:8081;  #tomcat 8.0server localhost:8082   backup;  #tomcat 8.5server localhost:8083   max_fails=3 fail_timeout=20s;  #tomcat 9.0}

  在该例子中,weight参数用于指定轮询几率,weight的默认值为1,;weight的数值与访问比率成正比,比如Tomcat 7.0被访问的几率为其他服务器的两倍。

  注意:

  • 权重越高分配到需要处理的请求越多。
  • 此策略可以与least_conn和ip_hash结合使用。
  • 此策略比较适合服务器的硬件配置差别比较大的情况。

3、ip_hash

  指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

#动态服务器组upstream dynamic_zuoyu {ip_hash;    #保证每个访客固定访问一个后端服务器server localhost:8080   weight=2;  #tomcat 7.0server localhost:8081;  #tomcat 8.0server localhost:8082;  #tomcat 8.5server localhost:8083   max_fails=3 fail_timeout=20s;  #tomcat 9.0}

  注意:

  • 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
  • ip_hash不能与backup同时使用。
  • 此策略适合有状态服务,比如session。
  • 当有服务器需要剔除,必须手动down掉。

4、least_conn

  把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

    #动态服务器组upstream dynamic_zuoyu {least_conn;    #把请求转发给连接数较少的后端服务器server localhost:8080   weight=2;  #tomcat 7.0server localhost:8081;  #tomcat 8.0server localhost:8082 backup;  #tomcat 8.5server localhost:8083   max_fails=3 fail_timeout=20s;  #tomcat 9.0}

  注意:

  • 此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

5、第三方策略

  第三方的负载均衡策略的实现需要安装第三方插件。

①fair

  按照服务器端的响应时间来分配请求,响应时间短的优先分配。

    #动态服务器组upstream dynamic_zuoyu {server localhost:8080;  #tomcat 7.0server localhost:8081;  #tomcat 8.0server localhost:8082;  #tomcat 8.5server localhost:8083;  #tomcat 9.0fair;    #实现响应时间短的优先分配}

②url_hash

  按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。 

    #动态服务器组upstream dynamic_zuoyu {hash $request_uri;    #实现每个url定向到同一个后端服务器server localhost:8080;  #tomcat 7.0server localhost:8081;  #tomcat 8.0server localhost:8082;  #tomcat 8.5server localhost:8083;  #tomcat 9.0}

  

三、总结

  以上便是6种负载均衡策略的实现方式,其中除了轮询和轮询权重外,都是Nginx根据不同的算法实现的。在实际运用中,需要根据不同的场景选择性运用,大都是多种策略结合使用以达到实际需求。


http://chatgpt.dhexx.cn/article/PYZRhKa1.shtml

相关文章

负载均衡策略图文详解

一、「负载均衡」是什么 正如题图所示的这样,由一个独立的统一入口来收敛流量,再做二次分发的过程就是「负载均衡」,它的本质和「分布式系统」一样,是「分治」。 如果大家习惯了开车的时候用一些导航软件,我们会发现…

常用负载均衡及策略图解

文章目录 一、负载均衡二、负载均衡模型分类三、CDN负载均衡四、LVS负载均衡4.1 LVS 支持的三种模式4.1.1 DR 模式4.1.2 TUN 模式4.1.3 NAT 模式 4.2 LVS 基于 Netfilter 的框架实现 五、负载均衡策略是什么六、常用负载均衡策略图解6.1 轮询6.2 加权轮询6.3 最少连接数6.4 最快…

关于0范数、1范数和无穷范数

若 则p范数 p取0时对应0范数,p取1时对应1范数,p取无穷大时对应无穷范数 //LaTeX真的好用 【注意理解】当p取无穷大时,最终只与元素中绝对值最大的元素有关,证明如下:

向量和矩阵的 1范数、2范数

1.向量的范数:0范数,向量中非零元素的个数。 1范数,为绝对值之和。 2范数,就是通常意义上的模。 无穷范数,就是取向量的最大值。 但是向量的范数和矩阵的范数关系不大,百度了好久也没看到狠心的东西&…

向量的范数norm:1范数、2范数、无穷范数;矩阵的行范数、列范数

0范数: 向量中非零元素的个数。1范数: 为绝对值之和。2范数: 通常意义上的模。无穷范数:取向量的最大值。 转自:范数对于数学的意义?1范数、2范数、无穷范数

向量的1范数,2范数,无穷范数,KNN中的Lp距离

L-0范数:用来统计向量中非零元素的个数。 L-1范数:向量中所有元素的绝对值之和。 L-2范数:欧式距离。 L-∞范数:计算向量中的最大值。 你也可以这样理解 1-范数: ║ x ║ 1 │ x 1 │ │ x 2 │ … │ x n │ ║…

范数与模

复数的模 向量的范数 范数,在机器学习中通常用于衡量一个向量的大小,范数的定义如下: P>1 比如如下常见的范数 1-范数:║x║1│x1││x2│…│xn│ (曼哈顿距离) 2-范数&…

求矩阵的1,和2范数

1.向量的范数:0范数,向量中非零元素的个数。 1范数,为绝对值之和。 2范数,就是通常意义上的模。 无穷范数,就是取向量的最大值。 但是向量的范数和矩阵的范数关系不大,百度了好久也没看到狠心的东西&…

矩阵L2,1范数及矩阵L2,p范数的求导

常见的矩阵范数有L1,L2, ∞ 范数,F范数和引申出的L2,1范数。而在机器学习的特征选择中,利用选择矩阵的范数对选择矩阵进行约束,即是正则化技术,是一种稀疏学习。 L0 , L1 向量范数 L0 范数 L0 …

计算方法 | 范数(向量:1范数、2范数、无穷范数;矩阵:行范数、列范数)

0范数: 向量中非零元素的个数。1范数: 为绝对值之和。2范数: 通常意义上的模。无穷范数:取向量的最大值。 行范数:矩阵中每行绝对值之和的最大值列范数:矩阵中每列绝对值之和的最大值 详细研究请访问&#…

到底什么是范数?什么是0范数、1范数、2范数?区别又是什么?

其实我的专业不是数学专业,只不过在阅读paper时,我们会经常看到0范数或者1范数这些范数问题。本文就来分析看看到时什么是范数?什么是0范数、1范数、2范数?它们的区别又是什么?为了方便某些着急的people,先…

向量和矩阵的各种范数比较(1范数、2范数、无穷范数等等)

一、向量的范数 首先定义一个向量(一般用列向量表示)为: 1.1 向量的1范数 向量的1范数即:向量的各个元素的绝对值之和,上述向量a的1范数结果就是:29,MATLAB代码实现为:norm(a,1&am…

未为python配置解释器_Python环境安装,解释器配置

下载安装完Pycharm后,创建一个py文件编写代码会提示No Python interpreter configured for the project,这是提示要配置解释器,可以去官网下载安装。 从官网下载https://www.python.org/downloads/windows/ 以我的电脑为例,选择64…

Python开发环境安装及配置

提示:在Python中,一切皆为对象 文章目录 前言初始PythonPyCharm开发环境主要包括以下特点:一、Python自带编辑器IDLE使用二、Anaconda集成环境安装及使用Anaconda环境创建 三、PyCharm环境安装及使用 前言 提示:这里可以添加本文…

2021最新版Python环境安装变量配置超详细教程,看了就会

Python都更新到3.10最新版本了,赶快下载更新,新功能很香。本文图文并茂教你安装和变量配置,我保证你看了就会,小白赶快学起来。先了解下新功能有哪些。 目录 一、Python 3.10 相比 3.9 的新增特性 带圆括号的上下文管理器 更清楚的…

超详细的Python安装和环境搭建教程

目录 安装简介: 第一步,下载Python 第二步,安装Python 1.勾选 And Python 3.9 PATH 选项 2.选择自定义安装(Cutormize installation) 第三步,检查Python是否正常安装成功 安装错误 1.重复安装 2.Python不是内部命令或外部命…

Python教程一:Python环境安装(Anaconda3版本)

前言 Anaconda包括Conda、Python及大部分集成的工具包。 初学者建议直接安装Anaconda3会省去很多工具包的安装过程。 优势:若新建一个项目或者使用不同于Anoconda装的基本Python版本,Anoconda就可以实现同时多个python版本的管理。 注:安…

Linux安装Python环境

本文基于如下Linux系统版本: 1、默认情况下,Linux会自带安装Python,可以运行python --version命令查看,如图: 我们看到Linux中已经自带了Python2.7.5。再次运行python命令后就可以使用python命令窗口了(C…

详解离线安装Python库

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…