[AWS] Elastic Load Balancer 본문
ELB?
다수의 서비스에 트래픽을 분산시켜주는 서비스이며, 직접 트래픽을 발생시켜 인스턴스가 살아있는지 체크한다. 여러 가용영역에 분산이 가능하기 때문에 애플리케이션 가용성을 향상시키고 HTTP, HTTPS, TCP, SSL, gRPC 등 다양한 프로토콜을 지원한다.
또한, AWS의 CloudWatch 기능을 이용하여 로그와 메트릭을 모니터링할 수 있으며, Auto Scaling 기능과 결합하여 트래픽이 증가할 때 자동으로 인스턴스를 추가하거나 제거하면서 애플리케이션 가용성을 유지한다.
지속적으로 IP가 변경되기 때문에 도메인 기반으로 사용하는 것이 편리하다.
대표적으로 4가지 종류가 존재한다.
- Application Load Balancer (ALB)
- Network Load Balancer (NLB)
Classic Load Balancer (CLB)현재는 잘 사용되지 않는다- Gateway Load Balancer (GWLB)
각 CLB를 제외한 각각의 ELB를 살펴보기 전에 AWS ELB의 구성 요소에 대해 먼저 알아보자
ELB 구성 요소
Load Balancer
여러 대의 EC2 인스턴스, IP주소, 람다 등을 사용하여 트래픽을 대상 그룹에 있는 인스턴스로 분산시켜 애플리케이션의 가용성을 유지하는 역할을 한다. 로드 밸런서는 사용자 요청을 받아 애플리케이션 서버로 전달하고, 애플리케이션 서버의 응답을 사용자에게 반환한다.
Listener
로드 밸런서에서 사용할 포트와 프로토콜을 설정하는 구성 요소로, 로드 m 밸런 서에서 클라이언트 요청을 수신하고, 해당 요청을 처리할 대상 그룹을 선택하는 역할을 한다.
리스너는 로드 밸런서에 연결된 프로토콜과 포트를 사용하여 클라이언트 요청을 수신하고, 해당 요청을 대상 그룹으로 라우팅한다.
Target Group
로드 밸런서에서 분산할 대상의 잡합을 정의하는 구성 요소. 대상 그룹의 인스턴스에 대해 정적 또는 동적으로 구성할 수 있으며, 라우팅 규칙에 따라 요청을 받아들일 대상 그룹을 선택한다.
로드 밸런서는 대상 그룹에 포함된 대상들의 상태를 정기적으로 확인하여 장애 발생 대상을 자동으로 제외하고, 정상적으로 동작하는 대상에만 요청을 전달한다.
ELB의 동작 방식
로드 밸런서에서 클라이언트 요청을 수신하면, 로드 밸런서는 클라이언트와 연결을 유지하며, 요청을 수신하기 위해 리스너를 등록한다.
수신한 클라이언트 요청을 처리할 대상 그룹을 선택한다. 대상 그룹은 인스턴스, IP 주소, 람다, ALB 등 여러 유형의 대상으로 구성된다.
선택된 대상 그룹에서 요청을 처리할 대상을 선택하고 해당 대상으로 요청을 분산한다. 이때 로드 밸런서는 각 대상의 가용성 상태를 모니터링하고 가용하지 않은 대상을 제외한다.
분산된 요청을 대상에서 처리하고 클라이언트에 응답을 반환한다. 이때 응답은 로드 밸런서에서 수신한 것으로 반한된다.
Cross-zone Load Balancing
ELB는 여러 가용 영역에서 로드 밸런서 노드를 실행하며, 각 노드는 가용 영역 내 대상 그룹으로 요청을 분산한다. 이때 대상 그룹에 등록된 대상이 여러 가용 영역에 걸쳐 있다면 기본적으로 로드 밸랜서는 동일한 비중으로 가용 영역 내에 있는 대상으로 트래픽을 분산한다.
하지만 가용 영역 내 인스턴스 수량이 불균형할 때는 일부 인스턴스로 트래픽이 몰리고 다른 인스턴스는 유휴 상태가 되는 불균형 문제가 발생할 수 있다.
이런 불균형 문제를 해결하는데 ELB 교차 영역 로드 밸런싱을 활용할 수 있다. 교차 영역 로드 밸런싱은 여러 가용 영역에 걸쳐 있는 EC2 인스턴스나 컨테이너 등 대상을 더 효과적으로 로드 밸런싱하는 기능이다.
이런 교차 영역 로드 밸런싱은 가용 영역별로 인스턴스 수량이 불균형하게 위치할 때 트래픽 비중을 보정할 수 있으며, 트래픽을 분산하는 기준이 가용 영역이 아닌 대상 그룹에 속한 자원을 기준으로 균일한 비중의 로드 밸런싱을 수행할 수 있다.
ALB 사용 시 기본적으로 활성화되어 있으나, NLB는 비활성화되어 있다. 또한, 교차 영역 로드 밸런싱은 대상 그룹 수준에서 구성할 수 있으므로 필요에 따라 각 대상 그룹 별로 별도로 구성할 수 있다.
단, 사용할 때 가용 영역 간 통신 비용이 발생할 수 있다.
ALB
ALB는 AWS에서 제공하는 L7 로드 밸런서로, HTTP/HTTPS 같은 웹 애플리케이션 프로토콜을 지원한다. ALB는 대상 그룹 단위로 트래픽을 분산하며, 각 대상 그룹은 ALB가 요청을 전달할 대상으로 라우팅하는 기능을 제공한다.
ALB 특징
- HTTP 헤더를 확인하여 다양한 라우팅 기능을 제공한다
- 경로 기반 라우팅
- 호스트 기반 라우팅
- 쿼리 문자열 기반 라우팅
- Auto Scailing과 함께 사용하여 확장성 있는 애플리케이션을 구성할 수 있다
- 대상 그룹 내 인스턴스에 대해 상태 검사를 수행하고, 문제가 발생하면 자동으로 장애 조치를 취할 수 있다
- Amazon CloudWatch와 통합되어 로그 및 지표 데이터를 수집하고 모니터링 및 분석이 가능하다
NLB
NLB는 AWS에서 제공하는 L4 로드 밸런서로, TCP/UDP/TLS 프로토콜을 지원한다. ALB와는 달리, 클라이언트와 로드 밸런서 간 연결을 TCP 레벨에서 유지하므로 대규모 트래픽을 처리할 수 있다.
동일한 IP 주소에서 여러 대상 그룹을 지원할 수 있다.
NLB 특징
- 높은 처리량
- 빠른 응답 시간
- 높은 가용성 : 여러 가용 영역에서 인스턴스를 실행하고 매우 빠른 인스턴스 검색을 수행하여 신속한 장애 복구가 가능
- IP 주소 보존 : 클라이언트 IP 주소를 원래 IP 주소로 보존할 수 있다. 이는 클라이언트 IP 주소를 유지하며 로드 밸런싱을 수행할 수 있다는 것을 의미한다
- 모니터링
GWLB
주로 가상 어플라이언스 배포/확장 관리를 위해 사용된다. 통상적으로 네트워크 트래픽을 서드 파티의 방화벽/어플라이언스 장비로 부하분산 처리하는 로드 밸런서다.
GWLB는 VPC 내에서 실행되는 애플리케이션의 가용성과 확장성을 향상시키는데 사용되며, TCP 및 UDP 프로토콜을 지원하여 다양한 유형의 애플리케이션에 유연하게 적용할 수 있다.
'Public Cloud' 카테고리의 다른 글
[AWS] Elastic Block Storage (EBS) (0) | 2024.07.16 |
---|---|
[AWS] Slack을 사용해서 EC2 인스턴스 조작하기 (1) | 2024.07.15 |
[AWS] Elastic Network Interface (ENI) (0) | 2024.07.13 |
Jenkins 에서 빌드한 Jar 파일 EC2 Instance 에 배포해서 실행시키기 (0) | 2024.02.22 |
AWS EC2 프리티어 환경에서 Jenkins 실행시키기 (0) | 2024.02.21 |