로드밸런싱

로드밸런싱이란

  • Load Balancing. 부하 분산
  • 여러 대의 서버나 네트워크 장비에 작업을 나누어 처리하는 기술을 의미함.
  • 특정 서버에 과도한 부하가 집중되는 것을 방지.
  • 전체 시스템의 가용성을 높이고 응답시간을 최적화해, 사용자 경험을 크게 향상시킴.

로드밸런싱의 주요 이점

이점 설명
성능 향상 - 여러 서버가 작업을 나누어 처리하여, 단일 서버가 감당할 부하가 감소
- 따라서 전반적인 처리 속도가 빨라짐
가용성 증가 - 특정 서버에 장애가 발생해도 로드 밸런서가 다른 정상 서버에 요청
- 이를 통해 서비스 중단을 최소화
확장성 증대 - 새로운 서버를 추가하여 시스템 용량을 유연하게 확장할 수 있음
비용 효율성 - 비용 효율성 : 필요에 따라 서버 추가 제거 가능
- 자원 활용 최적화

대표적인 부하분산 툴

  • 대표적인 부하분산 툴은 L4 스위치, HAProxyt, Nginx 를 꼽을 수 있다.
  • L4 스위치 : 하드웨어 기반 로드밸런서. 4계층 (전송 계층)에서 동작. IP와 포트 기반 로드밸런싱.
  • HAProxy : 소프트웨어 기반 로드밸런서. 4계층 및 7계층에서 동작. 성능 뛰어나고 무료.
  • Nginx : 웹서버이면서 로드 밸런싱 기능도 제공. 7계층에서 동작.
  • 자세한 내용은 : 로드밸런싱 - L4스위치, Nginx, HAProxy

Nginx 로드밸런스 설정 방법

작성 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# nginx.conf 파일
http {
  upstream backend {                       # -- (1)
    least_conn;                            # -- (2)
    server backend1.example.com;           # -- (3)
    server backend2.example.com weight=5;  # -- (4)
    server 192.0.0.1 backup;               # -- (5)
  }
}

server {
  listen 80;
  location / {
    proxy_pass http://backend              # -- (6)
  }
}

항목 설명

No 명칭 설명 예시
1 upstream - 서비스 요청을 처리할 수 있는 백엔드 서버의 그룹 정의
- 로드 밸런싱 기능을 수행한다.
- 리버시 프록시 요청도 이 서버들 중 하나로 전달된다.
- 백업서버를 지정할 수 있다. (다른 서버 장애시 백업으로)
upstream abc
2 algorithm - 로드밸런싱 알고리즘을 지정
- 알고리즘은 아래 별도 표 참고
 
3 server - 요청을 처리할 서버
- server 지시어 다음 호스트 (도메인 혹은 IP) 를 지정한다.
server abc.com
4 weight - 이 서버에 얼마나 많은 요청을 분배할지 지정하는 옵션
- weight가 높을수록 더 많은 요청이 분배된다.
- 기본값은 weight=1
- weight=5 면 기본서버 대비 5배의 요청을 받게 된다.
weight=5
5 backup - 백업 서버로 지정하는 지시어
- upstream 그룹 내의 다른 모든 서버가 다운되거나
- 모두 응답하지 않을 경우에만 백업 서버로 요청이 간다.
backup
6 proxy_pass - 들어온 요청을 다른 서버로 프록시(전달)하는 지시어
- 즉, 받은 요청을 지정한 서버로 proxy_pass 한다.
- proxy_pass : 경유해서 넘겨주다
코드블럭 참고

알고리즘

알고리즘 표현 설명
라운드로빈   - (서버 가중치를 고려해) 요청을 서버들에게 균등하게 분배
- 아무것도 쓰지 않으면 라운드로빈으로 작동함
최소 연결 least_conn; - 활성 연결 수가 가장 적은 서버에게 요청을 전달
- 이 때에도 서버 가중치가 고려됨
IP 해시 ip_hash; - 클라이언트 IP 주소에 따라 요청을 받는 서버가 결정됨
- IPv4의 처음 세 옥텟 또는 IPv6 전체가 해시값 계산에 사용됨
- 같은 IP는 같은 서버에 요청이 들어가게 됨
일반 해시 hash; - 사용자 정의 키에 의해 요청을 받는 서버가 결정됨
- 키는 IP주소-포트 쌍 혹은 URI 가능
최소 시간 least_time - NGINX Plus 전용
- 평균 지연 시간 및 활성 연결 수가 가장 적은 서버에 요청이 전송됨
- 가장 낮은 평균 지연시간의 기준은 least_time 다음에 기재
least_time header; : 서버로부터 첫 번째 byte를 받는 데 걸린 시간
least_time last_byte : 전체 응답을 받는 데 걸린 시간
Random random - 무작위로 요청을 받는 서버가 결정됨
- two 매개변수가 지정되면 서버 가중치 고려해 두 서버를 선택 후
- 지정된 방법을 사용해 두 서버 중 하나를 선택함
e.g. eandom two least_time=last_byte

Reference

Nginx DOC
Wikipedia-부하분산

Comments