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

agnusdei·2023년 10월 31일

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 구독에서는 서버 그룹의 애플리케이션 부하 분산, 상태 검사, 모니터링, 동적 재구성과 같은 고급 기능을 제공합니다.

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글