线上服务的nginx突然又开始偶发性的报错:no live upstreams while connecting to upstream
,客户端收到的都是nginx的502
.
实际上upstream服务一切正常,没有任何异常的log. 问题大概率出现在nginx和upstream的连接上,因为使用了keepalive长连接.
进一步观察出现error的时间都是触发nginx -s reload
的时间(因业务需要,要每5分钟对nginx log进行切分),所以怀疑是nginx重启导致和upstream之间的长连接断开导致的.
解决方案就是将max_fails
调大:
server 172.21.16.46:1718 max_fails=30 fail_timeout=15s;
server 172.21.16.44:1718 max_fails=30 fail_timeout=15s;
其中的原理比较复杂,这篇文章介绍的非常详细:
长连接报错问题排查过程