Nginx 에서는 대표적인 로드밸런싱 알고리즘 여러가지가 있지만 그중에서 라운드 로빈과 리스트 커넥션 개념을 정리해보려 한다. (라운드 로빈, 리스트 커넥션, IP 해시, 리스트 타임 등등....) 리스트 타임은 Nginx plus에서만 사용할 수 있는 방법이다.
1. 라운드 로빈(Round Robin)
라운드로빈은 기본값으로 설정된 부하분산 방법이다. 요청이 순차적으로 각 서버에 동일하게 분배되는 방식이다. upstream 풀에 지정된 서버의 순서에 따라 요청을 분산한다. upstream 내부에 가중치(weight)를 설정할 ㅅ ㅜ잇는데 더 높은 정숫값으로 설정된 서버는 더 많은 요청을 받도록 설정할 수 있다.
http {
upstream back {
server api.backend.com:8080 weight=2;
server auth.backend.com:8090 weight=1;
}
server {
location / {
proxy_pass http://myapp;
}
}
}
2. 리스트 커넥션(Least Connections)
리스트 커넥션 방식은 현재 활성 연결 수가 가장 적은 서버에 새로운 요청을 보내는 방식이다. 결국 Nginx와의 연결 수가 가장 적은 upstream 서버로 요청을 전달해 부하를 분산한다. 라운드 로빈과 마찬가지로 가중치를 기반으로 요청을 어디에 보낼지 계산한다. 해당 알고리즘 설정하려면 least_conn을 작성해줘야한다.
http {
upstream backend {
least_conn; # 리스트 커넥션 활성화
server api.backend.com:8080;
server auth.backend.com:8090;
}
server {
location / {
proxy_pass http://backend;
}
}
}