Nginx实战:故障处理_后端服务正常,nginx偶发502(Bad Gateway)

news2024/11/28 3:42:32

一、故障场景

用户访问服务偶发报错【502 Bad Gateway】,但是服务后端正常运行。架构如下:

偶发502
转发
偶发502
用户
Nginx
B服务
A服务

二、问题线索

服务正常,但是nginx报错【502 Bad Gateway】,这代表nginx认为后端服务都不存活

首先会想到网络问题,是不是网络抖动导致的,检查没有问题,那么只能看看nginx的日志了

在nginx的日志中看到三个报错:

  1. 502 Bad Gateway (各个接口都有,不固定)
  2. 504 upstream teime out (单个接口报错,都是接口A)
  3. no live upstream while connect (各个接口都有,不固定)

三、问题原因

看到nginx的日志之后,就可以明确定位到原因了,是nginx的健康检查机制导致。

3.1、nginx的健康检查介绍

nginx的upstream有默认的健康检查机制(max_fails和fail_timeout)

这个健康检查机制的逻辑是:
在fail_timeout时间段之内,如果该节点累计异常次数大于或等于max_fails,那么这个节点就会被摘除fail_timeout时间,fail_timeout时间之后该实例会被重新加入,并且该节点的异常次数重置为0,重新开始进行新一轮的检查

fail_timeout默认值为10S,max_fails默认值为1。

【举个例子】

后端两个实例,1.1.1.1 实例卡死(进程在,无响应,访问到会报504),2.2.2.2正常

Nginx配置如下

	upstream test {
	        server 1.1.1.1:8081 weight=1;
	        server 2.2.2.2:8081 weight=1;
	}

那么用户第一次访问,如果访问到1.1.1.1实例,实例无响应,超过超时时间,报错504,1.1.1.1的fail次数达到1次(max_fails默认值为1)

1.1.1.1实例被剔除10秒(fail_timeout默认值为10秒)

这10秒内存访问都会落在正常的2.2.2.2实例上,访问正常

直到10秒之后,异常实例1.1.1.1被重新加入转发,用户访问到之后再次报错504,1.1.1.1再次被剔除10秒,周而复始

这就会出现一个很规律的异常现象,每10秒就会出现一次504访问超时(访问到1.1.1.1异常实例无响应,超时报错)

3.2、本次异常原因梳理

本次异常是几个因素配到一起导致出现的异常现象

  1. 一个高频接口响应时间长,超过60秒
  2. fail_timeout是默认值10S,max_fails是默认值1
  3. proxy_read_timeout后端响应超时时间设置的是60S

有一个接口响应时间大部分都大于proxy_read_timeout设置的后端响应超时时间60秒,每次请求到这个接口,这个接口转发到后端实例,这个后端实例在proxy_read_timeout时间内没有返回,nginx直接返回504,并且记录失败次数为1,因为达到最大失败次数1(max_fails默认值为1),所以将该后端直接剔除10秒(fail_timeout默认值为10秒)

而这个接口被调用频繁,有几率出现短暂时间,所有实例都被nginx剔除的情况,如下图所示:

在这里插入图片描述

所以会出现一个接口报错504(响应慢的接口),全部接口偶发502的情况(所有节点被剔除的时间段),并且nginx error日志偶发出现【no live upstream while connect 】

四、处理方法

1、根本解决还是优化那个慢接口
2、或者为耗时较长的慢接口单独设置upstream和server,这样不会影响其他接口。
3、调大proxy_read_timeout,不让慢接口出现504。
4、提高检测是否可用的频率,即调大max_fails,调小fail_timeout,使 fail_timeout/max_fails变小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1825499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于51单片机心率计设计

1 绪论1.1 国内外心率计脉搏仪系统研究现状 心率(Heart Rate)是用来描述心跳周期的专业术语,是指心脏每分钟跳动的次数, 它不仅是反映心脏功能强弱的重要标志,也是反映人体运动强度的生理指标。自公元三世纪我国最早的脉学专著《脉经》问世以来,脉学理论得到不断的发展和提…

Elasticsearch 认证模拟题 - 20

一、题目 定义一个 pipeline,并且将 earthquakes 索引的文档进行更新 pipeline 的 ID 为 earthquakes_pipeline将 magnitude_type 的字段值改为大写如果文档不包含 batch_number,增加这个字段,将数值设置为 1如果已经包含 batch_number&…

自动化测试断言

自动化判断测试用例的执行的结果是否成功,是通过判断测试得到的实际结果与预期结果是否相等决定的。这个时候就用到了断言。 检查点分为两个,一个是页面级别的检查,包括网页的标题和网址,以及是否包含某个文字 另一个检查点是页…

React入门教程:构建你的第一个React应用

在当今快速发展的Web开发领域,前端技术日新月异,而React作为一款强大的JavaScript库,已经成为众多开发者的首选。React以其组件化、高效的性能和灵活的数据处理机制闻名于世,被广泛用于构建动态且复杂的用户界面。在本教程中&…

S7-1200PLC和V90总线伺服通过工艺对象实现定位控制(标准报文3应用)

