ELB (Elastic Load Balancing)

2024. 11. 21. 03:34·DevOps/AWS

 

❐ Description


Amazon ELB의 기능 및 동작 방식과 그 종류를 알아보자.

 

 

 

 

 

❐ 로드 벨런싱(부하 분산)이란?


부하분산은 서버-클라이언트 환경에서 서버가 클라이언트 요청을 받아 처리하는 과정에서 발생하는 부하에

대해 동일한 목적을 수행하는 다수의 서버에 분산 처리하는 기능이다.

부하분산을  사용하면 고가용성 및 내결함성이 향상되어 장애가 발생할 때 유연하게 대처할 수 있고, 서비스를

안정적으로 유지할 수 있어 클라우드를 구성할 때 반드시 사용해야 하는 기술이다.

이런 부하분산을 로드 밸런싱(load balancing)이라고 하며, 부하분산을 수행하는 대상을 로드 밸런서라고 한다.

 

 

 

 

 

❐ Amazon ELB


1. ELB는 뭘까?

ELB는 들어오는 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이서, IP 주소, Lambda 함수와 같은

여러 대상에 자동으로 분산시킨다. ELB는 여러 가용 영역에서 작동하여 애플리케이션 가용성을 향상시키고 

HTTP, HTTPS, TCP, SSL 등 다양한 프로토콜을 지원하며, 사용자가 같은 인스턴스에서 세션을 유지할 수

있도록 지원한다.

 

또한 AWS의 CloudWatch 기능을 이용하여 로그와 메트릭을 모니터링할 수 있으며, AWS의 오토 스케일링 

기능과 결합해서 트래픽이 증가할 때 자동으로 인스턴스를 추가하거나 제거하면서 애플리케이션 가용성을 유지한다.

 

ELB는 네트워크(NLB) 및 응용 프로그램(ALB) 수준의 로드 밸런싱을 지원하여 다양한 애플리케이션에 적용할 수

있으며, SSL 암호화를 지원하여 애플리케이션의 보안을 강화한다.

 

한편, 지속적으로 IP 주소가 바뀌여서 IP를 고정할 수 없다. 따라서 항상 도메인 기반으로 사용해야 한다

☑️ 고가용성 : 시스템이나 서비스가 지속적으로 작동 가능하도록 하는 기능이다.
☑️ 내결함성
: 시스템의 일부 구성 요소가 작동하지 않더라도 계속 작동할 수 있는 기능이다.

 

 

2. ELB 구성 요소

☑️ 로드 벨런서

로드벨런서는 클라이언트로부터 들어오는 요청을 처리할 대상 그룹 또는 대상 인스턴스로 분배하는 역할을 한다.

  • DNS 이름으로 트래픽을 받아 처리한다.
  • 다양한 유형의 로드 벨런서가 제공된다. (ALB, NLB, CLB, GWLB)
  • 오토 스케일링 그룹과 함께 사용되어 트래픽 부하를 효율적으로 분산한다.

 

☑️ 대상 그룹

대상 그룹은 로드 밸런서가 요청을 라우팅 하는 대상(EC2 인스턴스, Lambda 함수 등)을 정의하는 그룹이다.

  • 대상 그룹에 속한 리소스는 Health Check를 통해 상태가 모니터링 된다. 
  • 각 대상 그룹은 로드 밸런싱 정책에 따라 요청을 처리한다. (Ex. 라운드 로빈, 최소 연결 방식 등)
  • 하나의 로드 밸런서가 여러 대상 그룹을 가질 수 있으며, 특정 조건에 따라 요청을 각각의
          대상 그룹으로 라우팅할 수 있다. 
  • 예를 들어, URL 경로(/api, /user 등)에 따라 다른 대상 그룹으로 트래픽을 보낼 수 있다.

 

 

☑️ 리스너

리스너는 로드 밸런서가 클라이언트로부터 요청을 수신할 때 사용하는 프로토콜과 포트를 정의한다.

  • 리스너는 로드 밸런서의 입구 역할을 합니다.
  • 각 리스너는 특정 프로토콜과 포트를 설정해야 한다.
    • HTTP(80), HTTPS(443), TCP(3306) 등..
  • 리스너는 규칙(Rule)을 통해 요청을 어떤 대상 그룹으로 라우팅할지 결정한다.
    • URL 기반 라우팅, 호스트 기반 라우팅 등을 설정할 수 있다.
  • HTTPS 리스너를 사용하는 경우 SSL 인증서가 필요합니다.

 

 

