关于Nginx,我犯了一个傻逼的错误
- 2020 年 3 月 30 日
- 笔记
一开始以为后端数据库查询的问题,毕竟关联了好几张表,把SQL
拷贝出来执行了一下,然而也就几十毫秒而已,不死心又在后台打印了一下执行时间,一切正常。
又一想是不是拦截器中相关校验的问题,再一次证明我的想法是错误的。
既然后端没问题,那么问题可能会出现在代理服务器上,测试环境架设了Nginx
代理服务。检查了一下配置文件,卧槽!!!果然是自己给自己挖下的坑,之前测试负载均衡的时候启动了两个服务,如下:
upstream backserver { server 192.168.1.180:8091; server 192.168.1.190:8091; }
然鹅,测试完之后把其中一个服务给掐断了。
那么为什么是偶尔出现呢?步调还这么一致。这就要撩一下Nginx
负载均衡检查模块中的max_fails
和fail_timeout
这两个参数了,默认情况下:
max_fails=1 fail_timeout=10s
翻译过来就是:在单位周期为fail_timeout
设置的时间中达到max_fails
次数,在这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期再一次去请求,判断是否连接是否成功。如果成功,将恢复之前的轮询方式,如果不可用将在下一个周期再试一次。
把掐断的服务地址注释掉,重启下Nginx
就可以了。
切记,生产中一定要搭配服务运行监控通知套件,以便第一时间发现并处理问题。