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

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

    关注

    13

    文章

    10093

    浏览量

    90886
  • PHP
    PHP
    +关注

    关注

    0

    文章

    460

    浏览量

    28388
  • 负载均衡
    +关注

    关注

    0

    文章

    128

    浏览量

    12814

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

    Nginx负载均衡策略选择指南

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

    Nginx高并发优化方案

    作为一名在生产环境中摸爬滚打多年的运维工程师,我见过太多因为Nginx配置不当导致的性能瓶颈。今天分享一套完整的Nginx高并发优化方案,帮助你的系统从10万QPS突破到百万级别。
    的头像 发表于 08-13 15:51 671次阅读

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

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

    一文详解Nginx负载均衡

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

    什么是 K8S,如何使用 K8S

    /nginx-deployment --port=80 --type=ClusterIP。 常见场景 微服务架构:通过 Deployment 部署多个服务,使用 Service 实现内部负载均衡。 自动化运维
    发表于 06-25 06:45

    Nginx配置终极指南

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

    Nginx缓存配置详解

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

    Nginx服务优化教程

    隐藏Nginx版本号,避免安全漏洞泄漏:修改配置文件法;修改源码法
    的头像 发表于 03-12 15:57 802次阅读
    <b class='flag-5'>Nginx</b>服务优化教程

    常见网络负载均衡的几种方式

    常见网络负载均衡的几种方式包括:DNS负载均衡、反向代理负载均衡、IP
    的头像 发表于 03-06 11:14 1087次阅读

    如何避免直流负载箱的常见操作误区

    以下是一些避免直流负载箱常见操作误区的方法: 选型与安装 正确选型:根据实际需求,准确选择直流负载箱的额定电压、额定电流等参数,使其与被测设备相匹配,避免因参数不匹配导致过载或欠载现象。 合理安装
    发表于 02-13 13:49

    常见的lvs负载均衡算法

    常见的lvs负载均衡算法包括轮询(RR)、加权轮询(WRR)、最小连接(LC)、加权最小连接(WLC)、基于局部性的最少链接(LBLC)、带复制的LBLC(LBLCR)、目标地址散列(DH)、源地址
    的头像 发表于 12-12 13:50 932次阅读

    Nginx代理转发实战:零基础掌握服务器流量分发技巧

    Nginx 是最常用的反向代理工具之一,一个指令 proxy_pass搞定反向代理,对于接口代理、负载均衡很是实用,但 proxy_pass指令后面的参数很有讲究,通常一个“/”都可能引发一个血案
    的头像 发表于 12-09 12:28 2716次阅读