모노산달로스의 행보

[AWS] ELB(Elastic Load Balancer)의 대한 이해 본문

Infrastructure/AWS

[AWS] ELB(Elastic Load Balancer)의 대한 이해

모노산달로스 2024. 10. 15. 23:28

aws - ELB

 

AWS(Amazon Web Services)

 

AWS(Amazon Web Services)는 아마존이 제공하는 클라우드 컴퓨팅 서비스로, 서버, 스토리지, 네트워크 등을 클라우드를 통해 이용할 수 있습니다. 높은 안정성과 확장성을 갖춘 AWS는 클라우드 분야에서 높은 점유율을 차지하고 있습니다. 스파게티처럼 많은 기술이 존재하여 올바른 사용을 위해서는 꼭 학습이 필요합니다. 반대로 배워두면 많은 클라우드 기술을 사용할 수 있게 됩니다.

 


ELB(Elastic Load Balancer)

What is ELB(Elastic Load Balancer)?

 

ELB(Elastic Load Balancer)확장성과 고가용성을 지원하기 위한 서비스로서 인스턴스로 들어오는 트래픽을 관리해 주는 역할을 합니다. 

 

ELB는 Managed Load Balancer라고도 부르며 aws가 관리하며 업데이트, 고가용성, 유지보수를 보장합니다. 또한 EC2 instance, ASG, ECS 등 aws의 다양한 서비스들과 연동이 가능합니다.

 

aws의 ELB를 사용하는 것이 자체적으로 로드 밸런서를 마련하는 것보다 훨씬 저렴하며 확장성도 뛰어납니다. 해당 포스트를 통해서 ELB의 개념에 대해 차근차근 알아봅시다.

 


 

Load Balancing

What is Load Balancing?

 

Load Balancing이란 aws 서버 혹은 서버 셋으로 트래픽을 다운스트림 EC2 instance(백엔드)로 전달하는 역할을 수행합니다. 이때, 트래픽을 다수의 다운 스트림 인스턴스로 분산하여 전달합니다.

 

더 많은 유저가 연결될수록 EC2 instance로 가는 부하가 분산됩니다. 하지만 유저는 자신이 어떤 인스턴스에 연결되는지는 알 수 없습니다.

 

로드 밸런싱이 필요한 이유
트래픽을 다수의 다운 스트림 인스턴스로 분산하기 위해서 사용합니다
애플리케이션에 DNS를 노출하고 다운스트림 인스턴스 장애를 원활하게 처리하기 위해서 사용합니다(Health Check 메커니즘)

로드 밸런싱의 특징
SSL Termination을 통하여 HTTPS 트래픽을 가질 수 있습니다
Cookie를 통해 Session Affinity(세션 고정성)을 가질 수 있습니다
AZ(Availability Zone)사이에서 High Availability(고가용성)을 가집니다
개인 트래픽과 공공 트래픽으로 분리가 가능합니다

 

로드 밸런싱에 대한 많은 내용들이 한 번에 정리되었습니다. 이제 하나하나 살펴보며 각 특징들을 이해해 봅시다.

 

 


 

 

Type of load balancer on AWS

You can select a type when creating a load balancer in AWS

 

aws에는 4가지 종류의 Load Balancer가 존재합니다. 기본적으로 더 많은 기능을 가지는 최신 로드 밸런서 사용이 권장됩니다.

CLB(Classic Load Balancer)
HTTP, HTTPS, TCP, TLS, SSL을 지원합니다
가장 초기 형태의 로드 밸런서로 현재는 사용을 권장하지 않습니다

ALB(Application Load Balancer)
HTTP, HTTPS, WebSocket을 지원합니다
Application layer에서 동작하는 로드 밸런서입니다

NLB(Network Load Balancer)
TCP, TLS, UDP을 지원합니다
Network layer에서 동작하며, 가장 높은 성능을 가지는 로드 밸런서입니다

GWLB(Gateway Load Balancer)
Network layer에서 동작하며, 보안 및 침입 감지 등 방화벽의 역할을 수행합니다

 

해당 포스트는 ELB의 전반적인 내용을 다루고 있습니다. 따라서, 각 로드 밸런서에 대한 설명은 여기서 자세히 정리했습니다.

 

 


Load Balancer Security Group

How to setup security group for ELB

 

로드 밸런서의 Security Group 생성시 다음과 같이 트래픽을 허용해야 합니다. HTTP/HTTPS를 사용하는 ELB를 예로 들어봅시다.

 

Users는 HTTP/HTTPS를 통해 로드 밸런서에 접속합니다. 따라서 ELB는 HTTP/HTTPS 트래픽을 허용해야 합니다. 인스턴스의 경우 모든 트래픽이 로드 밸런서를 통해서 넘어오도록 해야합니다. 따라서 EC2 instance는 로드 밸런서의 시큐리티 그룹을 참조합니다.

 

 


 

 

Session Affinity(세션 고정성)

What is Session Affinity?

 

Session Affinity(세션 고정성)란 로드 밸런서가 같은 클라이언트의 요청을 같은 인스턴스로 보내는 것을 의미합니다. 위 그림과 같이 user1의 트래픽은 항상 첫 번째 EC2 instance로 흘러가는 것이 그 예시입니다.

 

