Nginx集群的故障迁移

首先可以肯定的是Nginx在一个tomcat节点完全宕机的情况下,是不会再去把请求分发过去的。

它是由upstream中server的参数决定的

server address [weight=number] [max_fails=number] [fail_timeout=time] [slow_start=time] [backup] [down];

其中max_fails默认为1,fail_timeout=time默认为10s,这两个参数配置起来使用.含义是:在fail_timeout的时间内,nignx与upstream中某个server的连接尝试失败了max_fails次,则nginx会认为该server已经失效。在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。
但是如果我写一段延迟非常长的模拟代码会如何呢

@RestController
public class TestController {

    @GetMapping("/set")
    public String home() throws InterruptedException {
        Thread.sleep(600000);
        return "Two! Yes";
    }
}

其配置端口号为9090

配合一段正常代码

@RestController
public class TestController {

    @GetMapping("/set")
    public String home() {
        return "One!"+new Date();
    }
}

配置端口号为8080

对Nginx的配置为

upstream web_services {
        server       172.18.98.46:9090;
        server       172.18.98.47:8080;
    }

server {
        listen       8090;
        server_name  localhost;

        location ~ /set {
           proxy_pass http://web_services;
        }
        error_page  404              /;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

此时我们访问8090端口,Nginx的负载到8080端口时

One!Fri Feb 15 18:10:26 CST 2019

但是当负载到9090端口时,会无响应。

此时我们需要在nginx增加配置

server {
        listen       8090;
        server_name  localhost;

        location ~ /set {
           proxy_pass http://web_services;
           proxy_connect_timeout       2s;
           proxy_read_timeout          3s;
           proxy_send_timeout          5s;
        }
        error_page  404              /;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

其中proxy_read_timeout 3s指的是当响应超过3秒后,会重新负载到新的Server上去,在我们这里就是9090无法响应,3秒后会负载到8080端口上去,并默认在10秒后才会重新访问9090端口,以此循环。当然这些时间可以根据实际情况自由搭配的。

转载于:https://my.oschina.net/u/3768341/blog/3010684

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值