간단하게 설명하면 서버가 부담하는 부하를 분산해주는 장치 혹은 기술이다.
사업의 규모가 커지고 사용자가 늘게 되면 서버가 부담하는 부하가 늘게 되고 자잘한 에러가 생기거나 서버가 다운될 수 도 있다. 그럴때 이제 백엔드 개발자는 고민이 생긴다.
🤔 많은 트래픽을 어떻게 대처할까?
서버는 갑자기 다운될 수도 있고 배포를 하게 되면 다운이 된다.
당연스럽게도 여러 대의 서버로 나누게 되면 하나의 서버가 다운되어도 실제 클라이언트는 알 수 없다.
⭐ 주의: 이것은 알고리즘에 따라 달라질 수 있다!!
L2, L4, L7 로드밸런싱이 있다.
그 중에 L4와 L7 로드밸런싱이 가장 많이 사용되기 때문에 두 종류만 다뤄보도록 하겠다.
기본적으로 Reverse Proxy를 기반으로 동작한다.
로드밸런싱만을 위해 개발된 프로그램이 아니기 때문에 기본적인 로드밸런싱의 기능만이 있지만 그만큼 비용적으로 저렴하고 구축이 쉽다는 장점이 있다.
1.Nginx
nginx 설정파일 찾기(nginx.conf) : /etc/nginx/nginx.conf
로드밸런싱 설정 파일 추가
http {
include /etc/nginx/site-enabled/*;
}
전체 경로
/etc/nginx/site-enabled/파일 이름
👨💻 추가할 데이터
upstream backend { // backend자리에 이름
least_conn; //알고리즘을 적어준다. (기본: 라운드 로빈)
server localhost:8801;
server localhost:8802; //클라이언트가 Nginx로 요청 시
server localhost:8803; //우회시켜줄 Server 정보
}
server {
listen 80; //클라이언트가 요청하는 포트
location / {
proxy_set_header Host $host; //클라이언트의 호스트 설정
proxy_set_header Connection ""; //upstream서버를 사용하겠다 지정(⭐중요)
proxy_pass http://backend; //설정한 이름으로 요청 보내기
}
}
80번 포트에 요청이 들어오면 8801~8803포트(예시)에 열려있는 3개의 서버로 로드밸런싱이 진행된다.
필자는 최소 연결된 서버를 찾아 요청 받는 방식인 알고리즘을 사용했다.
🔮 알고리즘 종류
방법 | 설명 |
---|---|
라운드로빈(기본값) | 요청을 순서대로 처리한다. |
least_conn(최소 연결) | 각 요청을 서버에 할당된 가중치를 고려해 연결 수가 가장 적은 서버로 전송 |
ip_hash | 요청이 클라이언트 IP주소로 해싱 > 한번 요청 받은 서버가 있을 때 해당 서버에만 요청을 분배 |
least_time | 연결 수가 가장 적으면서 평균 응답시간이 가장 적은 쪽을 선택해서 분배 (Nginx Plus에서만 가능) |