Nginx HttpUpstreamModule 서버 그룹 구성 및 로드 밸런싱

서버 그룹 정의 및 사용 예시

ngx_http_upstream_module 모듈은 proxy_pass, fastcgi_pass, memcached_pass 지시문에서 참조할 수 있는 서버 집합을 정의하는 데 사용됩니다.

upstream backend {
    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;

    server backup1.example.com:8080   backup;
    server backup2.example.com:8080   backup;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

동적 서버 그룹 구성은 상용 버전에서만 지원됩니다.

동적 구성 예제

upstream appservers {
    zone appservers 64k;

    server appserv1.example.com      weight=5;
    server appserv2.example.com:8080 fail_timeout=5s slow_start=30s;
    server 192.0.2.1                 max_fails=3;

    server reserve1.example.com:8080 backup;
    server reserve2.example.com:8080 backup;
}

server {
    location / {
        proxy_pass http://appservers;
        health_check;
    }

    location /upstream_conf {
        upstream_conf;
        allow 127.0.0.1;
        deny all;
    }
}

핵심 지시어 설명

upstream

语法: upstream name { ... }
기본값: 없음
컨텍스트: http

예시:

upstream backend {
    server backend1.example.com weight=5;
    server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;
}

기본적으로 요청은 서버들의 가중치에 따라 순환 방식으로 분배됩니다. 위 예시에서는 총 7개의 요청 중 5개는 backend1.example.com로, 나머지 각각 1개씩 두 번째와 세 번째 서버로 전달됩니다. 만약 특정 서버에서 요청 실패가 발생하면 다음 서버로 자동 전달되며, 모든 서버를 한 번씩 시도한 후에도 실패하면 마지막 시도 결과를 클라이언트에게 반환합니다.

server

구문: server address [parameters];
기본값: 없음
컨텍스트: upstream

서버 주소와 추가 옵션을 지정합니다. 주소 형식은 도메인 이름, IP 주소(포트 포함 가능), 또는 unix: 접두사가 붙은 유닉스 소켓이 될 수 있습니다. 포트 미지정 시 기본값은 80입니다. 하나의 도메인이 여러 IP로 해석되는 경우, 해당 도메인은 다수의 서버로 간주됩니다.

가능한 파라미터 목록

  • weight=number
    서버의 우선순위를 설정합니다. 기본값은 1이며, 값이 클수록 더 많은 요청을 처리합니다.
  • max_fails=number
    최대 실패 횟수를 정의합니다. 기본값은 1입니다. 0으로 설정하면 실패 카운트 기능이 비활성화됩니다. 이 값은 proxy_next_upstream, fastcgi_next_upstream, memcached_next_upstream 등에서도 영향을 받습니다.
  • fail_timeout=time
    다음과 같은 조건에서 서버를 일시적으로 비활성 상태로 표시합니다: - 최대 실패 횟수 초과 시 - 요청 타임아웃 발생 시 기본값은 10초입니다.
  • slow_start=time
    서버가 불량 상태에서 회복되거나 재가용 상태로 전환될 때, 가중치를 0에서 원래 값까지 점차 복원하는 데 걸리는 시간을 설정합니다. 기본값은 1초이며, 이는 비활성 상태로 간주됩니다. (상용 버전 전용)
  • backup
    해당 서버를 보조 서버로 지정합니다. 메인 서버들이 모두 사용 불가능할 경우에만 요청이 전달됩니다.
  • down
    서버를 영구적으로 비활성 상태로 표시합니다. 주로 ip_hash 지시어와 함께 사용됩니다.

예시:

upstream backend {
    server backend1.example.com     weight=5;
    server 127.0.0.1:8080           max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;

    server backup1.example.com:8080 backup;
}
주의: 서버 그룹 내에 단일 서버만 존재할 경우, max_fails, fail_timeout, slow_start 파라미터는 무시되며, 해당 서버는 절대 비활성 상태로 표시되지 않습니다.

zone

구문: zone name size;
기본값: 없음
컨텍스트: upstream

업스트림 그룹의 공유 메모리 영역을 정의합니다. 이 설정은 동적 구성 및 실시간 모니터링 기능을 활성화하는 데 필수적이며, 크기는 바이트 단위로 지정합니다. 예: zone appservers 64k; 는 64KB의 메모리 영역을 할당합니다.

태그: nginx upstream Load Balancing server group proxy_pass

7월 30일 09:17에 게시됨