开发者社区> 问答> 正文

[@talishboy][¥20]nginx+tocmat 负载均衡时,一台tomcat宕机时的问题

在windows下作nginx负载均衡测试。

我的nginx的配置文件如下:

worker_processes 1;

events {

worker_connections  1024;

}

http {

include       mime.types;
default_type  application/octet-stream;

 upstream localhost {
   server 127.0.0.1:8080  weight=1 max_fails=2 fail_timeout=30s;
   server 127.0.0.1:8081  weight=1 max_fails=2 fail_timeout=30s;
 }
sendfile        on;
keepalive_timeout  65;
server {
    listen       80;
    server_name  localhost;
listen 80;
server_name localhost;
location /{
proxy_pass http://localhost;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

}

遇到这个问题,搜索网络, 发现网上也有人遇到同样的问题, 问题描述如下:

用了nginx负载均衡后,在两台tomcat正常运行的情况下,访问http://localhost 速度非常迅速,通过测试程序也可以看出是得到的负载均衡的效果,但是我们试验性的把其中一台tomcat(server localhost:8080)关闭后,再查看http://localhost,发现反应呈现了一半反映时间快,一半反映时间非常非常慢的情况,但是最 后都能得到正确结果。
然后我又把关闭的那吧tomcat实例恢复,此时再访问http://localhost,又可以很快的访问,负载均衡也运行正常了!郁闷!
分析怀疑可能是nginx将一半的左右的请求仍然发到了宕掉的tomcat实例上了,然后由于转发到宕掉的tomcat没有反映,nginx又重新分发到其它实例上处理。
但是这个时间也太长了。当有一台宕机后,访问http://localhost有时候会现了大概30s左右的响应时间,非常郁闷!

请问怎么样可以提高nginx对于宕掉的服务器的反应与处理,以使以后的请求到来不会还将期发送到原来宕掉的服务器。
我就平时用浏览器测试,这样在宕掉一台tomcat实例后反应也非常慢。也没有用什么大量并发测试,不清楚为什么会这样呢?

展开
收起
晓生寒 2018-12-14 16:05:25 3055 0
1 条回答
写回答
取消 提交回答
  • fralychen

    faile_timeout的值修改小一些即可

    2019-07-17 23:21:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
双十一技术揭秘 负载均衡性能优化演进之路 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载