Nginx配置不当险酿S0
时间:2022-07-24
本文章向大家介绍Nginx配置不当险酿S0,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
线上某服务前端负载均衡为Nginx,后端为Java服务,某天突然大量报服务不可用,具体错误如下:
查看后端服务压力,CPU快200了,赶紧扩容,再限流。
扩容后发现Nginx还是报错,报错仍然如上,这时重启NG就好了,但过段时间问题依旧。
查了下后端的日志,没有报错日志,响应也不慢,不过CPU还是有点高;然后分析下Nginx配置,发现Upstream配置比较可疑:
upstream xxx{
server 192.1686.1.114:6280 max_fails=1 fail_timeout=300s;
server 192.168.160.115:6280 max_fails=1 fail_timeout=300s;
server 192.168.160.116:6280 max_fails=1 fail_timeout=300s;
}
为了保证后端upstream的高可用,Nginx有错误检查机制,当后端返回错误时,可以设置达到多少次错误,则认为这个节点有问题,主动将其下线,等过多少时间后再进行尝试。
max_fails:错误多少次将其标识为下线
fail_timeout:检查周期,即多少时间内错误max_fails次,则将节点标记下线,等下一个fail_timemout周期内再检查服务是否可用。
上面的配置的意思是如果300s内只有后端返回错误超过1次,就将其标记为下线,即这300秒内不会将请求转发到这个节点,过300s后再重新发请求试试,如果再有1次以上报错,依然将其标为下线。
而这个系统的流量分布特点是准点访问量比较大:
在准点时,系统负载猛增,后端有少量报错,这时会将其中1台踢下线,然后压力转移到其它机器,然后其它机器压力也增加,也报错,直到所有后端服务全部不可用。
PS:为什么准点流量这么大,和客户端了解,客户端有个功能,每1个小时从服务端取下配置,在实现时客户端没有做分流处理,全部准点向服务器发送请求,瞬间崩溃。。。
原因找到了,就容易解决了,将上述2参数调整如下:
upstream xxx{
server 192.1686.1.114:6280 max_fails=50 fail_timeout=5s;
server 192.168.160.115:6280 max_fails=50 fail_timeout=5s;
server 192.168.160.116:6280 max_fails=50 fail_timeout=5s;
}
问题彻底解决。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 开源一个 Sliverlight 导航框架
- 【DB笔试面试852】在Oracle中,什么是静默建库?
- 从 SVN 迁移到 Git
- 在 Windows 系统上配置 Apache Git 服务器
- WMCTF2020 部分Writeup&招新帖
- 【DB宝15】生产环境中,如何利用DG的备库来异机还原一个新库?
- Java命令执行学习笔记
- SAP UI5应用DatePicker控件的设计明细
- 如何根据自己的实际需求开发属于自己的sublime text插件
- Sony Z13 系列笔记本安装 NVIDIA 官方最新版显卡驱动程序
- 通过网页进行 iOS 应用内部分发
- 【DB笔试面试853】在Oracle中,什么是手动建库?手动建库有哪些步骤?
- 使用 Intel HAXM 为 Android 模拟器加速,媲美真机
- NHibernate 使用 SqlQuery
- 谈谈 INotifyPropertyChanged 的实现