代码之家  ›  专栏  ›  技术社区  ›  Daphoque

进程负载平衡器的负载平衡

  •  1
  • Daphoque  · 技术社区  · 8 年前

    我有一个名为LB1的负载平衡器,当它在*上收到请求时,它会在我的2个ip之间进行平衡。领域通用域名格式。我设置了一个max\u fails和一个fail\u超时,以便在一个关闭时重定向另一个上的流量:

    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在其他进程上重定向trafic,并且 它工作得很好 .

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

    似乎没有增加max_的502响应在LB1上失败,LB1仍然认为没有工作进程的服务器是活动的。

    如何在LB1上配置nginx以将502评估为失败? 如果不可能,在X.X.X.1和X.X.X.2上,我必须回复什么(503504.?)为了让我的LB1认为服务器停机?

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

    幸亏 俄克拉何马州 ,通过在LB1配置中添加以下行进行修复,以强制nginx在出错、超时或http 502、503和504时更改上游:

    proxy_next_upstream error timeout http_502 http_503 http_504;
    

    LB1形态现在是:

    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 回复  |  直到 8 年前
        1
  •  1
  •   oklas    8 年前

    指定指令,该指令声明切换到前端服务器中其他服务器的条件:

    proxy_next_upstream http_502;
    

    还要考虑相关事项:

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

    哪里 444 是nginx特殊错误代码的意思吗 close current connection