nginx 自动故障转移负载均衡

nginx 自动故障转移负载均衡

我使用 nginx 和 NginxHttpUpstreamModule 进行负载平衡。我的配置非常简单:

upstream lb {
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

server {
    listen  89;
    server_name localhost;

    location / {
            proxy_pass      http://lb;
            proxy_redirect  off;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

但是使用此配置,当两个后端服务器中的一个宕机时,nginx 仍然会将请求路由到它,并且有一半的时间会导致超时 :(

有没有什么解决方案可以让 nginx 在检测到服务器宕机时自动将请求路由到另一台服务器。

谢谢。

答案1

我认为这是因为 nginx 没有检测到上游已关闭,因为它们位于同一台机器上。

您正在寻找的选项是: proxy_next_upstream代理连接超时

尝试这个:

location / {
        proxy_pass              http://lb;
        proxy_redirect          off;
        proxy_next_upstream     error timeout invalid_header http_500;
        proxy_connect_timeout   2;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}

答案2

嘿,请看维基百科:http://wiki.nginx.org/NginxHttpUpstreamModule#server

基本上,如果检测到故障,后端将被标记为关闭 x 秒,然后它会重试。因此,如果您继续看到连接,则可能是 nginx 一直在检查后端是否可用。

但是,它应该尝试上游块中的下一个条目,因此如果只有一个后端关闭,您实际上不应该看到没有可用的后端。

相关内容