반응형
로드 밸런싱이란?
- 네트워크나 애플리케이션의 부하를 분산하여 여러 대의 서버가 공평하게 작업을 처리하도록 하는 기술
어떻게 동작하는가?
- 클라이언트로부터 NGINX 서버가 HTTP 요청을 받는다
- 이 요청을 NGINX가 여러 대의 서버로 특정 알고리즘을 통해 부하를 분산시켜 WAS 서버의 처리량을 조절한다
- 이를 리버스 프록시(Reverse Proxy) 라고 한다.
로드 밸런싱 종류
- Round Robin
- Least Connection
- IP Hash
- Generic hash
Round Robin
- Nginx의 기본적인 로드 밸런싱으로, 따로 설정을 하지 않아도 기본으로 제공해준다.
- 요청을 1:1 비율로 돌아가면서 처리하기 때문에 골고루 처리한다는 장점이 있다.
- 단점은 요청을 받는 서버에 대한 추측이 어렵다
upstream backend_servers {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
}
}
Least Connection
- 커넥션 요청이 가장 적은 서버에 요청을 보내는 방식
- 이 또한 Round Robin 방식과 비슷하게 부하가 골고루 분산되는 장점을 가진다
- 단점 또한 요청을 받는 특정 서버를 추측하기 어렵다는 특징을 가진다
upstream backend_servers {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
}
}
IP Hash
- IP를 해싱한 기반으로 부하를 분산하는 방식
- 특정 IP에 대한 지속적인 요청이 어떤 서버로 들어가게 되는지 추측이 가능하다.
- 특정 서버에 요청이 몰릴 수 있는 단점
upstream backend_servers {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
}
}
Generic Hash
- 사용자가 설정한 다양한 변수 조합을 통해 해싱한 값을 기준으로 부하를 분산하는 방식
- 웹 페이지 URL로 해싱하거나, IP와 PORT를 조합하는 등의 사용자 정의 방식을 사용한다
upstream backend_servers {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
}
}
부하 분산 테스트
- 8000, 8001을 사용하는 PORT에 50개의 요청을 Round Robin 방식으로 진행
- Nginx 서버는 Docker 기반으로 실행
- Docker 내부에서 외부로 요청을 보내기 때문에 'host.docker.internal' 키워드를 사용한다
nginx.conf
http {
...
upstream myapp {
server host.docker.internal:8000;
server host.docker.internal:8001;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://myapp;
}
}
include /etc/nginx/conf.d/*.conf;
...
}
Jmeter 동시 요청 설정
- 동시 요청 갯수 설정
- HTTP 요청 설정
실행 결과 확인
- Nginx 요청 로그
- 8000 Port 로그
- 8001 Port 로그
반응형
LIST
'Nginx' 카테고리의 다른 글
[NGINX 기초] - Docker로 NGINX 설치하기 (0) | 2024.03.10 |
---|