1、V90伺服驱动器控制(PN版本) V90伺服驱动器控制(PN版本)_v90 pn 最简接线-CSDN博客文章浏览阅读303次。V90伺服驱动器脉冲控制常用参数和接线,请查看下面文章链接:SMART PLC和V90伺服实现外部脉冲位置控制-CSDN博客。_v90 pn 最简接线https://rxxw-control.blog.csdn.net/…

《Windows API每日一练》4.2 设备环境

在第三章我们已经使用设备环境句柄在窗口客户区绘图了。在图形输出设备(比如屏幕或者打印机)上绘制图形,必须首先获取设备环境,即DC的句柄。当 Windows把这个句柄交给你的程序,Windows同时也就给予你使用这个设备的权限…

【机器学习】机器学习与物流科技在智能配送中的融合应用与性能优化新探索

文章目录 引言机器学习与物流科技的基本概念机器学习概述监督学习无监督学习强化学习 物流科技概述路径优化车辆调度需求预测 机器学习与物流科技的融合应用实时物流数据分析数据预处理特征工程 路径优化与优化模型训练模型评估 车辆调度与优化深度学习应用 需求预测与优化强化…

vue2 + element-ui,前端配置化表单封装(2024-06-14)

技术栈是 vue2 element-ui,主要能解决的问题就是 提高代码复用能力、提升开发效率,特别是需要开发多个大型表单系统的,配置化可以极大的提升效率,让你上班摸鱼不再是梦想!为了早点下班,我们接着往下看吧&a…

C#客户端

控件 打开链接 Socket socket; // 打开连接 private void button1_Click(object sender, EventArgs e) {button1.Enabled false;button2.Enabled true;//1 创建socket客户端对象socket new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);// 2…

基于C#开发web网页管理系统模板流程-主界面统计功能完善

点击返回目录-> 基于C#开发web网页管理系统模板流程-总集篇-CSDN博客 前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善_c#web程序设计-CSDN博客 统计功能是管理系统很常见的功能,例如仓库管理系统要统计某时间段的出入库以…

【计算机视觉】人脸算法之图像处理基础知识(四)

图像的几何变换 图像的几何变换是指在不改变图像内容的前提下对图像的像素进行空间几何变换。主要包括图像的平移变换、镜像变换、缩放和旋转等。 1.插值算法 插值通常用来放缩图像大小,在图像处理中常见的插值算法有最邻近插值法、双线性插值法、二次立方、三次…

【仪器仪表/电源专题】浮地信号的测试的四种方案对比

接地信号和浮地信号区别 所有的电压测量都是差分测量,差分测量定义为两点之间的电压差。所以会分成两类: 1.参考地电平测量(有时也叫接地信号) 2.非参考地电平测量(也称为浮地测量) 测试信号可以分为接地信…

SSM 基于大数据技术的创业推荐系统-计算机毕业设计源码02979

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作…

基于Matlab停车场车牌识别计时计费管理系统 【W2】

简介 停车场车牌识别计时计费管理系统在现代城市管理中具有重要意义。随着城市化进程的加快和车辆数量的增加,传统的人工管理停车场的方式已经难以满足效率和精确度的要求。因此引入车牌识别技术的自动化管理系统成为一种趋势和解决方案。 背景意义 提升管理效率&a…

从零开始开发知识付费APP:在线教育系统源码详解

今天,小编将从零开始,详细讲解在线教育系统的源码开发过程,帮助你打造一款功能完善的知识付费APP。 一、需求分析与规划 1.1 市场调研 在开始开发之前,首先要进行市场调研,了解当前市场上的主要竞争对手和用户需求。…

Linux笔记--权限与属性命令、查找指令、压缩命令、网络指令

权限 使用ls指令查看详细信息时 rwx分别代表读写执行三种权限,book代表book用户,对于权限来说三种权限分别代表二进制一位,即同时拥有rwx就是111,此时这个文件权限为775 改变权限为rw-rwxr-w指令 book100ask:~/Desktop$ chmod …

[Kubernetes] etcd 单机和集群部署

文章目录 1.etcd基本概念2.etcd的基本知识3.etcd优势4.etcd单机部署4.1 linux部署4.2 windows部署4.3 docker安装etcd 5.etcd集群部署 1.etcd基本概念 etcd是一个高可用的分布式键值存储系统,是CoreOS(现在隶属于Red Hat)公司开发的一个开源…

TLE9879的基于Arduino调试板SWD刷写接口

官方的Arduino评估板,如下图所示: 如果你有官方的调试器,应该不用关注本文章,如下图连接就是: 如果,您和博主一样需要自己飞线的话,如下图所示:PCB的名称在右边整理,SWD的…

代码随想录算法训练营day22|701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点、 235. 二叉搜索树的最近公共祖先

701.二叉搜索树中的插入操作 这道题较为简单,只需要通过递归找到符合要求的叶子节点,并将节点插入即可。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(…

师彼长技以助己(6)递归思维

师彼长技以助己(6)递归思维 递归思维-小游戏 思维小游戏 思维 小游戏:1 玩一个从1或2开始往上加的游戏,谁加到20就赢 如何保证一定赢呢?我们倒推,要先到20的话,谁先到17就赢,如此…