[AWS] ELB 이해하기

calm0_0·2023년 10월 11일
0

AWS

목록 보기
1/2
post-thumbnail

ELB(Elastic Load Balancer)


ELB(Elastic Load Balancer)는 AWS의 로드 벨런서 서비스이다.

Load Balancer는 트래픽을 하나의 경로로 받아 다수의 인스턴스(서버)에 분산하는 역할을 한다. 즉, 네트워크 상에서 서버에 부하(Load)가 몰리지 않도록 적절히 분산(Balancing)해준다.

ELB란 애플리케이션에서 발생하는 트래픽을 여러 대상에 자동으로 분산하여 안정적인 서버 환경을 운용하는데 도움을 주는 서비스이다. EC2, 컨테이너, 람다 등 다양한 서비스와 연계하여 부하를 분배할 수 있다.

  • 즉, 다수의 인스턴스들을 로드 벨런서에서 관리하며, 트래픽을 하나의 경로로 받아 분산해준다.
  • 그래서 사용자는 각 인스턴스의 주소가 아닌 로드 벨런서의 주소로 접근한다.
  • 특정 인스턴스에 문제가 생겨도 로드 벨런서가 알아서 해당 인스턴스에 트래픽을 전송하지 않는다.
  • 새로운 인스턴스가 등록되면 로드 벨런서가 알아서 해당 인스턴스에 트래픽을 보낸다.

ELB의 구성 요소


ELB는 VPC(AWS의 사용자 정의 네트워크)에 탑재되며, 사용자의 요청을 받고 이를 VPC 내의 리소스(EC2 등)에 적절히 분산한다. 그래서 ELB는 외부 요청을 받는 리스너와 요청을 분산/전달할 리소스의 집합인 대상 그룹으로 구성되며, ELB는 다수의 리스너와 대상 그룹을 가질 수 있다.

리스너(Listener)

리스너(Listener)는 사용자의 요청을 받아 적절한 대상 그룹으로 라우팅하는 역할을 한다.

  • ELB는 최소 하나 이상의 리스너가 필요하며, 여러 개의 리스너를 가질 수 있다.
  • 리스너 룰(rule)을 통해 대상 그룹으로 트래픽 분배를 위한 라우팅 규칙을 설정할 수 있다.
  • SSL 인증서를 게시하여 SSL Offload 를 실시할 수 있다.

TLS(SSL) Offload 는 애플리케이션 서버에서 TLS 핸드쉐이크를 수행하지 않고, 트래픽이 서버로 전달되기 전 로드밸런서에서 SSL 인증서를 관리하고 TLS 핸드쉐이크를 수행하는 것을 말한다. (ELB에서 인증서를 등록 -> 클라이언트와 TLS 핸드쉐이크를 수행 -> 트래픽이 EC2 인스턴스 또는 컨테이너로 전달)

대상 그룹(Target Group)

리스너가 전달한 요청을 처리하기 위한 부하/분산 대상들의 모임이다.

  • 대상 그룹에 등록된 EC2의 각종 정보가 담겨있다. (인스턴스ID, 포트, 가용 영역 등)
  • 대상 그룹 내 EC2들이 전달받은 요청을 처리할 수 있는지 확인하는 헬스 체크 기능이 있다.

Connection Time Out(유휴 제한 시간)

사용자가 ELB를 거쳐 EC2에 접근하고 서비스에 접속하여 커넥션을 맺고 통신을 한다. 그러다가 더 이상 통신이 없을 때, Connection Time Out(유휴 제한 시간)이 작동하게 되고, 이 시간이 지나면 커넥션이 사라진다.


ELB의 장정 및 기능


고가용성

ELB는 여러 가용 영역에 있는 리소스에 트래픽을 분산시켜 대량의 트래픽에도 병목 현상이 거의 일어나지 않으며, 정상 상태의 인스턴스에만 트래픽을 수신하게 하기 때문에 고가용성을 확보할 수 있다.

고가용성(High Availability)이란 애플리케이션 시스템이 오랫동안 지속적으로 정상 운영이 가능한 특성을 의미한다.

탄력성

ELB는 네트워크 트래픽 변화에 빠르게 대처가 가능하다. Auto Scaling과 연동하여 사용하면, 트래픽의 변화에 따라 자동으로 리소스를 확장/축소할 수 있다.

도메인 기반 접근

ELB는 자동 확장/축소 함에 따라 ELB 접근 IP가 변경된다. 때문에 ELB에 접근하는 경우 ELB를 생성할 때에 생성되는 도메인 이름을 사용해 접근하도록 구성해야 한다.

Cross-Zone Load Balancing

위와 같이 각 가용 영역(AZ) 별로 로드 밸런서 노드와 EC2를 연결했다. 이 상태에서 AZ 별로 부하를 분산하면 이렇듯 부하가 불균형하다는 것을 알 수 있다.

