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

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

    关注

    14

    文章

    10371

    浏览量

    91768
  • PHP
    PHP
    +关注

    关注

    0

    文章

    463

    浏览量

    28817
  • 负载均衡
    +关注

    关注

    0

    文章

    135

    浏览量

    12909

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Nginx的限流机制深度解析

    很多运维工程师对 Nginx 的认知停留在"反向代理"和"负载均衡",但实际上 Nginx 在安全防护方面也相当强大——限流可以防止 CC 攻击和 API 滥用,黑白名单可以精准控制访
    的头像 发表于 04-10 16:40 690次阅读

    Nginx中Master与Worker进程的工作机制

    Nginx是现代互联网架构中最常用的Web服务器和反向代理软件。很多运维工程师使用Nginx多年,却对其核心架构一知半解,配置优化时只会机械地调整几个参数。本文从Nginx进程模型出发
    的头像 发表于 04-08 14:21 119次阅读

    Ingress Nginx性能调优配置方案

    Ingress Nginx 是 Kubernetes 集群中最主流的流量入口组件,承担着集群内所有 HTTP/HTTPS 流量的路由和转发。默认配置能应付开发测试环境,但一到生产环境扛高并发,各种
    的头像 发表于 02-24 11:50 308次阅读

    Nginx+Keepalived双主架构消除单点故障的最佳实践

    负载均衡的都知道,单台 Nginx 就是个定时炸弹。跑得再稳,硬件故障、网络抖动、内核 panic 这些事谁也说不准啥时候来。我见过太多团队,业务量不大的时候单机裸奔,等出了事故才想起来要做高可用,然后手忙脚乱地上线,结果
    的头像 发表于 02-03 11:04 670次阅读

    阿里云SLB负载均衡配置指南

    当业务流量超过单台服务器的承载能力,或者需要实现服务的高可用时,负载均衡成为必不可少的基础设施。阿里云SLB(Server Load Balancer)作为国内使用最广泛的云负载均衡
    的头像 发表于 01-30 17:47 1774次阅读

    Nginx Gzip压缩配置指南

    说起Gzip压缩,可能很多人觉得这是个老生常谈的话题。但我在这几年的运维工作中发现,真正把Gzip配置到位的网站其实不多。去年帮一个客户做性能优化,他们的网站日均带宽消耗在2TB左右,一看Nginx
    的头像 发表于 01-30 16:03 524次阅读

    Nginx反向代理和负载均衡配置实战

    负载均衡则是反向代理的进阶玩法。当一台后端服务器扛不住流量的时候,就需要多台服务器一起分担压力。Nginx负责把请求分发到不同的服务器上,这就是负载
    的头像 发表于 01-23 13:44 989次阅读

    分析负载特性时,有哪些常见的错误或误区

    分析负载特性时,很多人会因 “想当然套用经验”“忽略实际场景细节” 或 “混淆概念” 导致判断偏差,进而让报警阈值调整失效(如误报、漏报)。以下是 6 个最常见的错误 / 误区,附错误表现、危害
    的头像 发表于 10-10 17:03 1116次阅读

    逐流、逐包、Flowlet:哪种负载均衡技术更适合未来网络?

    当前主流的负载均衡技术主要包括三种类型:逐流的ECMP负载均衡、逐包负载均衡以及基于子流(Flo
    的头像 发表于 09-22 14:17 3039次阅读
    逐流、逐包、Flowlet:哪种<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>技术更适合未来网络?

    Nginx和HAProxy企业级负载均衡方案的对比

    想象一下,你的电商网站在双十一当天需要处理平时100倍的流量,单台服务器显然无法承受。这时候,负载均衡就像是一个智能的交通指挥员,将海量请求合理分配到多台后端服务器,确保系统稳定运行。
    的头像 发表于 09-18 15:01 976次阅读

    Nginx负载均衡策略选择指南

    上个月,我们的电商系统在大促期间突然出现用户购物车数据丢失的问题。经过排查发现,罪魁祸首竟然是负载均衡策略配置不当!
    的头像 发表于 08-20 16:23 1201次阅读

    如何在多显卡环境下配置OLLAMA实现GPU负载均衡

    本文将带你深入了解如何在多显卡环境下配置OLLAMA,实现GPU负载均衡,并分享生产环境中的最佳实践。无论你是刚接触GPU集群还是寻求性能优化的老手,这篇文章都能给你带来实用价值。
    的头像 发表于 07-24 14:12 5000次阅读

    一文详解Nginx负载均衡

    Nginx作为负载均衡器,通过将请求分发到多个后端服务器,以提高性能、可靠性和扩展性。支持多种负载均衡算法,如轮询、最小连接数、IP哈希等,
    的头像 发表于 06-25 14:51 1215次阅读
    一文<b class='flag-5'>详解</b><b class='flag-5'>Nginx</b><b class='flag-5'>负载</b><b class='flag-5'>均衡</b>

    Nginx配置终极指南

    更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。
    的头像 发表于 06-18 15:56 1230次阅读
    <b class='flag-5'>Nginx</b><b class='flag-5'>配置</b>终极指南

    Nginx缓存配置详解

    Nginx 是一个功能强大的 Web 服务器和反向代理服务器,它可以用于实现静态内容的缓存,缓存可以分为客户端缓存和服务端缓存。
    的头像 发表于 05-07 14:03 1391次阅读
    <b class='flag-5'>Nginx</b>缓存<b class='flag-5'>配置</b><b class='flag-5'>详解</b>