NGINX API Gateway는 여러 부하 분산 메커니즘을 지원합니다. 이러한 메커니즘은 트래픽을 효과적으로 분산하여 리소스 사용량을 최적화하고 처리량을 극대화하며 지연을 감소시키는 데 사용됩니다. 주요 부하 분산 방법은 다음과 같습니다:
라운드 로빈 (Round Robin): 요청을 순환 방식으로 서버에 분산합니다.
최소 연결 (Least Connections): 가장 적은 활성 연결을 가진 서버에 새로운 요청을 할당합니다.
IP 해시 (IP Hash): 클라이언트 IP 주소를 해싱하여 해당 해시를 기반으로 서버를 선택합니다.
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에 대한 부하 분산을 구성할 수 있습니다.
최소 연결 부하 분산을 사용하면 서버의 활성 연결 수가 가장 적은 서버에 새로운 요청을 할당합니다. 이를 통해 애플리케이션 서버에 부하를 더 균등하게 분산할 수 있습니다. 최소 연결 부하 분산은 least_conn
명령을 서버 그룹 구성에서 사용하여 활성 연결 수를 최소화합니다.
upstream api_app1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
순환 또는 최소 연결 부하 분산에서는 클라이언트의 요청이 항상 다른 서버로 전달될 수 있습니다. 그러나 일부 경우에는 특정 클라이언트가 항상 동일한 서버에 연결해야 할 수도 있습니다. 이를 위해 ip-해시 부하 분산 메커니즘을 사용할 수 있습니다.
ip-해시 부하 분산은 클라이언트의 IP 주소를 해시 키로 사용하여 클라이언트의 요청에 대한 서버를 선택합니다. 이로써 동일한 클라이언트에서 보내는 요청은 항상 동일한 서버로 라우팅됩니다.
upstream api_app1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
서버 가중치를 사용하면 NGINX 부하 분산 알고리즘에 가중치를 부여하여 부하를 조절할 수 있습니다. 서버에 가중치를 할당하려면 서버 구성에 weight
매개변수를 사용하실 수 있습니다.
upstream api_app1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
위 설정에서, srv1
은 가중치 3을 가지며, srv2
와 srv3
은 기본 가중치를 가집니다. 이렇게 설정하면 srv1
에는 요청이 더 자주 전달됩니다.
NGINX의 리버스 프록시에는 서버 상태 검사가 포함되어 있습니다. 만약 특정 서버의 응답이 오류를 반환하면 NGINX는 이 서버를 "실패" 상태로 표시하고 일정 시간 동안 해당 서버로의 요청을 중지합니다. 이를 위해 max_fails
및 fail_timeout
매개변수를 사용하여 서버 상태 검사를 구성할 수 있습니다.
NGINX에는 API 서버 부하 분산을 제어하기 위한 다양한 명령과 매개변수가 제
공됩니다. 이러한 명령과 매개변수를 활용하여 부하 분산 및 애플리케이션 상태를 조절할 수 있습니다. 또한, NGINX Plus 구독에서는 서버 그룹의 애플리케이션 부하 분산, 상태 검사, 모니터링, 동적 재구성과 같은 고급 기능을 제공합니다.