이를 보완하기 위한 기능이 교차 영역 로드밸런싱(Cross Zone Load Balancing)이다. 위와 같이 AZ 별 부하/분산 대상의 수가 불균형할 때, 교차 영역 로드 밸런싱을 활성화하면 AZ를 가리지 않고 고르게 트래픽을 분산한다.

(ALB의 경우 기본적으로 활성화, NLB의 경우 기본적으로 비활성화)

Health Check

대상 그룹 안에 있는 인스턴스들의 상태를 확인하는 것을 말한다. 대상 그룹에 연결된 인스턴스에 직접 트래픽을 발생시켜 인스턴스가 정상 작동하는지 체크하며, 상태 체크에 통과하지 못한 인스턴스는 더 이상 요청을 받지 못하게 된다.

이렇게 인스턴스의 상태를 자동으로 감지해 문제가 있는 것들은 배제하고, 인스턴스가 회복되면 자동으로 감지하여 다시 인스턴스에 트래픽을 보내준다.

이를 통해 장애가 전파되는 것을 방지하여 고가용성을 확보할 수 있다.

SSL 지원

ELB 안에서 SSL 암호화를 간편하게 구성하여 지원한다. 따라서 SSL 증명서를 ELB 내부의 인스턴스들에 하나하나 설정할 필요가 없다. HTTPS 통신의 암호화/복호화 과정을 각 인스턴스에서 수행할 필요가 없으므로, 인스턴스의 부하를 낮출 수 있다. 또한 SSL 증명서를 ELB에서만 관리하면 되기 때문에 운용 측면에서도 장점을 가진다.


ELB 종류


ALB(Applicaiton Load Balancer)

ALB는 OSI 7 Layer의 Applicaiton Layer에서 작동하는 로드 밸런서이다. HTTP, HTTPS 등의 트래픽 로드 밸런싱에 적합하며, HTTP의 주요 특징인 HTTP Header, 요청 메서드 등에 기준을 적용하여 기준에 맞는 적절한 대상 그룹을 라우팅할 수 있는 로드 벨런서이다.

  • 지능적인 라우팅 기능 : 단순 부하/분산뿐만 아니라 HTTP의 헤더 정보를 이용해 부하/분산을 실시할 수 있다. HTTP 헤더 값, path, port 등에 따라 해당 요청을 어느 대상 그룹으로 보낼지 판단할 수 있다.
  • 대상을 EC2 뿐만 아니라 람다, IP로도 연결이 가능하다.
  • IP 주소가 변동되기 때문에 클라이언트에서 접근하기 위해 도메인을 사용한다.
  • SSL 인증서를 탑재할 수 있어 대상 그룹의 EC2를 대신하여 SSL 암호화/복호화를 대신 진행할 수 있다.

NLB(Network Load Balancer)

NBL는 OSI 7 Layer의 Transport Layer에서 작동하는 로드 벨런서로, TCP/UDP를 사용하는 요청을 받아 부하/분산을 실시한다. 그래서 ALB보다 더 빠르다. 다만 HTTP가 아닌 TCP에서 처리하므로 HTTP 헤더를 해석하지 못한다. 따라서 복잡한 라우팅이 필요하지 않고, 트래픽이 극도로 많은 경우 사용하는 것이 적합하다.

  • ALB와 달리 공인 IP를 고정할 수 있다. 그래서 로드 벨런서에 접근할 때 IP나 도메인 둘 다 사용이 가능하다.

CLB(Classic load Balancer)

CLB는 AWS에서 초기에 제공하던 ELB 서비스이다. 기본적인 로드 밸런서의 역할을 수행하지만, 서버의 기본 주소가 바뀌면 로드 벨런서를 새로 생성해야 하며, 하나의 주소에 하나의 대상 그룹만을 가진다. 또한 데이터를 수정할 수 없어 포트, 헤더 등의 정보를 변경하지 못한다. 지금은 레거시로 분류되어 있다.

GWLB(Gateway Load Balancer)

GWLB는 인스턴스에 도달하기 전에 먼저 트래픽을 체크하여 트래픽 분석, 인증, 로깅 등의 작업을 수행한다.



Reference
https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-ELB-Elastic-Load-Balancer-%EA%B0%9C%EB%85%90-%EC%9B%90%EB%A6%AC-%EA%B5%AC%EC%B6%95-%EC%84%B8%ED%8C%85-CLB-ALB-NLB-GLB
https://aws-hyoh.tistory.com/128
https://www.youtube.com/watch?v=mqtUMduyKjk&list=PLfth0bK2MgIan-SzGpHIbfnCnjj583K2m&index=14&t=1745s
https://kdevkr.github.io/tls-offload/

profile
공부한 내용들을 정리하는 블로그

0개의 댓글