로드 밸런싱이란?
서비스 규모가 커지면 물리/가상 서버 한 대로는 모든 서비스를 수용할 수 없게 됩니다. 서버 한 대로 서비스를 제공할 수 있는 용량이 충분하더라도 서비스를 단일 서버로 구성하면 해당 서버의 애플리케이션, 운영체제, 하드웨어에 장애가 발생했을 때 정상적인 서비스를 제공할 수 없습니다.
서비스 가용성을 높이기 위해 하나의 서비스는 보통 두 대 이상의 서버로 구성하는데, 각 서버의 IP 주소가 다르므로 사용자가 서비스를 호출할 때는 어떤 IP로 서비스를 요청할지 결정해야 합니다. 이런 경우 로드 밸런서를 사용합니다. 로드 밸런서에는 동일한 서비스를 하는 다수의 서버가 등록되고 사용자로부터 서비스 요청이 오면 로드 밸런서가 받아 사용자별로 다수의 서버에 서비스 요청을 분산시켜 부하를 분산합니다. 이러한 작동을 로드 밸런싱이라고 하며, 부하 분산이라고도 합니다. 이와 같은 방식의 서비스를 AWS에서도 제공합니다. 이를 Elastic Load Balancing이라고 합니다.
ELB란?
Elastic Load Balancing은 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산합니다. 등록된 대상의 상태를 모니터링 하면서 상태가 양호한 대상으로만 트래픽을 라우팅 합니다.
ELB의 장점
고가용성 : ELB는 고가용성 아키텍처를 구현하는데 도움을 줍니다. ELB는 다수의 EC2 인스턴스, 컨테이너 등에 트래픽을 분산 시키며 다수의 AZ에 배포된 EC2 인스턴스에 애플리케이션을 배포해 트래픽을 여러 AZ로 분산 시킬 수 있습니다. 이 때문에 하나의 AZ가 모두 다운 돼도 사용자의 애플리케이션은 문제 없이 실행 상태를 유지할 수 있습니다.
탄력성 : ELB의 최대 장점은 자동적 확장성 입니다. 관리자는 인스턴스 추가 또는 삭제를 위한 어떤 수작업도 할 필요가 없으며, 수동으로 뭔가를 할 여지도 없습니다.
안전성 : 통합 인증관리, SSL 복호화, 포트 포워딩 등 다수의 보안 기능을 제공합니다. 현대 웹사이트 운영자는 웹 애플리케이션 레벨에도 암호화 기법을 적용하며, 다수의 보안 정책을 제공합니다.
높은 처리량 : ELB는 트래픽 증가를 처리할 수 있도록 설계되었으며 초당 수백만 개의 요청을 로드 밸런싱할 수 있습니다. 또한, 갑작스럽고 변동이 심한 트래픽 패턴도 처리할 수 있습니다.
작동 방식
로드 밸런서는 클라이언트에 대한 단일 접점으로, 클라이언트에서 오는 트래픽을 허용하고, 하나 이상의 가용 영역에서 등록된 대상(EC2 인스턴스)으로 요청을 라우팅합니다. 또한 로드 밸런서는 등록된 타겟의 상태를 모니터링하고 정상 타겟으로만 트래픽이 라우팅 되도록 합니다. 로드 밸런서가 비정상 타겟을 감지하면, 해당 타겟으로 트래픽 라우팅을 중단합니다. 그런 다음 타겟이 다시 정상으로 감지되면 트래픽을 해당 타겟으로 다시 라우팅합니다.
리스너는 구성한 프로토콜 및 포트를 사용하여 클라이언트의 연결 요청을 확인합니다. 리스너에 대해 정의한 규칙에 따라 로드 밸런서가 등록된 타겟으로 요청을 라우팅하는 방법이 결정됩니다. 각 규칙은 우선 순위, 하나 이상의 작업, 하나 이상의 조건으로 구성됩니다. 규칙에 대한 조건이 충족되면 작업이 수행됩니다. 각 리스너에 대한 기본 규칙을 정의해야 하며, 필요에 따라 추가 규칙을 정의할 수 있습니다.
각 타겟 그룹은 지정한 프로토콜과 포트 번호를 사용하여 EC2 인스턴스 같은 하나 이상의 등록된 타겟으로 요청을 라우팅합니다. 여러 대상 그룹에 타겟을 등록할 수 있습니다. 타겟 그룹 기준으로 상태 확인을 구성할 수 있습니다. 로드 밸런서의 리스너 규칙에서 지정한 타겟 그룹에 등록된 모든 타겟에서 헬스 체크를 수행합니다.
ELB의 다양한 유형
Application Load Balancer
Application Load Balancer는 OSI 모델의 레이어 7에 해당하며, HTTP와 HTTPS를 지원합니다. 로드 밸런서는 요청을 받으면 우선 순위에 따라 리스너 규칙을 평가하여, 적용할 규칙을 결정한 다음 규칙 작업의 타겟 그룹에서 타겟을 선택합니다. 애플리케이션 트래픽의 콘텐츠를 기반으로 다른 타겟 그룹에 요청을 라우팅하도록 리스너 규칙을 구성할 수 있습니다.
ALB에서는 헤더 수정이 가능합니다. 예를 들어, X-Forwarded-For 헤더에 클라이언트 IP주소를 넣듯 필요한 정보를 헤더로 삽입할 수 있습니다.
또한 ALB의 호스트 기반 라우팅을 통해 HTTP 헤더의 Host 필드에 따라 클라이언트 요청을 라우팅 할 수 있고, 경로 기반 라우팅을 통해 HTTP 헤더의 URL 경로에 따라 클라이언트 요청을 라우팅 할 수 있습니다.
Network Load Balancer
Network Load Balancer는 TCP 로드 밸런서라고 부르며, OSI 모델의 레이어 4에서 작동합니다. 로드 밸런서가 연결 요청을 받으면 기본 규칙의 타겟 그룹에서 대상을 선택합니다. 리스너 구성에 지정된 포트에서 선택한 타겟에 대한 TCP 연결을 열려고 시도합니다.
TCP 트래픽의 경우, 로드 밸런서는 프로토콜, 원본 IP 주소, 원본 포트, 타겟 IP 주소, 타겟 포트, TCP 시퀀스 번호에 따라 흐름 해시 알고리즘을 사용하여 타겟을 선택합니다. 클라이언트로부터의 TCP 연결은 소스 포트와 시퀀스 번호가 서로 다르므로 다른 타겟에 라우팅될 수 있습니다. 각 TCP 연결은 연결 수명 동안 하나의 타겟에 라우팅됩니다.
UDP 트래픽의 경우, 로드 밸런서는 프로토콜, 원본 IP 주소, 원본 포트, 타겟 IP 주소, 타겟 포트에 따라 흐름 해시 알고리즘을 사용하여 타겟을 선택합니다. UDP 흐름은 소스와 목적지가 동일하기 때문에 수명이 다할 때까지 일관되게 단일 타겟으로 라우트됩니다. 서로 다른 UDP 흐름에는 서로 다른 소스 IP 주소와 포트가 있으므로 다른 타겟으로 라우팅될 수 있습니다.
다중 AZ의 활용
Auto Scaling과 ELB를 활용해 애플리케이션을 구현할 때는 가능한 다중 AZ를 기반으로 할 것을 권장합니다. 왜냐하면 AZ가 고가용성을 구현하기 위한 기본 구조이기 때문입니다. ELB가 트래픽을 AZ간에 균등하게 배분할 수 있으므로, AWS 생태계를 기반으로 서비스를 구현할 때 다중 AZ 구조의 활용은 당연합니다.
댓글