0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解Nginx负载均衡配置误区

Linux爱好者 来源:51cto 作者:mb5ff980f81f3d8 2021-05-13 14:36 次阅读

之前有很多朋友问关于Nginx的upstream模块中max_fails及fail_timeout,这两个指令,分别是配置关于负载均衡过程中,对于上游(后端)服务器的失败尝试次数和不可用时间,很多人不是很理解这两个参数到底怎么用,以及具体的含义

先看官网文档中的描述

3ea34db0-b3a2-11eb-bf61-12bb97331649.png

官网文档中解释max_fails是指在fail_timeout配置的时间内,服务器通信失败的次数,默认为1,即在fail_timeout时间内,1次请求失败即不再尝试,将请求根据hash规则,转发到下一个上游服务

fail_timeout有两种含义:

当已经确认上游服务不可用时,是指与上游服务器通信失败次数的时间

服务器不可用的时间段

默认是10s

文字不是很好理解,搭建个实验环境,环境如下:

Nginx

PHP-FPM(x2)

nginx通过fast-cgi将php请求转发到PHP-FPM,这里PHP-FPM服务即上游服务,设置upstream,负载PHP-FPM

3eb3feda-b3a2-11eb-bf61-12bb97331649.png

3ec5be9a-b3a2-11eb-bf61-12bb97331649.png

upstream按照默认配置,即max_fails=1,fail_timeout=10

现在通过tailf分别监听两个PHP-FPM日志

3ed58e06-b3a2-11eb-bf61-12bb97331649.png

请求4次,因为是默认轮询的,所以可以看时间,轮询将请求分发到两个PHP-FPM上游

可以从上面的日志中看到,按照轮询规则,下次请求应该落到PHP-FPM2上面,接着,关掉PHP-FPM1,继续请求

3ee02596-b3a2-11eb-bf61-12bb97331649.png

可以看到,PHP-FPM1肯定是不响应了,PHP-FPM2正常响应,接着看下Nginx日志

3ef35aa8-b3a2-11eb-bf61-12bb97331649.png

可以看到,关掉PHP-FPM1后,发起的请求,本来第二次请求(1758)应该分发到PHP-FPM1的,然后从Nginx错误日志可以看到,连接PHP-FPM1失败,这里只做了一次失败尝试,然后Nginx将请求转发到PHP-FPM2处理了

接着将max_fails设置为2,继续上面的请求

3efd6d7c-b3a2-11eb-bf61-12bb97331649.png

开启PHP-FPM1,继续请求,两个负载轮询转发请求

3f0c7650-b3a2-11eb-bf61-12bb97331649.png

接着继续关掉PHP-FPM1,连续发起多次请求,查看日志

3f1b1214-b3a2-11eb-bf61-12bb97331649.png

所有请求都在PHP-FPM2上,看Nginx错误日志

3f325b40-b3a2-11eb-bf61-12bb97331649.png

两次轮询到PHP-FPM1的时候,失败,之后不会再将请求分发到PHP-FPM1上游服务

接着,不开启PHP-FPM1,继续发起多次请求,由于默认的fail_timeout=10,所以在上面的失败检测10s之后再次发起请求,查看日志

3f449d0a-b3a2-11eb-bf61-12bb97331649.png

继续分发到PHP-FPM2,接着看Nginx错误日志

3f602872-b3a2-11eb-bf61-12bb97331649.png

可以看到,过了fail_timeout的时间后,Ngxin会再次将请求发往FPM-PHP1进行尝试,尝试2次失败后,在fail_timeout时间内,不会再将请求分发,

这里有几个误区:

Nginx记录了连接上游失败,这个请求就返回错误请求,或这个请求丢失没处理

这个理解是错误的,Nginx只是记录了失败的请求到日志,并将这个请求又转发到了可用的其他上游服务,知道所有上游都不可用时,才会返回错误状态

max_fails是指连续请求失败的次数

max_fails是在fail_timeout指定的时间内的失败次数,请求还是按照配置的负载均衡算法来走,并不是第一次请求失败之后,继续将这个请求在尝试一次,达到失败次数之后,标记为不可用

fail_timeout越短越好

当访问量大的时候,fail_timeout设置太短,会导致不断的尝试与不可用上游的连接,耗费大量的tcp资源进行连接

fail_timeout越长越好

当访问量大的时候,fail_timeout设置太长,会导致负载不均衡,有可能会击穿某个上游后端,达不到负载的效果

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8116

    浏览量

    82502
  • PHP
    PHP
    +关注

    关注

    0

    文章

    452

    浏览量

    26452
  • 负载均衡
    +关注

    关注

    0

    文章

    97

    浏览量

    12186