3. ELB 구성 요소의 동작 방식

1. 클라이언트 요청이 로드 밸런서의 리스너로 들어온다.

2. 리스너는 요청의 규칙에 따라 적합한 대상 그룹으로 라우팅한다.

3. 대상 그룹 내의 인스턴스가 요청을 처리한다.

 

 

 

 

 

❐ Amazon ELB 동작 방식


1. 클라이언트 요청 수신

로드 밸런서에서 클라이언트 요청을 수신합니다. 로드 밸런서는 클라이언트와 연결을 유지하며,

요청을 수신하려고 리스너를 등록한다.

 

2. 대상 그룹 선택

수신한 클라이언트 요청을 처리할 대상 그룹을 선택합니다. 대상 그룹은 인스턴스, IP 주소, 람다 함수, 

ALB 등 여러 유형의 대상으로 구성된다.

 

3. 트래픽 분산

선택된 대상 그룹에서 요청을 처리할 대상을 선택하고 해당 대상으로 요청을 분산한다.

이때 로드 밸런서는 각 대상의 가용성 상태를 모니터링하고 가용하지 않은 대상을 제외한다.

 

4. 응답 반환

분산된 요청을 대상에서 처리하고 클라이언트에 응답을 반환한다. 이때 응답은 로드 밸런서에서 수신한 것으로

반환되므로, 클라이언트는 로드 밸런서가 대상 그룹에서 선택한 대상에게서 마치 응답을 받는 것처럼 느낄 수 있다.

 

 

 

 

 

❐ Amazon ELB 교차 영역 로드 밸런싱


ELB 교차 영역 로드 밸런싱(cross-zone load balancing)은 여러 가용 영역에 걸쳐 있는 EC2 인스턴스나 

컨테이너 등 대상을 더 효과적으로 로드 밸런싱하는 기능이다. 이런 교차 영역 로드 밸런싱은 가용 영역별로

인스턴스 수량이 불균형하게 위치할 때 트래픽 비중을 보정할 수 있으며, 트래픽을 분산하는 기준이 가용 영역이

아닌 대상 그룹에 속한 자원을 기준으로 균일한 비중의 로드 밸런싱을 수행할 수 있다.

 

 

 

 

 

❐ Amazon ELB 종류


1. CLB (Classic Load Balancer)

☑️ 설명

  • CLB는 AWS에서 가장 처음 제공된 로드 밸런서
  • 4계층(TCP/SSL)과 7계층(HTTP/HTTPS) 모두를 지원
  • 현재는 더 이상 새로운 기능이 추가되지 않는 구형 서비스
  • 기존에 CLB를 사용하던 워크로드를 위한 지원만 유지

 

☑️ 특징

  • 간단한 트래픽 분배 기능 제공
  • EC2 인스턴스를 대상으로 설정.
  • 제한적인 기능 (예: URL 기반 라우팅 미지원)
  • SSL 종료(Termination) 및 스틱 세션 지원(Cookie 기반).

 

☑️ 사용 사례

  • 단순한 로드 밸런싱이 필요한 오래된 애플리케이션.
  • ALB와 NLB가 출시되기 전 구축된 기존 워크로드.

 

 

2. ALB (Application Load Balancer)

☑️ 설명

  • 7계층(Application Layer, HTTP/HTTPS)에서 작동
  • 애플리케이션 계층의 로드 밸런싱에 특화

 

☑️ 특징

  • HTTP/HTTPS 요청에 대한 세부적인 라우팅 가능.
    • URL 기반 라우팅: 특정 경로(/api, /user)에 따라 다른 대상 그룹으로 요청 분배.
    • 호스트 기반 라우팅: api.example.com과 같은 호스트 이름에 따라 요청 라우팅.
  • WebSocket 및 gRPC 지원.
  • AWS Lambda와의 통합 가능.
  • 각 대상 그룹에서 헬스 체크 수행.

 

☑️ 사용 사례

  • 마이크로서비스 아키텍처.
  • HTTP/HTTPS 기반의 웹 애플리케이션.
  • URL 또는 호스트 기반 라우팅이 필요한 경우.
  • Lambda 함수와의 통합이 필요한 경우.

 

 

3. NLB (Network Load Balancer)

☑️ 설명

  • 4계층(Network Layer, TCP/UDP)에서 작동
  • 고속 로드 밸런싱과 낮은 레이턴시를 제공하는 데 특화

 

