[AWS] ELB 및 ASG

dereck·2024년 12월 16일

AWS CCP

목록 보기
5/29
post-thumbnail

ELB 개요

ELB는 Elastic Load Balancing의 약자로 인터넷 트래픽을 다운스트림의 여러 서버(EC2)로 전달하는 서버이다. 로드 밸런서는 사용자의 트래픽을 가용 중인 여러 EC2 인스턴스에 분산하여 전달함으로써 백엔드를 더 잘 스케일링할 수 있다.

ELB를 사용하는 이유

  • 다운스트림 인스턴스에 부하를 분산시킬 수 있음
  • 애플리케이션에 대한 DNS 호스트 이름인 단일 액세스 지점을 노출할 수 있음
  • Health Check 기능
    • 정기적으로 상태 확인을 하고 문제가 있는 인스턴스에는 로드 밸런서가 트래픽을 보내지 않음
    • EC2 인스턴스의 문제를 숨길 수 있음
  • Connection Draining 기능
    • Unhealthy 됐을 때 지정된 시간만큼 연결을 기다려줌
    • 기본으로 켜져있으며 ALB만 지원
    • 서버에 오류가 발생했을 때, 다른 서버에 트래픽을 이동시키기 전에 기존 연결을 기다려주는 시간
  • Slow Start Configuration 기능
    • 새로 시작된 서버를 위해 천천히 트래픽 보냄
    • ALB와 NLB만 지원
    • 처음부터 서버가 모든 트래픽을 받는 것을 방지하고, 서버가 정상적으로 작동할 수 있도록 점진적으로 트래픽을 분배함
  • 웹사이트의 SSL Termination을 통해 HTTPS를 아주 쉽게 제공할 수 있음
  • 여러 가용 영역에서 로드 밸런서를 사용할 수 있어 애플리케이션의 가용성이 높아짐
  • ELB는 관리형 로드 밸런서이므로 서버를 프로비저닝할 필요 없이 AWS가 처리한다.
    • AWS가 작동을 보장한다.
    • AWS가 ELB의 업그레이드와 유지 보수, 고가용성을 모두 책임진다
    • 개발자는 해당 로드 밸런서의 동작에 관해 몇 가지를 구성하는 것을 제외하면 할 일이 없다.
  • 자체 로드 밸런서를 EC2에 설정하여 비용을 절약할 수도 있지만 결국에는 유지 보수, 통합, 운영체제 업그레이드 처리 등 더 많은 작업을 하게 된다.

AWS에서 제공하는 로드 밸런서

AWS에서 제공하는 로드 밸런서에는 네 가지가 있으며 각 차이점을 알고 있어야 한다.

1. Application Load Balancer

Application Load Balancer는 HTTP, HTTPS 전용 트래픽을 위한 계층 7 유형의 로드 밸런서이다.

HTTP, HTTPS, gRPC 프로토콜이 있으면 계층 7이고 ALB라는 의미이다. 도메인 이름을 통해 다른 서비스로 라우팅할 수 있다(도메인 기반 로드 밸런싱 지원).

사용자가 방금 언급한 프로토콜 중 하나에서 로드 밸런서에 액세스하면 로드 밸런서는 트래픽을 다운스트림 EC2 인스턴스로 라우팅한다(ex: 대상을 EC2 인스턴스로 선택한 경우).

2. Network Load Balancer

Network Load Balancer는 초고성능이며 TCP/UDP를 허용하는 계층 4 유형의 로드 밸런서이다. 초당 수백만 요청을 처리하며 IP 기반으로 로드 밸런싱을 지원한다. 이로써 클라이언트는 항상 동일한 주소로 연결할 수 있다(DNS 이름과 IP 주소 둘 다 사용 가능).

TCP 및 UDP 프로토콜에서 트래픽이 NLB로 전송되고 다운스트림 대상인 EC2 인스턴스 등으로 전달된다. ALB와 동작하는 방식이 같다.

3. Gateway Load Balancer

Gateway Load Balancer는 IP 패킷 자체에서 GENEVE 프로토콜을 사용하는 계층 3 유형의 로드 밸런서이다. 트래픽을 EC2 인스턴스에서 관리하는 방화벽으로 라우팅하여 클래식 방화벽이나 침입 감지, 심층 패킷 검사 등을 실행할 수 있다는 것이다. 즉, 트래픽이 도착하기 전 트래픽을 검사하거나 분석하는 작업을 먼저 수행할 수 있게 하는 서비스이다.

GWLB는 애플리케이션에 부하를 분산하지 않는다. 트래픽 부하를 EC2 인스턴스에서 실행하는 가상 어플라이언스에 분산한다. 따라서 트래픽을 분석하거나 방화벽 작업을 실행할 수 있다. 서드 파티 보안 가상 어플라이언스라고도 하는 이유이다. 이런 어플라이언스는 여러 개 존재할 수 있다.

트래픽이 GWLB로 이동하면 먼저 트래픽을 분석할 EC2 인스턴스로 트래픽을 보낸다. 그 후에 트래픽은 다시 GWLB로 전송되고 애플리케이션으로 전달된다. GWLB는 IP 패킷 자체를 검사하고 방화벽 기능이나 침입 감지 심층 패킷 검사를 실행할 수 있도록 중간에 있다.

4. Classic Load Balancer

Classic Load Balancer는 2023년에 폐기된 이전 세대의 로드 밸런서이며 계층 4, 계층 7 유형이고 현재 ALB와 NLB로 대체되었다.


ASG 개요

ASG는 Auto Scaling Group의 약자이다. 앞서 살펴 본 로드 밸런서를 통해 애플리케이션의 로드를 분산할 수 있었다. 그리고 백엔드에서 자동으로 이 서버들을 만들려면 ASG가 필요하다. 현실에서의 웹사이트 로드는 시간에 따라 다르기 때문이다.

