Nginx出现no live upstream问题
有时候我们查看Nginx的错误日志,会发现有这么一种错误:
2019/04/13 20:41:03 [error] 18904#0: *214818926 no live upstreams while connecting to upstream, client: 47.111.193.40, server: xxx.xxx.cn, request: “GET /api/xxx HTTP/1.1”, upstream: “http://service/api/xxx", host: “xxx.xxx.cn”
里面的信息都是请求相关的内容,我们抓住关键点:1
no live upstreams
nginx的upstream,是用于将请求分配到上游(被代理)服务,我们可以指定请求分配的策略,重试机制等等。
假设我们的upstream是这样配置的:
1 | upstream a-service { |
服务a-service
拥有3个上游服务,这里没做其他配置,那么默认nginx会将请求轮询到3个服务去。
现在由于种种原因,172.16.x.1
出现了问题,nginx发现请求失败后,会尝试下一个upstream也就是172.16.x.2
,并且把172.16.x.1
暂时标记为不可用状态,这样的话可以让调用方的请求正确使用。
然而当172.16.x.2
也不可用呢,nginx会尝试172.16.x.3
,如果172.16.x.3
也不可用,意味着upstream a-service整体是不可用的
no live upstreams
便是这个时候报出来的错误。
但你可能可以看到,错误报出来后,服务还是正常可用啊,是因为nginx报出错误后,会将upstream下的几个上游服务失败次数清0,然后重新开始服务,假设这个时候172.16.x.1
已经恢复过来了,服务就是可用的。
- 本文链接:https://keepmoving.ren/nginx/no-live-upstream/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!