☑️ 특징

  • TCP 및 UDP 트래픽 지원.
  • 고정 IP 주소 할당 가능(Elastic IP 사용).
  • 소스 IP 기반의 트래픽 유지(스틱 세션 지원).
    • 특정 클라이언트가 항상 동일한 대상 서버로 트래픽을 보내도록 유지하는 기능
  • 초고속 연결 및 낮은 레이턴시 제공.
  • TLS 종료(Termination) 지원.

 

☑️ 사용 사례

  • 초고속 데이터 처리 또는 낮은 레이턴시가 중요한 경우(예: 금융 애플리케이션).
  • TCP/UDP 기반 애플리케이션(예: 게임 서버, 메일 서버).
  • IoT 데이터 수집 또는 실시간 스트리밍.

 

 

4. GWLB (Gateway Load Balancer)

☑️ 설명

  • 3계층(Network Gateway Layer)에서 작동
  • 네트워크 트래픽을 라우팅 및 관리하는 데 사용

 

☑️ 특징

  • 네트워크 가상 어플라이언스를 AWS에 배포 및 확장 가능.
  • 가상 어플라이언스에 대한 트래픽 라우팅.
  • 자동 확장 및 고가용성 지원.
  • 중앙 집중화된 네트워크 트래픽 검사.

 

☑️ 사용 사례

  • 네트워크 보안 장비(예: Palo Alto, Fortinet) 통합.
  • 침입 방지 시스템(IPS) 및 방화벽 설정.
  • 트래픽 가속화 및 최적화.
  • 대규모 네트워크 트래픽 필터링.

 

 

 

 

 

❐ ALB와 NLB의 출발지 IP 보존에 대해서


1. ALB에서의 출발지 IP

클라이언트가 보내는 트래픽을 ALB가 로드 밸런싱해서 서버에 전달할 때, 클라이언트의 출발지 IP 주소를

자신의 프라이빗 IP 주소로 변경해서 전달한다.

하지만 실제로 접근한 클라이언트가 아닌 ALB의 주소만 확인되면 사용자 IP를 기반으로 하는 비즈니스

서비스 활용은 제한되고 보안 이슈가 발생할 수 있다. 따라서 이런 문제를 해결하기 위해 ALB 환경에서도

서버가 클라이언트 IP 주소를 알 수 있는 방법이 있다.

 

HTTP 헤더에 X-Forwarded-For(XFF) 필드를 이용하는 방법이다. 외부 사용자 주소를 전달하기 위해

ALB는 HTTP 정보를 전달할 때 사용하는 HTTP 헤더 안에 X-Forwarded-For 필드를 추가하여 클라이언트

IP 주소를 전달하며, 웹 서버는 HTTP 헤더를 읽어 클라이언트 IP 주소를 알 수 있다.

 

💭 왜 출발지 IP를 보존하지 않을까?
ALB는 클라이언트의 요청을 처리할 때 요청을 수신하여 수정하거나 새롭게 작성할 수 있다.
이 과정에서 실제 클라이언트의 IP 주소가 뒤로 전달되지 않는다.

ALB는 기본적으로 프록시 역할을 수행한다. 요청은 클라이언트에서 ALB로 먼저 도착하고,
ALB는 이를 백엔드로 다시 전달한다. 이로 인해 백엔드 서버는 ALB의 IP 주소만 확인할 수 있다.

 

 

2. NLB에서의 출발지 IP

NLB가 클라이언트가 보내는 트래픽을 로드 밸런싱하여 서버에 전달할 때 클라이언트의 출발지

IP 주소를 보존한 채로 전달한다.

추가적으로 NLB는 HTTP 기반으로 로드 벨런싱을 하지 못하기 때문에 HTTP 헤더의 xff를 사용할 수 없다.

 

 

 

 

 


'DevOps > AWS' 카테고리의 다른 글

SQS  (0) 2025.02.17
VPC (Virtual Private Cloud)  (0) 2024.11.18
EC2 (Elastic Computer Cloud)  (0) 2024.11.17
README.MD  (0) 2024.09.11
'DevOps/AWS' 카테고리의 다른 글
  • SQS
  • VPC (Virtual Private Cloud)
  • EC2 (Elastic Computer Cloud)
  • README.MD
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (166)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (4)
        • Java (3)
        • Kotlin (1)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
      • Book (0)
        • 마스터링 블록체인 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    greedy
    binarysearch
    Back-Tracking
    부분단조성
    오블완
    sliding-window
    Two-Pointer
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
ELB (Elastic Load Balancing)
상단으로

티스토리툴바