• network
  • load-balancing

로드 밸런서: 구성 방식, 헬스 체크, L4와 L7

로드 밸런서의 원암·인라인 구성, 헬스 체크 방식, L4와 L7 로드 밸런싱의 차이, 분산 알고리즘을 정리한다.

시리즈 · 네트워크8 / 12
  1. OSI 7 Layer와 계층별 역할, ARP
  2. IP 주소: IPv4와 IPv6, NAT, 체크섬
  3. 라우터: 경로 지정, 브로드캐스트 컨트롤, 라우팅과 스위칭
  4. DHCP 동작 방식과 UDP를 사용하는 이유
  5. IP의 한계와 TCP·UDP, 3-Way Handshake
  6. TCP 4-Way Handshake와 TIME_WAIT
  7. DNS 정리: 구조, 질의 방식, 레코드, 이중화와 위임
  8. 로드 밸런서: 구성 방식, 헬스 체크, L4와 L7
  9. HTTP 메서드와 상태 코드: 멱등성, POST와 PUT의 차이
  10. HTTP의 Stateless·Connectionless와 쿠키, 세션
  11. HTTP/1.1, HTTP/2, HTTP/3 비교
  12. 소켓과 포트, 그리고 웹소켓

로드 밸런서

서버나 장비의 부하를 분산하기 위해 트래픽을 분배해 주는 장비다.

  • 4계층 이상에서 동작하며, IP 주소와 4계층 정보, 애플리케이션 정보를 확인하고 수정할 수 있다.
  • 로드 밸런서가 서비스의 대표 IP(서비스 IP, VIP)를 갖고, 요청이 오면 목적지를 뒤에 있는 각 서버의 실제 IP로 바꿔 전달한다. 서버가 늘어나도 서비스 IP는 그대로다.
  • 부하 분산 그룹은 IP 주소뿐 아니라 서비스 포트까지 지정해 만든다. 이렇게 4계층 정보로 동작하는 장비가 L4 스위치이고, 7계층 정보까지 확인해 처리하면 L7 스위치다.
  • 하나의 로드 밸런서에 서로 다른 VIP를 여러 개 구성할 수도 있다.
  • VIP에 설정된 서비스 포트와 실제 서버의 서비스 포트가 같을 필요는 없다.

구성 방식

원암 구성과 인라인 구성 비교

원암(One-Arm) 구성

로드 밸런서가 스위치 옆에 붙어 있는 형태다.

  • 서버로 드나드는 트래픽이 로드 밸런서를 거칠 수도, 거치지 않을 수도 있다. 부하 분산을 이용하는 트래픽(로드 밸런서가 가진 서비스 IP로 향하는 트래픽)만 로드 밸런서를 경유한다.
  • 서비스 IP를 실제 서버 IP로 바꾸는 Destination NAT뿐 아니라, 출발지를 사용자 IP 대신 로드 밸런서의 IP로 바꾸는 Source NAT도 함께 해야 응답이 로드 밸런서로 돌아온다. Source NAT를 쓰지 않으려면 DSR(Direct Server Return)을 사용한다.
  • 장점: 부하 분산이 필요한 트래픽만 처리하므로 로드 밸런서의 부하가 줄어든다.
  • 단점: 로드 밸런서와 스위치를 잇는 인터페이스 하나가 인바운드와 아웃바운드 트래픽을 모두 수용해야 한다.

인라인(Inline) 구성

로드 밸런서가 스위치에서 서버로 가는 일직선 경로 위에 있는 형태다.

  • 모든 트래픽이 로드 밸런서를 통과한다.
  • 구성이 직관적이고 이해하기 쉽다.
  • 모든 트래픽을 감당해야 하므로 필요한 처리 용량이 커지고, 그만큼 장비 가격도 올라간다.

동작 모드

구성과 별개로 동작 모드는 트랜스패런트(Transparent, 브리지), 라우티드(Routed), DSR(Direct Server Return)로 나뉜다.

헬스 체크

VIP에 연결된 리얼 서버의 상태를 확인해 요청을 보낼지 결정한다.

  • ICMP (ping): 서버가 살아 있는지만 확인한다. 잘 사용하지 않는다.
  • TCP 서비스 포트: 로드 밸런서에 등록된 서버의 서비스 포트를 확인한다. 서비스 포트가 2000번이라면 리얼 IP의 2000번 포트로 SYN을 보내고, SYN-ACK를 받으면 ACK로 응답한 뒤 FIN을 보내 종료한다.
  • TCP Half Open: SYN을 보내고 SYN-ACK를 받으면 RST를 보내 바로 세션을 끊는다. 헬스 체크로 인한 부하를 줄이고 정상 종료보다 빨리 세션을 정리할 수 있다.
  • HTTP 상태 코드: 서비스 포트는 TCP로 정상적으로 열리지만 웹 서비스가 제대로 응답하지 못하는 경우가 있다. 실제 HTTP 요청을 보내 정상 상태 코드가 오는지 확인한다.

L4와 L7 로드 밸런싱

L4 로드 밸런싱

  • 일반적인 로드 밸런서의 동작 방식으로, TCP/UDP 정보(특히 포트 번호)를 기준으로 분산한다.
  • 최근 장비는 L4와 L7 기능을 모두 지원한다. L7 지원 여부와 상관없이 4계층 정보만으로 분산하면 L4 로드 밸런싱이라 한다.

L7 로드 밸런싱

  • HTTP, FTP, SMTP 같은 애플리케이션 프로토콜 정보를 기준으로 분산한다. HTTP 헤더나 URI 등을 읽고 프로토콜을 이해한 뒤 부하를 나눈다.
  • 이런 장비를 ADC(Application Delivery Controller)라 부르며 프록시 역할을 수행한다. Squid나 Nginx의 리버스 프록시와 비슷한 기능이다.

로드 밸런싱 알고리즘

알고리즘 설명
Round Robin 부하를 순차적으로 분산한다. 총 누적 세션 수는 같아지지만 활성화된 세션 수는 달라질 수 있다.
Least Connection 활성화된 세션 수가 가장 적은 장비로 분산한다.
Weighted Round Robin 장비마다 가중치를 두고, 가중치가 높은 장비에 더 많이 분산한다. 처리 용량이 다른 서버에 부하를 나누기 위한 알고리즘이다.
Weighted Least Connection 장비마다 가중치를 두고, 가중치와 활성화된 세션 수를 함께 고려해 분산한다. 역시 처리 용량이 다른 서버를 위한 알고리즘이다.
Hash 해시 알고리즘으로 분산한다.

Least Connection

세션 부하를 보고 그에 맞게 분산한다. 로드 밸런서는 요청을 각 장비로 보낼 때마다 세션 테이블을 만들기 때문에, 장비별 현재 세션 수를 알 수 있다.

Hash

서버 부하를 고려하지 않고, 같은 클라이언트가 계속 같은 서버에 접속하도록 하는 방식이다.

  • 해시 계산에 쓸 값을 지정할 수 있다. 주로 출발지 IP, 목적지 IP, 출발지 포트, 목적지 포트를 사용한다.
  • 처음 요청과 다음 요청이 같은 서버로 분산되므로 서버에서 세션을 유지하기 편하다.