로드 밸런싱
기술노트
로드 밸런싱
개념
로드 밸런싱(Load Balancing)은 여러 대의 서버에 네트워크 트래픽을 균등하게 분산시키는 기술입니다. 서버의 부하를 분산함으로써 시스템의 전체적인 성능, 가용성 및 안정성을 향상시키는 것이 주요 목적입니다.
로드 밸런싱의 필요성
- 성능 향상: 트래픽을 여러 서버에 분산시켜 응답 시간 단축
- 고가용성 보장: 서버 장애 발생 시 다른 정상 서버로 트래픽 자동 전환
- 확장성 제공: 수요 증가에 따라 서버 추가로 시스템 용량 확장 가능
- 중복성 확보: 단일 실패 지점(SPOF) 제거
- 유지보수 용이성: 일부 서버 점검 시에도 서비스 중단 없이 작업 가능
로드 밸런싱 동작 방식
기본 구조
로드 밸런서는 클라이언트와 서버 사이에 위치하여 다음과 같이 동작합니다:
|
트래픽 분산 알고리즘
- 라운드 로빈(Round Robin): 순차적으로 각 서버에 요청을 배분
- 가중치 기반(Weighted): 서버 처리 능력에 따라 가중치를 부여하여 분산
- 최소 연결(Least Connection): 현재 연결 수가 가장 적은 서버에 요청 전달
- 응답 시간(Response Time): 응답 시간이 가장 빠른 서버에 요청 전달
- IP 해시(IP Hash): 클라이언트 IP 주소를 해싱하여 항상 같은 서버로 요청 전달
- URL 해시(URL Hash): 요청된 URL을 기준으로 서버 선택
로드 밸런서 유형
네트워크 계층에 따른 분류
- L4 로드 밸런싱 (전송 계층)
- TCP/UDP 포트 정보 기반으로 트래픽 분산
- 패킷 헤더 정보만 확인하여 빠른 처리 가능
- 패킷 내용 분석은 불가능
- L7 로드 밸런싱 (애플리케이션 계층)
- HTTP 헤더, 쿠키, URL 등 애플리케이션 데이터 기반으로 분산
- 콘텐츠 기반 라우팅 가능 (예: 이미지는 특정 서버로, API 요청은 다른 서버로)
- 보다 정교한 트래픽 관리 가능
- L4 로드 밸런싱보다 상대적으로 리소스 소모 큼
구현 방식에 따른 분류
- 하드웨어 로드 밸런서
- 전용 장비로 구현 (예: F5 Networks, Citrix Netscaler)
- 고성능, 높은 신뢰성
- 고비용, 확장성 제한
- 소프트웨어 로드 밸런서
- 소프트웨어로 구현 (예: HAProxy, NGINX, LVS)
- 저비용, 유연한 구성
- 하드웨어 로드 밸런서보다 낮은 성능
- 클라우드 기반 로드 밸런서
- 클라우드 서비스 제공자가 관리하는 서비스 (예: AWS ELB, Azure Load Balancer)
- 관리 부담 감소, 종량제 과금 방식
- 자동 확장/축소 기능 지원
로드 밸런싱 기법
서버 헬스 체크
- 능동적 헬스 체크: 로드 밸런서가 주기적으로 서버에 요청을 보내 상태 확인
- 수동적 헬스 체크: 실제 클라이언트 요청에 대한 응답을 모니터링
- 헬스 체크 매개변수: 타임아웃, 체크 간격, 실패 임계값, 성공 임계값 등
세션 유지 (Session Persistence)
- 쿠키 기반: 로드 밸런서가 쿠키를 사용하여 클라이언트 요청을 같은 서버로 유지
- IP 기반: 클라이언트 IP 주소에 따라 동일한 서버로 요청 전달
- 애플리케이션 기반: 애플리케이션 레벨에서 세션 정보 관리 (Redis, Memcached 등 활용)
장애 대응 (Failover)
- 수동 장애 복구: 관리자 개입으로 장애 서버 전환
- 자동 장애 복구: 헬스 체크 실패 시 자동으로 정상 서버로 트래픽 전환
- 장애 감지 시간: 빠른 장애 감지와 복구를 위한 헬스 체크 간격 조정
구성 패턴
액티브-패시브 (Active-Passive)
- 하나의 서버가 활성화되어 모든 트래픽 처리
- 장애 발생 시 대기 서버로 전환
- 리소스 활용 효율은 낮지만 설정이 단순
액티브-액티브 (Active-Active)
- 모든 서버가 동시에 트래픽 처리
- 리소스 활용 효율 높음
- 모든 서버가 동일한 데이터 접근 필요
글로벌 로드 밸런싱
- 지리적으로 분산된 데이터 센터 간 트래픽 분산
- DNS 기반 또는 애니캐스트 방식으로 구현
- 지역별 사용자에게 가장 가까운 데이터 센터로 연결
로드 밸런싱 구현 사례
웹 서버 로드 밸런싱
- NGINX, Apache 등의 웹 서버 앞에 로드 밸런서 배치
- 정적 콘텐츠와 동적 요청 분리 처리 가능
- 캐싱 전략과 함께 활용하여 성능 향상
애플리케이션 서버 로드 밸런싱
- WAS(Web Application Server) 서버들 앞에 로드 밸런서 배치
- 세션 유지 전략 중요
- 스케일 아웃 방식으로 용량 확장
데이터베이스 로드 밸런싱
- 읽기 전용 쿼리는 읽기 전용 복제본으로 분산
- 쓰기 작업은 마스터 데이터베이스로 전달
- 데이터 일관성 유지가 중요한 과제
클라우드 환경에서의 로드 밸런싱
AWS Elastic Load Balancing
- ALB(Application Load Balancer): HTTP/HTTPS 기반 L7 로드 밸런싱
- NLB(Network Load Balancer): TCP/UDP 기반 L4 로드 밸런싱
- Auto Scaling과 연동하여, 트래픽에 따라 인스턴스 자동 확장/축소
기타 클라우드 서비스
- Azure Load Balancer/Application Gateway
- Google Cloud Load Balancing
- Kubernetes의 Service 및 Ingress 리소스
로드 밸런싱 구현 시 고려사항
성능 고려사항
- 로드 밸런서 자체가 병목이 되지 않도록 적절한 용량 설계
- 연결 유지(Keep-Alive) 설정 최적화
- 효율적인 SSL/TLS 처리
보안 고려사항
- DDoS 방어 기능 구현
- SSL/TLS 종료와 인증서 관리
- 전송 계층 보안 설정
모니터링 및 운영
- 로드 밸런서 성능 및 상태 모니터링
- 트래픽 패턴 분석 및 용량 계획
- 장애 상황 대응 자동화
관련 주제
- 고가용성(High Availability) 시스템
- 서버 클러스터링
- 분산 시스템 설계
- 오토 스케일링(Auto Scaling)
- CDN(Content Delivery Network)
- 컨테이너 오케스트레이션