原文标题:Nginx负载均衡配置误区

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何确定适合的负载均衡比例

    路由器的负载均衡是一种应用于网络中的技术,它可以平衡网络流量的分配,提高网络的性能和稳定性。在配置路由器的负载均衡时,选择合适的
    的头像 发表于 12-15 10:36 491次阅读

    路由器负载均衡怎么配置

    路由器负载均衡是一种重要的网络技术,它能够将多个网络连接的流量分配到多个路由器上,以提高网络的性能和稳定性。本文将详细介绍路由器负载均衡配置
    的头像 发表于 12-13 11:17 1246次阅读

    Nginx配置文件如何设置头信息保留真实IP不丢失

    Nginx 配置中设置头信息以保留客户端的真实 IP 地址通常是在使用反向代理的场景中需要的。当 Nginx 作为反向代理时,客户端的真实 IP 地址可能会在转发请求时丢失,因为到达应用服务器
    的头像 发表于 11-30 10:54 913次阅读

    Nginx目录结构有哪些

    什么是NginxNginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx
    的头像 发表于 11-11 11:27 380次阅读
    <b class='flag-5'>Nginx</b>目录结构有哪些

    Nginx常用配置与命令

    对于前端来说 Node.js 并不陌生, Nginx 和 Node.js 的很多理念类似, HTTP 服务器、事件驱动、异步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以实现,但 Nginx 和 Node.j
    发表于 10-18 10:04 160次阅读
    <b class='flag-5'>Nginx</b>常用<b class='flag-5'>配置</b>与命令

    Nginx的特点和作用 Nginx常用命令和核心配置

    热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。
    的头像 发表于 09-01 09:53 359次阅读
    <b class='flag-5'>Nginx</b>的特点和作用 <b class='flag-5'>Nginx</b>常用命令和核心<b class='flag-5'>配置</b>

    负载均衡的策略有哪些? 负载均衡的三种方式?

    负载均衡的策略有哪些? 负载均衡的策略有如下: 轮询(Round Robin):按照请求的顺序轮流分配到不同的服务器。 权重(Weighted):给不同的服务器分配不同的权重,根据权重
    的头像 发表于 07-25 14:13 1220次阅读

    SDWAN和负载均衡的关系

    SDWAN和负载均衡的关系
    的头像 发表于 07-21 14:28 364次阅读

    搭建Keepalived+Lvs+Nginx高可用集群负载均衡

      一、Nginx安装 二、配置反向代理 三、配置负载均衡 四、upstream指令参数 五、配置
    的头像 发表于 06-25 15:39 1804次阅读
    搭建Keepalived+Lvs+<b class='flag-5'>Nginx</b>高可用集群<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>

    负载均衡的工作原理

    负载均衡是在多个物理服务器之间智能分配流量以最大化资源利用率的过程。换句话说,在两台或多台计算机/服务器之间共享计算工作负载的过程就是负载均衡
    的头像 发表于 06-16 17:14 1320次阅读

    负载均衡是如何工作的?

    负载均衡是在多个物理服务器之间智能分配流量以最大化资源利用率的过程。换句话说,在两台或多台计算机/服务器之间共享计算工作负载的过程就是负载均衡
    的头像 发表于 06-15 17:26 467次阅读

    高性能负载均衡的分类和算法

    高性能集群之所以复杂,主要原因是增加了任务分配器,以及为任务选择合适的分配算法。负载均衡器就是任务分配器,负载均衡这个名称已经成为事实标准,但负载
    的头像 发表于 05-31 09:56 464次阅读
    高性能<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>的分类和算法

    Nginx四层负载均衡基本概诉

    四层负载均衡基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层指的是应用层,它的封装在四层基础之上,无论四层还是七层都指的是OSI网络模型。
    的头像 发表于 05-22 17:48 1438次阅读
    <b class='flag-5'>Nginx</b>四层<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>基本概诉

    简述SpringCloud Ribbon中的7种负载均衡策略

    负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角
    的头像 发表于 05-11 17:32 502次阅读
    简述SpringCloud Ribbon中的7种<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>策略

    Nginx常用的配置和基本功能讲解

    Nginx 已经广泛应用于 J-one 和 Jdos 的环境部署上,本文对 Nginx 的常用的配置和基本功能进行讲解,适合 Nginx 入门学习。
    的头像 发表于 05-04 10:25 414次阅读