L7 Load Balancer, NGINX로 구성하기 튜토리얼

이 포스트에서는 NGINX를 사용하여 L7 Load Balancer 구성하는 기초적인 방법을 보여줍니다. NGINX는 네 가지 Load Balancing 알고리즘(Round Robin, Hash, IP Hash, Least Connection)을 제공하며, NGINX Plus는 Least Time 알고리즘과 세션 지속성을 추가로 제공합니다.

NGINX L7 Load Balancer 구성을 통해 서버의 부하를 분산시켜 각 서버의 성능을 균등하게 유지시키고, 한 서버에 문제가 발생했을 경우 다른 서버로 트래픽을 자동으로 전환함으로써 서비스의 가용성을 높일 수 있습니다.

목차

1. Load Balancer 이란?
2. NGINX L7 Load Balancer 구성하기
 2-1. NGINX L7 Load Balancer 설정하기
 2-2. NGINX Load Balancer 구성 결과 확인하기
3. 인위적 장애 발생 후 결과 확인하기

1. Load Balancer 이란?

NGINX Load Balance explanation

Load Balancer 은 클라이언트와 서버 사이에 위치하여, 서버에 가해지는 트래픽/부하를 여러 서버로 균등하게 분산하여 서버의 과부하를 방지하는 역할을 합니다. 이를 통해 단일 서버에 가해지는 부하를 분산함으로써 안정성, 성능, 가용성을 향상시킬 수 있습니다.

Load Balancing 에는 여러 가지 알고리즘이 있으며, NGINX는 네 가지 Load Balancing 알고리즘(Round Robin, Hash, IP Hash, Least Connection)을 제공하며, NGINX Plus는 Least Time 알고리즘을 추가로 제공합니다. NGINX Load Balancer 의 알고리즘 작동 원리는 NGINX 로드 밸런싱 알고리즘 작동 원리 포스트에서 확인할 수 있습니다.

2. NGINX L7 Load Balancer 구성하기

이 포스트에서는 NGINX Load Balancer 테스트를 위해 4개의 NGINX 서버를 4개의 가상 환경에서 각각 구동시켜서 테스트를 진행하였습니다. NGINX OSS와 NGINX Plus의 구성 방법이 같아 하나로 작성하였습니다.

2-1. NGINX L7 Load Balancer 설정하기

먼저 3개의 테스트 서버로 NGINX Load Balancer을 구성할 메인 NGINX 서버를 설정합니다.

upstream backend {                    # Load Balancing 대상 서버 설정
# 알고리즘 설정. 기본적으로 Round Robin 알고리즘
server 192.168.200.144:8001;
server 192.168.200.158:8002;
server 192.168.200.160:8003;
}

server {
listen 3000;
server_name 192.168.200.78; # 메인 서버 주소

location / {
proxy_pass http://backend; # upstream의 이름을 넣어 설정
}
}

메인 서버의 3000번 포트로 오는 요청에 대해 3개의 테스트 서버의 8001~8003번 포트로 Load Balancing이 되도록 다음과 같이 포트 번호와, html을 설정하였습니다.

server {
listen 8001; # 해당하는 포트 번호 설정(8001, 8002, 8003)
server_name 192.168.200.144;

location / {
root /usr/share/nginx/html;
index load1.html load1.htm; # 해당 서버에 맞는 html 설정(load1 ~ load3)
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

1번 테스트 서버(192.168.200.144:8001) 접속 결과입니다.

2-2. NGINX Load Balancer 구성 결과 확인하기

메인 서버의 주소(192.168.200.78:3000)로 접속 시 테스트 서버로 분산되는 것을 확인할 수 있습니다.

NGINX Load Balancing test server 1 L7 Load Balancer
NGINX Load Balancing test server 2 L7 Load Balancer
NGINX Load Balancing test server 3 L7 Load Balancer

3. 인위적 장애 발생 후 결과 확인하기

테스트 서버 중 하나가 동작하지 않아도, 나머지 2개의 서버로 NGINX Load Balancer이 적용되는 것을 확인하기 위해 2번 테스트 서버의 NGINX를 정지시켰습니다.

root@ubuntu:/home/load2# systemctl stop nginx

메인 서버의 주소(192.168.200.78:3000)로 접속 시 2번 테스트 서버를 제외한 나머지 2개의 서버로 접속되며 NGINX Load Balancer이 성공적으로 구성된 것을 확인할 수 있습니다.

다음과 같은 방법으로 NGINX Load Balancer을 구성하였습니다. 구성 방법에 대해 더 자세히 알고 싶다면 NGINX 공식 문서 를 참고하세요.

엔터프라이즈급, 프로덕션급 NGINX Plus를 L7 로드 밸런서로 배포 테스트 해보고 싶으시면 아래 문의 양식으로 Trial을 신청해보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required