进程负载均衡器的负载均衡

时间:2017-12-04 10:42:55

标签: nginx

我有一个名为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以使eval 502失败? 如果不可能的话,在X.X.X.1和X.X.X.2上,为了让我的LB1认为服务器已关闭,我必须回复(503,504。?)?

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

感谢 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;
    }

}

提前致谢。 此致

1 个答案:

答案 0 :(得分:1)

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

proxy_next_upstream http_502;

还要考虑相关的事情:

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

其中444是nginx,特殊错误代码表示close current connection