【问题标题】:Load balancing of process load balancer进程负载均衡器的负载均衡
【发布时间】:2017-12-04 21:32:02
【问题描述】:

我有一个名为 LB1 的负载平衡器,当它在 *.domain.com 上收到请求时,它会在我的 2 个 ip 之间进行平衡。我已经放了一个 max_fails 和一个 fail_timeout 以便在一个关闭时重定向另一个流量:

upstream upstreamdomain {

   least_conn;


   server X.X.X.1 max_fails=1 fail_timeout=10s;
   server X.X.X.2 max_fails=1 fail_timeout=10s;

 }


server {

    listen 80;
    server_name ~^(?<subdomain>.+)\.domain.com;



    location / {

        proxy_set_header Host $subdomain.domain.com;

        proxy_pass http://upstreamdomain;

    }

}

在每个 X.X.X.1 和 X.X.X.2 上,我的应用程序都在 Y 进程上运行,我也使用 nginx 管理进程之间的负载平衡

upstream defaultupstream {
    least_conn;


    server 127.0.0.1:9000 max_fails=1 fail_timeout=10s;
    server 127.0.0.1:9001 max_fails=1 fail_timeout=10s;
    server 127.0.0.1:9002 max_fails=1 fail_timeout=10s;
 }
server {
    listen 80;
    server_name ~^(?<subdomain>.+)\.domain.com;



    location / {
       proxy_set_header Host $subdomain.domain.com;
       proxy_pass http://defaultupstream;
    }
 }

当一个服务器崩溃时,我希望另一个 LB1 重定向流量,并且 它运行良好

当一个进程在 X.X.X.1 或 X.X.X.2 上崩溃时,我希望 nginx 在其他进程上重定向流量,并且 它运行良好

当所有进程在 X.X.X.1 或 X.X.X.2 上崩溃时,我遇到的问题是 X.X.X.1 或 X.X.X.2 上的 nginx 返回 502 服务器不可用

似乎 502 响应没有增加 LB1 上的 max_fails,LB1 仍然认为没有工作进程的服务器是存活的。

如何在 LB1 上配置 nginx 以将 502 评估为失败? 如果不可能,在 X.X.X.1 和 X.X.X.2 上,我必须回应 (503, 504 . ?) 以便我的 LB1 认为服务器已关闭?

---------------------- 编辑 ------------------

感谢oklas,通过在 LB1 配置中添加以下行来修复,以强制 nginx 在错误、超时或 http 502、503 和 504 时更改上游:

proxy_next_upstream error timeout http_502 http_503 http_504;

LB1 conf 现在是:

upstream upstreamdomain {

   least_conn;


   server X.X.X.1 max_fails=1 fail_timeout=10s;
   server X.X.X.2 max_fails=1 fail_timeout=10s;

 }


server {

    listen 80;
    server_name ~^(?<subdomain>.+)\.domain.com;



    location / {

        proxy_set_header Host $subdomain.domain.com;

        proxy_pass http://upstreamdomain;
        proxy_next_upstream error timeout http_502 http_503 http_504;
    }

}

提前致谢。 问候

【问题讨论】:

    标签: nginx


    【解决方案1】:

    指定声明条件以在前端服务器中切换到另一台服务器的指令:

    proxy_next_upstream http_502;
    

    还要考虑相关的事情:

    • 用另一个替换错误代码
    error_page 404 =200 /.nop.html;
    
    • 按条件关闭当前连接
    if (condition) {
       return 444;
    }
    

    其中444是nginx特殊错误码意思是close current connection

    【讨论】:

      最近更新 更多