NGINX 로드밸런싱

2021. 9. 28. 16:44WEB/NGINX

728x90
반응형

 

 

 

 

HTTP 로드밸런싱

OVERVIEW

여러 애플리케이션 인스턴스 간의 로드 밸런싱은 리소스 활용도를 최적화하고, 처리량을 극대화하고, 지연 시간을 줄이고, 오류 방지 구성을 보장하는 데 일반적으로 사용되는 기술이다.

로드 밸런싱스케일링에 대한 NGINX Plus 보기 NGINX 사용자가 대규모의 고가용성 웹 서비스를 구축하기 위해 사용하는 기술에 대한 심층 분석 요구에 따른 웹 세미나.

NGINX 및 NGINX Plus는 매우 효율적인 HTTP 로드 밸런싱 장치로 다양한 배포 시나리오에서 사용할 수 있음 .

Proxying HTTP Traffic to a Group of Servers

서버 그룹에 대한 HTTP 트래픽 로드 밸런싱을 시작하려면 먼저 upstream 지시문으로 그룹을 정의해야 합니다 . 지시문은 http 컨텍스트에 배치됩니다 .

그룹의 서버는 [ serverhttps://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) 지시문을 사용하여 구성됩니다 ( serverNGINX에서 실행되는 가상 서버를 정의하는 블록 과 혼동하지 마십시오). 예를 들어, 다음 구성은 backend 라는 그룹을 정의하고 세 개의 서버 구성(3개 이상의 실제 서버에서 확인할 수 있음)으로 구성됩니다.

http {
    upstream backend {
        server backend1.example.com weight=5;
        server backend2.example.com;
        server 192.0.0.1 backup;
    }
}

서버 그룹에 요청을 전달하기 위해 그룹 이름은 proxy_pass 지시문(또는 해당 프로토콜에 대한 fastcgi_pass , memcached_pass , scgi_pass , 또는 uwsgi_pass지시문)에 지정됩니다. 다음 예에서 NGINX에서 실행되는 가상 서버는 모든 요청을 백엔드 업스트림 그룹으로 전달합니다. 이전 예에서

정의:

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

다음 예는 위의 두 조각을 결합하고 백엔드 서버 그룹에 HTTP 요청을 프록시하는 방법을 보여줍니다 . 이 그룹은 3개의 서버로 구성되며, 그 중 2개는 동일한 애플리케이션의 인스턴스를 실행하고 세 번째는 백업 서버입니다. upstream블록 에 로드 밸런싱 알고리즘이 지정되지 않았기 때문에 NGINX는 기본 알고리즘인 라운드 로빈을 사용합니다.

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server 192.0.0.1 backup;
    }

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

 

 

 

로드밸런싱 방식

  1. 라운드 로빈 – 요청은 서버 가중치 를 고려 하여 서버 전체에 고르게 분산 됩니다. 이 방법은 기본적으로 사용됩니다(활성화 지시문 없음)
upstream backend {
   # no load balancing method is specified for Round Robin
   server backend1.example.com;
   server backend2.example.com;
}
  1. Least Connections – 서버 가중치를 다시 고려 하여 활성 연결 수가 가장 적은 서버로 요청이 전송 됩니다.
```
upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}
```
  1. IP HASH – 요청이 전송되는 서버는 클라이언트 IP 주소에서 결정됩니다. 이 경우 IPv4 주소의 처음 세 옥텟 또는 전체 IPv6 주소가 해시 값을 계산하는 데 사용됩니다. 이 방법은 사용할 수 없는 경우를 제외하고 동일한 주소의 요청이 동일한 서버에 도달하도록 보장합니다.
upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

로드 밸런싱 순환에서 서버 중 하나를 일시적으로 제거해야 하는 경우 클라이언트 IP 주소의 현재 해싱을 유지하기 위해 down 매개변수 로 해당 서버를 표시할 수 있습니다 . 이 서버에서 처리할 요청은 자동으로 그룹의 다음 서버로 전송됩니다.

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
}
  1. Generic Hash - 요청이 전송되는 서버는 텍스트 문자열, 변수 또는 조합이 될 수 있는 사용자 정의 키에서 결정됩니다. 예를 들어, 키는 페어링된 소스 IP 주소 및 포트이거나 다음 예와 같이 URI일 수 있습니다.
upstream backend {
    hash $request_uri consistent;
    server backend1.example.com;
    server backend2.example.com;
}

지시문에 대한 선택적 일관된 매개변수 hash는 ketama 일관된 해시 로드 밸런싱을 활성화 합니다. 요청은 사용자 정의 해시 키 값을 기반으로 모든 업스트림 서버에 고르게 분산됩니다. 업스트림 서버가 업스트림 그룹에 추가되거나 제거되면 로드 밸런싱 캐시 서버 또는 상태를 누적하는 기타 응용 프로그램의 경우 캐시 누락을 최소화하는 몇 개의 키만 다시 매핑됩니다.

  1. 최소 시간 (NGINX Plus만 해당) – 각 요청에 대해 NGINX Plus는 평균 대기 시간이 가장 낮고 활성 연결 수가 가장 적은 서버를 선택합니다. 여기서 가장 낮은 평균 대기 시간은 지시문 에 대한 다음 매개변수least_time 가 포함된 것을 기반으로 계산 됩니다.
    • header
    • – 서버로부터 첫 번째 바이트를 받는 시간
    • last_byte
    • – 서버로부터 전체 응답을 받는 시간
    • last_byte inflight
    • – 불완전한 요청을 고려하여 서버로부터 전체 응답을 받는 시간

upstream backend {
    least_time header;
    server backend1.example.com;
    server backend2.example.com;
}
  1. Random – 각 요청은 무작위로 선택된 서버로 전달됩니다. 상기 중간 two매개 변수를 지정, 우선 nginx를 임의로 두 서버 계정 서버 가중치를 고려한 후 특정 방법을 사용하여 이들 서버 중 하나를 선택하는 선택 :
    • least_conn
    • – 활성 연결의 최소 수
    • least_time=header[$upstream_header_time](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#var_upstream_header_time)
    • (NGINX Plus) – 서버로부터 응답 헤더를 수신하는 최소 평균 시간
    • least_time=last_byte[$upstream_response_time](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#var_upstream_response_time)
        upstream backend {
            random two least_time=last_byte;
            server backend1.example.com;
            server backend2.example.com;
            server backend3.example.com;
            server backend4.example.com;
        }
      
    • (NGINX Plus) – 서버로부터 전체 응답을 받는 최소 평균 시간

임의의 부하 분산 방법은 여러로드 밸런서가 백엔드의 동일한 집합에 요청을 전달하는 분산 환경에 사용되어야한다. 로드 밸런서가 모든 요청에 대한 전체 보기를 갖는 환경의 경우 라운드 로빈, 최소 연결 및 최소 시간과 같은 다른 로드 밸런싱 방법을 사용하십시오.

참고: 라운드 로빈 이외의 방법을 구성할 때 해당 지시문( hash , ip_hash , least_conn , least_time , 또는 random )을 블록 의 server지시문 목록 위에 배치하십시오 upstream {}.

HTTP Load Balancing

 

 

 

 

 

728x90
반응형

'WEB > NGINX' 카테고리의 다른 글

[Nginx] Centos7.8 nginx 소스 설치  (0) 2021.09.29
NGINX Configuration 튜닝  (0) 2021.09.28