[AWS] Network - Elastic Load Balancing

bluewhale·2021년 6월 25일
0

AWS

목록 보기
15/19
post-thumbnail

Elastic Load Balancing

AWS Elastic Load Balancing는 인바운드 트래픽을 다양한 AZ에 속한 EC2 인스턴스, 컨테이너(ECS), AWS Lambda 등으로 분배하는 로드밸런싱 서비스이다. ELB는 서로 다른 EC2 인스턴스에 대한 하나의 엔드포인트를 제공한다. 사용자는 실제 요청이 처리되는 백엔드 인스턴스에 대한 고려 없이, 동일한 엔드포인트로 요청을 전송할 수 있다.

ELB는 크게 Applcation Load BalancerNetwork Load Balancer로 구분되며, 구성 방식에 따라 internalexternal로 나뉜다.

특징

Health Check

ELB의 가장 중요한 특징으로, 타겟 그룹에 대한 헬스 체크를 통해 현재 정상적으로 작동하는 백엔드 인스턴스로만 트래픽을 분배한다. 이를 통해, 하나의 인스턴스에서 발생한 장애가 전파되는 것을 방지하여 고가용성을 확보할 수 있다.

AWS-managed

ELB는 AWS에서 관리하는 서비스로, 별도의 로드 밸런싱 서버를 설치/관리할 필요가 없다는 점에서 사용이 쉽고 간편하다. 또한, ELB는 복수 개의 AZ에 분산되어 존재하고 scale-up을 지원하여 높은 안정성을 갖는 것이 특징이다.

또한, 기본적으로 Cross-Zone Load Balancing 기능을 제공하여, DNS 캐싱 등의 영향으로 하나의 AZ에 트래픽이 집중되는 현상을 방지하여 높은 서비스 안정성을 보장한다. Cross-Zone LB에서는 서로 다른 AZ에서 발생하는 data transfer 비용이 발생하지 않아 비용 효율적이다.

CloudWatch 연동

ELB는 1분 단위로 로드 밸런서와 타겟 그룹에 대한 메트릭을 제공한다. 이를 통해, CloudWatch와 연동하고 안정적으로 서비스를 모니터링 할 수 있다.

HTTP/2 지원

ALB에서는 별도의 설정 없이 HTTP/2를 지원하기 때문에 웹 브라우저에서 페이지 로딩시간을 개선할 수 있다.


Application Load Balancer

ALB(Application Load Balancer)는 L7 계층의 로드 밸런서로 L4 계층의 NLB과 달리 path, hostname 등 어플리케이션 계층의 정보를 기반으로 트래픽을 분배할 수 있다. ALB의 리스너는 현재 HTTP/HTTPS, Websocket 프로토콜을 지원한다.

구성요소

ALB는 크게 load balancer, listener, target group으로 구성된다.

Load Balancer

로드 밸런서는 사용자의 요청이 최초로 도착하는 엔드포인트로, 요청을 처리할 수 있는 백엔드 서버로 트래픽을 분배하는 역할을 한다.

Listener

리스너는 프로토콜과 포트를 기반으로 요청을 검사하고 이를 적절한 타겟으로 전달하는 기능을 수행한다. 모든 로드 밸런서는 최소 1개 이상의 리스너를 필요로 하며, 최대 10개까지 설정할 수 있다.

Rule

리스너 룰은 리스너와 타겟 그룹 사이의 트래픽 분배를 위한 라우팅 규칙에 해당한다. 룰은 우선순위, 액션, 조건 등의 정보를 담고 있으며, 기본적으로 조건이 만족되었을 때, 지정된 액션을 수행하는 방식으로 작동한다. 리서너 룰은 path, host, HTTP header, source IP, query parameter 등의 다양한 조건을 제공한다.

리스너 룰과 관련된 상세한 설명은 공식문서: Listener Rules에서 확인할 수 있다.

리스너는 최초 생성 시, default rule을 포함하고 있다. 디폴트 룰은 별도의 조건을 가질 수 없으며, 다른 룰로 처리되지 않고 남은 모든 요청에 적용된다.

Target Group

타겟 그룹은 요청을 실제로 처리하는 타겟을(ex, EC2)을 포함하는 논리적 그룹이다. 타겟 그룹은 로드밸런서와 독릭적으로 존재하며, 로드밸런서와 자유롭게 연동할 수 있는 것이 특징이다.

타겟은 실제 요청을 처리하는 백엔드 서버로, EC2 인스턴스, 컨테이너 어플리케이션 등에 해당한다. 하나의 타겟은 여러 개의 타겟 그룹에 등록될 수 있다. 타겟의 등록은 포트 단위로 이뤄지기 때문에, 하나의 인스턴스의 복수의 포트를 동일한 타겟 그룹으로 등록할 수 있다.

추가적으로, ELB의 헬스체크 기능은 타겟 그룹 단위로 실행된다.

Request Header

X-Forwarded-For

ALB를 거친 요청은 Source IP 주소가 로드 밸런서의 IP로 치환된다. 따라서, ALB에서는 모든 요청에 X-Forwarded-For 헤더를 추가하여 사용자의 IP 주소를 식별할 수 있도록 하였다. 예를 들어, 203.0.113.7의 IP 주소를 갖는 사용자로부터 요청이 전달된 경우, 요청 헤더에 다음과 같은 값이 포함되게 된다.

X-Forwared-For 헤더의 값은 comma(,)를 구분자로 사용한다. 내부적으로 프록시를 거치게 되면 X-Forwarded-For 헤더에 여러 개의 IP 주소가 포함될 수 있는데, 이 때는 가장 왼쪽에 위치한 주소가 실제 사용자의 IP 주소에 해당한다.

X-Forwarded-Port

X-Forwarded-Port 헤더는 앞서 소개한 X-Forwarded-For 헤더와 거의 유사하며, 사용자의 destination port를 식별하기 위해 로드 밸런서에 의해 추가된 헤더이다.


Network Load Balancer

NLB(Network Load Balancer)는 L4 계층의 로드 밸런서로, TCP 프로토콜을 지원한다.

References

Elastic Load Balancing 심층 분석 (ALB을 중심으로) - 오길재 테크니컬 어카운트 매니저(AWS 코리아)

AWS Elastic Load Balancing Introduction

공식문서: What is an Application Load Balancer?

profile
안녕하세요

0개의 댓글