nginx 자동 장애 조치로드 밸런싱


29

로드 밸런싱을 위해 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;
    }
}

그러나이 구성을 사용하면 2 개의 백엔드 서버 중 하나가 다운 되어도 nginx는 여전히 요청을 라우팅하여 시간의 절반을 초과합니다.

다운 된 서버가 감지되면 nginx가 다른 서버로 요청을 자동 라우팅하도록하는 솔루션이 있습니까?

고맙습니다.

답변:


33

nginx가 동일한 시스템에 있기 때문에 업스트림이 다운되었음을 감지하지 못했기 때문이라고 생각합니다.

찾고있는 옵션은 proxy_next_upstreamproxy_connect_timeout 입니다.

이 시도:

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

http 500 오류가 발생하는 불완전한 Apache / PHP 설정 (PEAR 라이브러리 파일 누락)에 문제가있었습니다. proxy_next_upstream이 다른 시스템에서 재 시도했습니다. OK를 반환했습니다.
Alister Bulman

5
proxy_redirect가 해제 된 이유는 무엇입니까?
Seun Osewa

2

야, 위키를 참조하십시오 : http://wiki.nginx.org/NginxHttpUpstreamModule#server

기본적으로 장애가 감지되면 백엔드는 x 초 동안 다운 된 것으로 표시되고 다시 시도합니다. 따라서 연결이 계속 표시되면 백엔드가 사용 가능한지 계속 확인하는 nginx 일 것입니다.

그러나 업스트림 블록에서 다음 항목을 시도해야하므로 다운 엔드가 하나만 다운 된 경우 실제로 백엔드를 사용할 수 없다는 것을 알 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.