NGINX를 사용한 API Gateway와 L7 Load Balancer 설정

agnusdei·2023년 10월 31일
0

1. 부하 분산 방법

NGINX API Gateway는 여러 부하 분산 메커니즘을 지원합니다. 이러한 메커니즘은 트래픽을 효과적으로 분산하여 리소스 사용량을 최적화하고 처리량을 극대화하며 지연을 감소시키는 데 사용됩니다. 주요 부하 분산 방법은 다음과 같습니다:

  • 라운드 로빈 (Round Robin): 요청을 순환 방식으로 서버에 분산합니다.

  • 최소 연결 (Least Connections): 가장 적은 활성 연결을 가진 서버에 새로운 요청을 할당합니다.

  • IP 해시 (IP Hash): 클라이언트 IP 주소를 해싱하여 해당 해시를 기반으로 서버를 선택합니다.

2. 기본 부하 분산 구성

NGINX API Gateway를 사용한 가장 간단한 부하 분산 구성은 다음과 같습니다:

http {
    upstream api_app1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }
 
    server {
        listen 80;
 
        location / {
            proxy_pass http://api_app1;
        }
    }
}

이 예에서는 srv1, srv2, srv3에서 실행되는 동일한 애플리케이션의 3개 인스턴스를 가정합니다. 이 설정은 부하 분산 방법을 명시적으로 설정하지 않으면 순환 방식(Round Robin)으로 동작합니다. 모든 요청은 api_app1 서버 그룹으로 프록시되며, NGINX는 HTTP 부하 분산을 통해 요청을 분배합니다.

또한, NGINX에서는 HTTP 외에도 HTTPS, FastCGI, uwsgi, SCGI, Memcached, gRPC에 대한 부하 분산을 구성할 수 있습니다.

3. 최소 연결 부하 분산

최소 연결 부하 분산을 사용하면 서버의 활성 연결 수가 가장 적은 서버에 새로운 요청을 할당합니다. 이를 통해 애플리케이션 서버에 부하를 더 균등하게 분산할 수 있습니다. 최소 연결 부하 분산은 least_conn 명령을 서버 그룹 구성에서 사용하여 활성 연결 수를 최소화합니다.

upstream api_app1 {
    least_conn;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

4. 세션 지속성

순환 또는 최소 연결 부하 분산에서는 클라이언트의 요청이 항상 다른 서버로 전달될 수 있습니다. 그러나 일부 경우에는 특정 클라이언트가 항상 동일한 서버에 연결해야 할 수도 있습니다. 이를 위해 ip-해시 부하 분산 메커니즘을 사용할 수 있습니다.

ip-해시 부하 분산은 클라이언트의 IP 주소를 해시 키로 사용하여 클라이언트의 요청에 대한 서버를 선택합니다. 이로써 동일한 클라이언트에서 보내는 요청은 항상 동일한 서버로 라우팅됩니다.

upstream api_app1 {
    ip_hash;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

5. 가중치가 부여된 부하 분산

서버 가중치를 사용하면 NGINX 부하 분산 알고리즘에 가중치를 부여하여 부하를 조절할 수 있습니다. 서버에 가중치를 할당하려면 서버 구성에 weight 매개변수를 사용하실 수 있습니다.

upstream api_app1 {
    server srv1.example.com weight=3;
    server srv2.example.com;
    server srv3.example.com;
}

위 설정에서, srv1은 가중치 3을 가지며, srv2srv3은 기본 가중치를 가집니다. 이렇게 설정하면 srv1에는 요청이 더 자주 전달됩니다.

6. API Backend 헬스 체크

NGINX의 리버스 프록시에는 서버 상태 검사가 포함되어 있습니다. 만약 특정 서버의 응답이 오류를 반환하면 NGINX는 이 서버를 "실패" 상태로 표시하고 일정 시간 동안 해당 서버로의 요청을 중지합니다. 이를 위해 max_failsfail_timeout 매개변수를 사용하여 서버 상태 검사를 구성할 수 있습니다.

7. 추가 설명

NGINX에는 API 서버 부하 분산을 제어하기 위한 다양한 명령과 매개변수가 제

공됩니다. 이러한 명령과 매개변수를 활용하여 부하 분산 및 애플리케이션 상태를 조절할 수 있습니다. 또한, NGINX Plus 구독에서는 서버 그룹의 애플리케이션 부하 분산, 상태 검사, 모니터링, 동적 재구성과 같은 고급 기능을 제공합니다.

0개의 댓글