본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Elastic Load Balancing; ELB; AWS ELB
들어오는 트래픽을 하나 이상의 가용 영역에 있는 EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수 같은 여러 대상에 자동으로 분산하고, 정상인 대상으로만 보내는 AWS 관리형 부하 분산 서비스

Elastic Load Balancing(ELB)은 클라이언트의 단일 접점이 되어 뒤쪽 대상들에 트래픽을 나눈다. 등록된 대상의 상태를 계속 확인해 비정상 대상은 빼고, 트래픽 증감에 맞춰 로드 밸런서 용량을 자동으로 늘리고 줄인다. 대상을 여러 가용 영역에 두면 한 가용 영역의 장애가 서비스 전체 장애로 번지지 않으므로 고가용성 설계의 기본 구성 요소이다.

ELB에는 Application Load Balancer(ALB), Network Load Balancer(NLB), Gateway Load Balancer(GWLB), 이전 세대인 Classic Load Balancer(CLB)가 있다. SAA-C03 시험 안내서는 "Application Load Balancer(계층 7)와 Network Load Balancer(계층 4)와 Gateway Load Balancer 비교"를 직접 언급하므로 유형별 차이를 정확히 알아야 한다.

Application Load Balancer의 리스너, 규칙, 대상 그룹
항목 설명
리스너 설정한 프로토콜과 포트로 클라이언트 연결 요청을 받는 프로세스
리스너 규칙 ALB에서 우선순위, 조건, 작업으로 요청을 어느 대상 그룹으로 보낼지 정함
대상 그룹 요청을 받을 대상(인스턴스, IP, Lambda 함수, ALB)의 묶음. 상태 확인은 대상 그룹 단위로 설정
상태 확인 대상에 주기적으로 요청을 보내 정상 대상에만 트래픽을 보냄
로드 밸런서 노드 활성화한 가용 영역마다 만들어지는 로드 밸런서의 실체
체계(scheme) 인터넷 연결(internet-facing) 또는 내부(internal)
요금 사용한 만큼 지불. 시간 요금과 용량 단위 요금
항목 Application Load Balancer Network Load Balancer Gateway Load Balancer Classic Load Balancer
OSI 계층 7계층(애플리케이션) 4계층(전송) 3계층(네트워크) 4·7계층(이전 세대)
프로토콜 HTTP, HTTPS(대상 쪽 HTTP/2, gRPC 프로토콜 버전 지원) TCP, UDP, TLS, TCP_UDP, QUIC 모든 IP 패킷(대상과는 GENEVE, 포트 6081) TCP, SSL/TLS, HTTP, HTTPS
라우팅 기준 경로, 호스트, 헤더, 메서드, 쿼리 문자열, 출발지 IP 흐름 해시(프로토콜, 출발지·목적지 IP와 포트 등) 흐름 고정(5·3·2튜플) 단순 분산
대상 유형 인스턴스, IP, Lambda 함수 인스턴스, IP, ALB 인스턴스, IP(가상 어플라이언스) 인스턴스
고정 IP 없음(DNS 이름 사용) 가용 영역별 고정 IP, 서브넷마다 탄력적 IP 연결 가능 해당 없음(엔드포인트로 연결) 없음
성능 특징 콘텐츠 기반 라우팅 초당 수백만 요청, 초저지연 어플라이언스 무리를 투명하게 확장 권장하지 않음
대표 용도 웹 애플리케이션, 마이크로서비스, 컨테이너 게임, IoT, 고정 IP가 필요한 서비스, PrivateLink 서비스 앞단 방화벽, IDS/IPS, 심층 패킷 검사 기존 EC2-Classic 시절 구성

AWS는 CLB를 이전 세대로 분류하고 현재 세대 로드 밸런서로 옮기라고 권장한다.

Application Load Balancer

