로드밸런서

Snoop So·2023년 8월 20일

로드밸런서란

로드밸런서(Load Balancer)는 네트워크 트래픽을 여러 서버 사이에 균등하게 분산하는 역할을 하는 네트워크 장치 또는 소프트웨어이다. 특정 서버에 과부하가 걸리는 것을 방지한다.

L4 로드밸런서, L7 로드밸런서

L4 로드밸런서는 Transport Layer에서 발생하는 트래픽을 분산하는 것을 말한다. 패킷 내용과 관계 없이 오직 IP 주소와 포트 번호를 기반으로 트래픽을 분산한다. TCP, UDP 등의 프로토콜을 활용한다. 상위 계층의 정보를 고려하지 않기 때문에 더 복잡한 분산 요구 사항을 처리할 수 없다.

반면 L7 로드밸런스는 Application Layer에서 일어나는 트래픽의 내용을 분석하여 분산 결정을 내린다. 예를 들어 HTTP 헤더, 쿠키, URL 등의 정보를 활용할 수 있다. HTTP, HTTPS 등의 프로토콜을 활용한다. 더 정교한 로드밸런싱 규칙을 만들 수 있으며, 사용자 경험을 최적화 할 수 있다. 패킷의 내용을 분석해야 하므로 처리가 복잡하고 더 시간이 걸릴 수 있다.
예를 들어, 전자 상거래 어플리케이션에는 제품 디렉터리, 장바구니 및 결제 기능이 있다. Application Load Balancer는 이미지와 비디오를 포함하지만 열린 연결을 유지할 필요가 없는 서버에 제품 검색 요청을 전송한다. 이에 비해 많은 클라이언트 연결을 유지하고 장바구니 데이터를 오랫동안 저장할 수 있는 서버로 장바구니 요청을 전송한다.
NGINX가 제공하는 로드밸런서 기능은 L7 로드밸런서에 해당한다.

로드밸런서 알고리즘

로드밸런서 알고리즘이란 로드 밸런서가 서로 다른 클라이언트 요청 각각에 가장 적합한 서버를 결정하기 위해 따르는 규칙 세트이다.

  1. 정적 로드 밸런싱: 고정된 규칙을 따르며 현재 서버 상태와는 무관하다.
  • 라운드 로빈 방식: 권한 있는 이름 서버가 특수 하드웨어나 소프트웨어 대신 로드 밸런싱을 수행함. 이름 서버는 서버 팜에 있는 여러 서버의 IP 주소를 차례대로 또는 라운드 로빈 방식으로 반환함
  • 가중 기반 라운드 로빈 방식: 우선순위 또는 용량에 따라 각 서버에 서로 다른 가중치를 할당할 수 있다. 가중치가 높은 서버는 이름 서버에서 들어오는 어플리케이션 트래픽을 더 많이 수신한다.
  • IP 해시 방식: 클라이언트 IP 주소에 대해 해싱이라고 하는 수학적 계산을 수행한다. 클라이언트 IP 주소를 숫자로 변환한 다음 개별 서버에 매핑한다.
  1. 동적 로드 밸런싱: 트래픽을 배포하기 전에 서버의 현재 상태를 검사한다.
  • 최소 연결 방법: 연결은 클라이언트와 서버 간의 개방형 통신 채널이다. 클라이언트는 서버에 첫 번째 요청을 전송할 때 서로 활성 연결을 인증하고 설정한다. 최소 연결 방법에서는 로드 밸런서는 활성 연결이 가장 적은 서버를 확인하고 해당 서버로 트래픽을 전송한다.
  • 가중치 기반 최소 연결 방법: 일부 서버가 다른 서버보다 더 많은 활성 연결을 처리할 수 있다고 가정하여, 각 서버 별로 다른 가중치 또는 용량을 할당할 수 있으며 로드밸런서는 용량별 연결이 가장 적은 서버로 새 클라이언트 요청을 전송함
  • 최소 응답 시간 방법: 응답 시간은 서버가 들어오는 요청을 처리하고 응답을 전송하는 데 걸리는 총 시간을 의미한다. 최소 응답 시간 방법은 서버 응답 시간과 활성 연결을 결합하여 최상의 서버를 결정함.
  • 리소스 기반 방법: 리소스 기반 방법에서 로드 밸런서는 현재 서버 부하를 분석하여 트래픽을 배포함. 에이전트라고 하는 특수 소프트웨어는 각 서버에서 실행되며 컴퓨팅 용량 및 메모리와 같은 서버 리소스의 사용량을 계산한다. 그런 다음 로드 밸런서는 해당 서버에 트래픽을 배포하기 전에 에이전트에 충분한 여유 리소스가 있는지 확인한다.

장치 사용 없이 DNS를 활용해 유사하게 로드밸런싱을 하는 방법

  1. 여러 서버 준비: 로드 밸런싱을 위해 트래픽을 분산시킬 서버들이 필요함. 각 서버는 동일한 컨텐츠와 서비스를 제공해야 한다.
  2. DNS 레코드 설정: 도메인 이름 서비스(DNS)를 설정하여 클라이언트 요청을 각 서버로 분산시킨다. A 레코드(AAA 레코드는 IPv6의 경우) 를 사용하여 도메인 이름을 각 서버의 IP 주소와 연결시킬 수 있다.
  3. 라운드 로빈 방식 사용: 많은 DNS 서버는 기본적으로 라운드 로빈 방식으로 여러 A 레코드를 순환한다. 즉, 연속적인 클라이언트 요청은 순서대로 각 서버로 전달된다.

https://aws.amazon.com/ko/what-is/load-balancing/

0개의 댓글