ETC

[기타] 로드 밸런싱(Load Balancing)

spursOnTop 2025. 4. 1. 23:56
반응형

로드 밸런싱이란?

여러 서버로 네트워크 트래픽을 분산하여 부하를 줄이고 성능 최적화 가능
대규모 웹사이트, 애플리케이션, 데이터 센터에서 안정적인 서비스 제공을 위해 필수적으로 사용 중인 기술

 

로드 밸런싱의 필요성

  1. 성능 향상: 단일 서버에 모든 요청이 집중되는 것을 방지하고 여러 서버로 트래픽을 분산하여 처리 속도를 높임
  2. 고가용성(High Availability): 특정 서버에 장애가 발생해도 다른 서버가 요청을 처리하여 서비스 중단을 방지
  3. 확장성(Scalability): 서버를 추가하여 트래픽 증가에 유연하게 대응할 수 있음
  4. 보안 강화: DDoS 공격 등의 부하를 여러 서버에 분산하여 공격에 대한 대응력을 높일 수 있음

 

로드 밸런서의 유형

1. 하드웨어 로드 밸런서

  • 물리적인 장비로 구현되며, 고성능이지만 비용이 높음.
  • 대표적인 제품: F5 BIG-IP, Citrix NetScaler, A10 Thunder

2. 소프트웨어 로드 밸런서

  • 서버에 설치하여 실행되며 비용이 저렴하고 유연성 높음.
  • 대표적인 소프트웨어:
    1. HAProxy (가장 널리 사용되는 오픈소스 로드 밸런서)
    2. Nginx (웹 서버와 함께 로드 밸런서 역할 가능)
    3. AWS Elastic Load Balancer(ELB) (클라우드 환경용)
    4. Traefik, Envoy (마이크로서비스 환경에서 사용)

 

로드 밸런싱 방식

1. L4 로드 밸런싱 (네트워크 레벨)

  • OSI 4계층(TCP/UDP)에서 작동하며, IP 및 포트 정보를 기반으로 트래픽을 분산.
  • 속도가 빠르고 단순한 부하 분산이 필요할 때 적합.
  • 예시: AWS ELB(Network Load Balancer), HAProxy (TCP 모드)

2. L7 로드 밸런싱 (애플리케이션 레벨)

  • OSI 7계층(HTTP/HTTPS)에서 작동하며, HTTP 헤더, 쿠키, URL 등의 정보를 기반으로 분산.
  • 특정 요청을 특정 서버로 라우팅 가능 (예: /api 요청은 API 서버로).
  • 예시: AWS ELB(Application Load Balancer), Nginx, HAProxy (HTTP 모드)

 

로드 밸런싱 알고리즘

1. 라운드 로빈 (Round Robin)

  • 가장 기본적인 방식으로, 요청을 순차적으로 서버에 분배.
  • 균등한 분배가 가능하지만, 서버 성능 차이가 클 경우 비효율적.

2. 가중치 기반 라운드 로빈 (Weighted Round Robin)

  • 성능이 높은 서버에 더 많은 요청을 할당하도록 가중치를 부여.

3. 최소 연결 (Least Connections)

  • 현재 연결 수가 가장 적은 서버로 트래픽을 분배하여 부하를 최소화.

4. IP 해시 (IP Hashing)

  • 클라이언트 IP를 기반으로 특정 서버로 요청을 전달하여 세션 유지에 유용.

5. Least Response Time

  • 응답 시간이 가장 짧은 서버로 트래픽을 보내는 방식.

 

로드 밸런싱 예제(HA Proxy)

192.168.1.106 으로 오는 요청을 두 개의 웹 서버(192.168.1.123, 192.168.1.124)에 트래픽을 라운드 로빈 방식으로 분산하는 예제

haproxy.cfg

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         30s         # 백엔드가 연결될 때까지 대기하는 시간 (기본10초 => 30초)
    timeout client          10m         # 클라이언트가 반응이 올 것으로 예상하는 시간 (기본30초 => 10분)
    timeout server          300m        # 백엔드 서버가 반응이 올 것으로 예상하는 시간 (기본30초 => 5시간)
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main
    bind 192.168.1.106:80

    default_backend            test-ha 
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
#backend static
#    balance     roundrobin
#    server      static 127.0.0.1:4331 check
#
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend test-ha 
    balance roundrobin
    option  forwardfor if-none
    server  test-instance1 192.168.1.123:80 check
    server  test-instance2 192.168.1.124:80 check

 

반응형