편집 원본 편집
  • OSI 7계층에서 동작하며 요청 내용을 보고 라우팅한다. 경로 기반(/api/*는 API 서비스, /images/*는 이미지 서비스), 호스트 기반(a.example.com과 b.example.com을 하나의 ALB로) 라우팅이 대표적이다.
  • 리디렉션(HTTP → HTTPS), 고정 HTTP 응답 반환 같은 작업을 규칙으로 처리한다.
  • 대상 유형으로 Lambda 함수를 등록할 수 있어 서버리스 백엔드 앞에 둘 수 있다.
  • 한 인스턴스에서 여러 애플리케이션이 서로 다른 포트로 실행될 때 각 포트를 다른 대상 그룹으로 등록할 수 있어 컨테이너(동적 포트 매핑)와 잘 맞는다.
  • 리스너 규칙의 인증 작업으로 OIDC 호환 IdP나 아마존 Cognito 사용자 풀(소셜 로그인, SAML 기업 ID)로 사용자를 인증하게 할 수 있다.
  • AWS WAF 웹 ACL을 연결해 애플리케이션 계층 공격을 막는다.
  • 기본 라우팅 알고리즘은 라운드 로빈이고, 미처리 요청 최소(least outstanding requests)나 가중 무작위를 고를 수 있다.

Network Load Balancer

편집 원본 편집
  • OSI 4계층에서 동작하며 초당 수백만 요청을 처리하는 초저지연 로드 밸런서이다.
  • 활성화한 가용 영역마다 네트워크 인터페이스와 고정 IP를 가지며, 인터넷 연결 NLB는 서브넷마다 탄력적 IP를 하나씩 연결할 수 있다. 고객 방화벽에 IP를 등록해야 하는 요구에 맞는다.
  • TCP 연결 하나는 연결이 끝날 때까지 같은 대상으로 간다. UDP 흐름도 출발지·목적지가 같으면 같은 대상으로 간다.
  • 클라이언트 출발지 IP 보존이 가능하다.
  • 보안 그룹을 연결할 수 있다. 대상의 보안 그룹에서 NLB 보안 그룹을 참조하면 NLB를 거친 트래픽만 받게 할 수 있다.
  • VPC 엔드포인트의 엔드포인트 서비스(AWS PrivateLink)를 만들 때 앞단에 두는 로드 밸런서이다.
  • ALB를 대상으로 등록할 수 있어, NLB의 고정 IP와 ALB의 7계층 라우팅을 함께 쓰는 구성이 가능하다.

Gateway Load Balancer

편집 원본 편집
  • OSI 3계층에서 모든 포트의 IP 패킷을 받아, 등록된 방화벽·침입 탐지 및 방지·심층 패킷 검사 같은 서드파티 가상 어플라이언스로 보낸다.
  • 트래픽의 단일 출입구가 되는 투명한 네트워크 게이트웨이와 로드 밸런서를 합친 형태로, 수요에 따라 어플라이언스를 늘리거나 줄인다.
  • 어플라이언스와는 GENEVE 프로토콜(포트 6081)로 패킷을 주고받는다.
  • 다른 VPC의 트래픽은 Gateway Load Balancer 엔드포인트(VPC 엔드포인트의 한 유형)를 라우팅 테이블의 다음 홉으로 지정해 보낸다. 엔드포인트와 애플리케이션 서버는 서로 다른 서브넷에 둔다.
  • 흐름 고정(flow stickiness)으로 같은 흐름의 패킷이 같은 어플라이언스로 가게 한다.

대상 그룹과 상태 확인

편집 원본 편집
  • 대상은 여러 대상 그룹에 등록할 수 있고, 상태 확인은 대상 그룹마다 설정한다.
  • 상태 확인에 실패한 대상에는 트래픽을 보내지 않고, 다시 정상이 되면 트래픽을 재개한다.
  • 아마존 EC2 Auto Scaling 그룹에 대상 그룹을 연결하면 새로 시작된 인스턴스는 자동 등록되고 종료되는 인스턴스는 자동 해제된다. Auto Scaling 그룹이 ELB 상태 확인을 쓰도록 설정하면, 로드 밸런서가 비정상으로 판단한 인스턴스를 교체한다.

연결 드레이닝(등록 취소 지연)

편집 원본 편집

대상을 등록 해제하거나 Auto Scaling이 축소할 때 ELB는 그 대상으로 새 요청을 보내지 않고, 처리 중인 요청이 끝나도록 등록 취소 지연(deregistration delay) 시간만큼 기다린다. 기본값은 300초이고 0~3600초 범위로 바꿀 수 있다. 이 동안 대상 상태는 draining이다. CLB에서는 같은 기능을 연결 드레이닝(connection draining)이라고 부른다. 요청이 짧은 서비스라면 값을 줄여 배포·축소를 빠르게 한다.

고정 세션(sticky session)은 같은 클라이언트의 요청을 같은 대상으로 계속 보내는 기능이다. 서버에 세션 상태가 있는 레거시 애플리케이션에 쓴다.

  • ALB는 대상 그룹 수준에서 켜며, 로드 밸런서가 만드는 기간 기반 쿠키(AWSALB)와 애플리케이션 쿠키를 따르는 애플리케이션 기반 쿠키를 지원한다.
  • NLB도 대상 그룹 속성으로 고정 세션을 지원한다.
  • 고정 세션은 부하를 고르게 나누지 못하게 만들 수 있으므로, 새로 설계한다면 세션을 아마존 ElastiCache나 다이나모DB 같은 외부 저장소에 두고 서버를 무상태로 만드는 편이 낫다.

교차 영역 로드 밸런싱

편집 원본 편집

교차 영역 로드 밸런싱(cross-zone load balancing)을 켜면 각 가용 영역의 로드 밸런서 노드가 모든 활성 가용 영역의 대상에 트래픽을 나눈다. 끄면 노드는 자기 가용 영역의 대상에만 보낸다.

AWS 문서의 예처럼 가용 영역 A에 대상 2개, B에 대상 8개가 있고 각 노드가 트래픽의 50%를 받는다면, 켰을 때는 대상 10개가 각각 10%씩 받고, 껐을 때는 A의 대상 2개가 각각 25%, B의 대상 8개가 각각 6.25%를 받는다.

유형 기본값 비고
ALB 로드 밸런서 수준에서 항상 켜짐 대상 그룹 수준에서 끌 수 있음
NLB 꺼짐 생성 후 언제든 켜고 끌 수 있음
GWLB 꺼짐 생성 후 켜고 끌 수 있음
CLB API·CLI로 만들면 꺼짐, 콘솔로 만들면 켜짐

SSL/TLS 오프로딩

편집 원본 편집

HTTPS(ALB)나 TLS(NLB) 리스너에서 암호화 연결을 로드 밸런서가 종료하고, 대상에는 복호화된 요청을 보낼 수 있다. 이를 SSL 오프로딩이라 하며 대상 서버의 암복호화 부담을 덜고 인증서 관리를 한곳으로 모은다. 인증서는 AWS Certificate Manager에서 발급해 리스너에 연결하면 자동 갱신된다. 종단 간 암호화가 요구되면 로드 밸런서에서 대상까지도 HTTPS·TLS로 다시 암호화한다.

  • URL 경로나 호스트 이름에 따라 다른 서비스로 보내야 하면 ALB이다. 마이크로서비스, 컨테이너, Lambda 대상도 ALB이다.
  • 고정 IP·탄력적 IP가 필요하거나, TCP·UDP 트래픽, 초저지연·초대규모 요청이면 NLB이다. PrivateLink 엔드포인트 서비스 앞단도 NLB이다.
  • 서드파티 방화벽·IDS 어플라이언스를 투명하게 확장 배치하라는 요구는 GWLB이다. GENEVE 6081이 단서이다.
  • 가용 영역 간 대상 수가 불균형해 일부 대상만 과부하라면 교차 영역 로드 밸런싱을 켠다.
  • 축소나 배포 중 처리 중인 요청이 끊기면 등록 취소 지연(연결 드레이닝)을 확인한다.
  • 상태 저장 레거시 앱은 고정 세션으로 버티되, 근본 해결은 세션 외부화와 무상태 설계이다.
  • 인증서 관리 부담을 줄이려면 ACM 인증서를 로드 밸런서 리스너에 붙여 TLS를 종료한다.