Nginx负载均衡配置误区

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

先看官网文档中的描述

官网文档中解释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

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

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

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

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

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

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

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

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

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

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

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

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

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

可以看到,过了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设置太长,会导致负载不均衡,有可能会击穿某个上游后端,达不到负载的效果

来源:https://www.icode9.com/content-3-885851.html

(0)

相关推荐

  • [Nginx] 博客园出现了502错误该怎么追查原因

    博客园从今天上午就开始报502错误 , 他的原因还不知道 , 暂时先说下我们遇到502的排查情况 最大的可能性就是后端的服务不能支撑前端过来的tcp请求连接,包括连接数据库服务时的连接数问题 1. p ...

  • Homestead开启php-fpm慢日志教程

    Homestead开启php-fpm慢日志教程

  • Linux学习10-CentOS搭建nginx负载均衡环境

    前言 当自己的web网站访问的人越来越多,一台服务器无法满足现有的业务时,此时会想到多加几台服务器来实现负载均衡. 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,怎样将同一个域名的访问分散 ...

  • 前端技术分享:Nginx负载均衡视频,基础的实战应用

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.其特点是占有内存少,并发处理能力强,以高性能低资源消耗而闻名,国内 ...

  • Nginx负载均衡算法

    负载均衡用来解决用户请求到来时如何选择 upstream server 进行处理,这里主要介绍几种负载均衡算法. 1.round-robin:轮询,默认负载均衡算法,即以轮询的方式将请求转发到上游服务 ...

  • 解析Nginx负载均衡

    摘要:对于一个大型网站来说,负载均衡是永恒的话题.随着硬件技术的迅猛发展,越来越多的负载均衡硬件设备涌现出来,如F5 BIG-IP.Citrix NetScaler.Radware等等,虽然可以解决问 ...

  • nginx负载均衡简单写法

    用nginx反向代理,把80端口的/a请求随机分到group1的站点,weight=1配置权重.

  • LNMP集群nginx负载均衡和会话保持

    前期准备 server1 172.25.70.11 server2 172.25.70.12 server1 配置jdk和tomcat tar zxf jdk-7u79-linux-x64.tar.g ...

  • Centos7上配置nginx的负载均衡

    前言 在配置nginx负载均衡前.我们需要明白几个名词的概念 注: 如果不小心忘了tomcat和nginx的启动,关闭命令,可参考写在文章最后的命令 一 重要的概念理解 1 什么是nginx呢? Ng ...

  • 实现ASP.Net Core3.1运行在DockeDesktop下并用Nginx实现负载均衡

    一.首先去https://www.docker.com/products/docker-desktop下载Windows版本的Docker Desktop并安装(需要win10专业版以上操作系统,并启 ...

  • 负载均衡设备F5配置教程

    负载均衡设备F5配置教程 一.参照以下用户申请的策略进行配置. 对外服务名 对外服务IP 对外服务端口 负载均衡方式 内部节点POOL 内部节点IP 节点服务端口 健康检查 XXXX_22_VS 10 ...