클라우드에서는 매우 빠르게 서버를 만들고 없앨 수 있다. ASG의 목적은 스케일 아웃/인을 하는 것이다. 즉, 늘어난 로드에 맞춰 EC2 인스턴스를 늘리거나, 줄어든 로드에 맞춰 EC2 인스턴스를 줄이는 것이다. 이를 통해서 어느 시점이든 실행하는 머신의 숫자를 최소, 최대로 보장할 수 있다.

ASG가 EC2 인스턴스를 만들거나 제거하면 이 인스턴스들이 로드 밸런서에 등록되거나 등록 해지되는 것을 확인할 수 있다. 두 가지가 함께 동작하는 것이다.

마지막으로 애플리케이션의 버그로 인해 서버의 상태가 비정상이면 ASG는 이를 감지해서 비정상 인스턴스는 필요로 하지 않기 때문에 등록을 해지하고 종료한 뒤 새로운 정상 인스턴스로 교체한다(Health Check).

또한 ASG는 항상 최적의 용량에서 실행하기 때문에 비용을 절감할 수 있다. 이런 탄력성은 클라우드의 기본 원칙이다.

ASG의 설정

  1. 최소 용량: ASG 내에서 유지할 EC2 인스턴스의 최소 개수를 설정한다. ASG는 항상 최소 설정된 인스턴스의 개수를 유지한다.

  2. 희망 용량: 사용자가 원하는 EC2 인스턴스의 개수를 설정한다. ASG는 가능한 한 사용자가 설정한 EC2 인스턴스의 개수를 유지하려고 한다.

  3. 최대 용량: ASG가 확장할 수 있는 최대 EC2 인스턴스의 개수를 설정한다. ASG는 부하가 급증하더라도 설정한 최대 개수만큼만 EC2 인스턴스를 확장할 수 있다.

ASG와 로드 밸런서

ASG는 로드 밸런서와 함께 동작한다. 예를 들어, 1개의 ASG에 EC2 인스턴스가 1개 있으면 로드 밸런서를 통해 오는 웹 트래픽은 해당 EC2 인스턴스로 바로 리디렉션된다. ASG가 EC2 인스턴스를 추가하여 스케일 아웃 함에 따라 로드 밸런서는 이들을 등록하고 등록된 인스턴스에게도 트래픽을 보낼 것이다.

ASG 전략

  • 수동 스케일링
    • 오토 스케일링 그룹의 크기를 수동으로 업데이트 하는 것
    • ex) 용량을 1 → 2로 변경하거나 2 → 1로 변경하는 경우
  • 동적 스케일링
    • 변경 사항을 자동으로 대응하는 것
    • 동적 스케일링에는 여러 유형의 스케일링 정책이 있음
      • 단순/단계 스케일링
        • 트리거를 정의한 뒤 유닛을 얼마나 추가하고 삭제할 지 정의하는 것
        • ex) CloudWatch 경보가 (EC2 인스턴스의 CPU 사용률이 5분 동안 70%를 초과) 트리거 됐을 때, (EC2 인스턴스의 CPU 사용률이 5분 동안 70%를 초과할 때마다) ASG 용량에 2개의 유닛을 추가하는 것
        • ex) CPU 사용률이 10분 동안 30% 이하일 때마다 ASG 용량에서 1개의 유닛을 제거하는 것
  • 대상 추적 스케일링
    - 스케일링 정책을 손쉽게 정의하는 방식
    • ex) ASG의 모든 EC2 인스턴스의 평균 CPU 사용률을 평균 40%로 유지하고자 하면 목표인 40% 유지하기 위해 자동으로 조정하는 것
  • 예약 스케일링
    • 변경 사항을 미리 아는 것으로 사용자 패턴을 기반으로 확장을 예측하는 것
    • ex) 사람들이 금요일 오후 5시에 축구 경기에 배팅한다고 하면 금요일 오후 5시에 ASG의 EC2 인스턴스 최소 용량을 10까지 높이는 것
  • 예측 스케일링
    • 시간이 지남에 따라 발생하는 로드를 예측하고, 예측한 기간에 도달하기 전에 올바른 수의 EC2 인스턴스를 자동으로 프로비저닝
    • 시간적인 패턴이 존재하고 스케일링 유형에 따라 달라지는 신뢰 전략을 신경 쓰지 않고 머신 러닝을 기반으로 쉽게 스케일링 하고자 할 때 유용함

ELB 및 ASG 요약

ELB

  • 고가용성수직적/수평적일 수 있는 확장성, 탄력성, 클라우드의 민첩성 개념
  • 로드 밸런서로 ELB가 있다
    • 이를 통해 백엔드 EC2 인스턴스에 트래픽을 분산할 수 있으며 이는 여러 가용 영역에 걸쳐 분산될 수 있다.
    • Health Check를 지원
    • 4 종류의 로드 밸런서가 있다.
      • ALB - HTTP (L7)
      • NLB - TCP (L4)
      • GWLB - Gateway (L3)
      • CLB - 폐기됨

ASG

  • 애플리케이션의 탄력성을 구현할 수 있어서 부하를 여러 가용 영역에 걸쳐 분산하고 적절히 스케일링할 수 있음
  • 시스템의 수요에 따라 이러한 EC2 인스턴스를 스케일링하고 비정상 인스턴스를 교체할 수 있음
  • ELB와 긴밀하게 통합되어 있음

로드 밸런서는 트래픽을 분산하고, 오토 스케일링 그룹은 트래픽에 따라 스케일 아웃/인을 통해 인스턴스의 개수를 적절하게 유지한다.


References

0개의 댓글