세션 고정성이 왜 필요할까요? 사용자의 로그인과 같은 중요한 세션 데이터를 유지하기 위해 동일한 인스턴스에 연결할 필요가 있습니다. 이런 경우 고정성을 활성화할 필요가 있습니다. 하지만 일부 인스턴스가 고정 사용자를 가지게 되어 트래픽의 불균형이 생길 수 있어 주의가 필요합니다.

 

Cookie(쿠키)를 통해 세션 고정성을 구현할 수 있습니다. 쿠키는 고정성과 만료 기간이 존재하며, 쿠키가 만료되면 다른 EC2 instance로 트래픽을 전송합니다.

 


 

Cookie

What is Cookie?

 

Cookie는 세션 고정성을 위해서 사용될 수 있습니다. 이를 위한 cookie로 Application-based CookiesDuration-based Cookies두 종류가 존재합니다.

Application-based Cookies

Custom Cookie
타겟 그룹으로부터 생성됩니다
애플리케이션에 필요한 사용자 정의 속성을 가집니다
쿠키 이름은 그룹별로 작성합니다 이때, AWSLAB, AWSALBAPP은 사용하지 않습니다. 이는 ELB에서 사용하는 이름입니다.

Application Cookie
로드 밸런서로부터 생성됩니다
쿠키 이름으로 AWSALBAPP를 사용합니다

두 쿠키는 애플리케이션에서 만료 기간을 정할 수 있습니다

 

Duration-based Cookies

Duration Cookie
로드 밸런서로부터 생성됩니다
쿠키 이름으로 ALB를 위해 AWSALB가 사용됩니다

 

중요한 것은 쿠키의 기반이 둘로 나뉘고 ELB가 선점한 쿠키 이름이 존재한다는 것입니다.

 

 


 

Cross-Zone Load Balancing

What is Cross-Zone Load Balancing

 

Cross-Zone Load Balancing(교차 영역 로드 밸런싱)이란 쉽게 말해 로드 밸런서가 모든 가용 영역의 인스턴스에 트래픽을 분배하는 것입니다. 위 그림에서 100의 트래픽이 10개의 인스턴스에 고르게 분포되어 있습니다. 즉, 두 개의 ELB는 서로 다른 AZ의 모든 인스턴스에 일정한 양의 트래픽을 전달하고 있습니다.

 

교차 영역 로드 밸런싱이 없으면 특정한 AZ에 한정되어 트래픽을 전달하게 됩니다. 만약 EC2 인스턴스 개수가 불균형한 경우 특정 AZ의 인스턴스가 더 많은 트래픽을 전달받게 됩니다.

 

Application Load Balancer
기본적으로 활성화 상태입니다 (타겟 그룹 레벨에서 비활성화 가능)
데이터가 다른 AZ로 넘어가도 비용이 부과되지 않습니다

Network Load Balancer & Gateway Load Balancer
기본적으로 비활성화 상태입니다
데이터가 다른 AZ로 넘어가면 비용이 부과됩니다

 


 

Health Check(상태 체크)

What is Health Check?

 

Health Check(상태 체크)란 ELB가 타겟 인스턴스의 작동이 올바른지 확인하는 과정을 의미합니다. 만약 상태 체크에 실패하는 경우 트래픽을 전송하지 못하기 때문에, 트래픽을 전송하기 전에 꼭 거쳐야 하는 과정입니다.

 

상태 체크는 포트와 라우트에서 이루어집니다. 먼저 특정 endpoint에서 인스턴스의 응답을 기다립니다. 만약 응답받은 상태 코드가 200이 아니라면 해당 인스턴스를 unhealthy 상태로 기록합니다. 그리고 해당 인스턴스에게 트래픽을 보내지 않습니다.

 

 

Connection Draining

What is Connection Draining

 

Connection Draining(연결 드레이닝)이란 인스턴스가 등록 중, 종료 중 혹은 unhealthy 상태인 경우 처리 중인 요청을 완료할 수 있도록 시간을 주는 것을 의미합니다. 즉, 인-플라이트 요청(in-flight requests)을 안정적으로 완료할 수 있도록 도와주는 기능입니다.

 

연결 드레이닝은 1부터 3600초 사이의 값으로 설정할 수 있습니다. 이때, 짧은 요청의 경우 낮은 값으로 설정하는 것이 좋습니다.

 

예를 들어, 1초보다 적은 아주 작은 요청은 30초 정도로 설정합니다. 그렇게 되면 EC2 instance가 빠르게 드레이닝과 교체를 수행합니다. 만약 파일 업로드와 같이 시간이 오래 걸리는 요청은 높은 값으로 설정하여 EC2 instance가 바로 사라지지 않도록 합니다.

 


ELB에 관한 전반적인 내용을 다루어보았습니다. 다음 포스트로는 ELB의 각 타입들인 ALB, NLB, GWLB의 대하여 정리하여 보겠습니다. 그러고 난 뒤 ASG에 대한 내용으로 넘어가겠습니다.

 

Scalability와 High Availability 그리고 ELB와 ASG 모두 연관이 있기에 순서대로 잘 정리하여 공부를 이어나가야겠습니다