AWS ELB(Elastic Load Balancing) 개념
17120
post-template-default,single,single-post,postid-17120,single-format-standard,bridge-core-1.0.4,ajax_fade,page_not_loaded,,qode_grid_1200,qode-theme-ver-18.0.8,qode-theme-bridge,disabled_footer_top,wpb-js-composer js-comp-ver-5.7,vc_responsive
 

AWS ELB(Elastic Load Balancing) 개념

AWS ELB(Elastic Load Balancing) 개념

Background

✅ Scale-up & Scale-out

서버에 트래픽이 증가할 때 대처 방법은 두가지로 분류할 수 있습니다.
Scale-up : 서버 자체의 성능을 확장하여 대처(e. g. 컴퓨터의 CPU를 i7에서 i10으로 업그레이드 )
Scale-out : 서버를  증설하여 대처(e. g. 새로운 컴퓨터를 추가 구매)

이때 가용성이 좋은 Scale-out 방식을 선택하게 된다면 여러 대의 서버에 트래픽을 균등하게 분산해주는 로드밸런싱(Load Balancing)이 필요합니다.

✅ Load Balancing

로드밸런싱은 서버의 로드율(트래픽) 증가, 부하량, 속도 저하 등을 고려하여 적절히 분산처리하여 해결하는 기술로 다양한 알고리즘을 기반으로 동작합니다.

  • Round Robin Method : 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식
  • Weighted Round Robin Method : 각 서버마다 설정한 가중치에 따라 요청을 우선 배분하는 방식
  • IP Hash Method : 클라이언트의 IP 주소를 특정 서버로 연결하여 항상 동일 서버로 연결을 보장하는 방식
  • Least Connection Method : 요청이 들어온 시점에 가장 낮은 트래픽을 보유한 서버에 요청을 배분하는 방식
  • Least Response Time Method : 서버의 연결 상태와 응답시간을 고려하여 트래픽을 배분하는 방식

✅ 네트워크 통신 계층: OSI(Open Systems Interconnection Reference Model) 7 Layer

OSI 7 계층은 정보통신업체 사이의 장비 호환성을 위해서 1984년 국제표준화기구에서 발표한 표준 프로토콜로 하위 계층에 속하는 하드웨어와 상위 계층에 속하는 소프트웨어로 분류됩니다.

  • (* 상위 계1- Pysical Layer층은 하위 계층의 기능을 이어받습니다.)
  •  : 케이블 종류, 무선 주파수 링크, 핀, 전압 등과 같은 물리적 요건을 표현하여 하드웨어 전송 기술을 제공하는 계층 (e.g. 모뎀)
  • 2- Data Link Layer : 네트워크 전송 방식에 맞게 데이터를 단위화(Framing)해서 간 데이터를 전송하는 기술을 제공하는 계층 (e.g. 이더넷)
  • 3- Network Layer : 데이터를 패킷(Packet) 단위로 잘게 쪼개어 전송하는 기술을 제공하는 계층 (e.g. IP)
  • 4- Transport Layer : 네트워크 구성요소와 프로토콜 내에서 송신자와 수신자를 연결하는 통신 기술을 제공하는 계층 (e.g. TCP)
  • 5- Session Layer :  세션 연결의 설정과 해제 등의 프로세스간의 통신을 제어하고 동기화를 유지하는 기술을 제공하는 계층 (e.g. SSL)
  • 6- Presentation Layer : 데이터 번역자로서의 역할로 데이터 변환, 암호화 및 복호화와 같은 기술을 제공하는 계층 (e.g. JPEG)
  • 7- Application Layer : 네트워크에 접근할 수 있도록 인터페이스를 제공하는 계층 (e.g. FTP)

✅ L4 / L7 Load Balancing

네트워크 통신 계층 중 4계층(L4)부터 포트(Port) 정보를 바탕으로 부하분산이 가능합니다. 이러한 부하분산에는 L4 로드밸런서와 L7 로드밸런서가 가장 많이 활용됩니다.

  • L4 Load Balancing
    – Transport Layer의 정보를 바탕으로 부하를 분산
    – 주로 TCP, UDP 포트 정보를 바탕으로 트래픽을 배분
    – 장점 : 패킷(Packet) 레벨에서만 트래픽을 분산하기 때문에 속도가 빠르고 효율이 높은편
    – 단점 : 섬세한 라우팅이 불가능
  • L7 Load Balancing
    – Application Layer의 정보를 바탕으로 부하를 분산
    – 주로 HTTP 헤더, 쿠키와 같은 사용자 요청을 기준으로 트래픽을 배분
    – 장점 : 섬세한 라우팅이 가능하며, 바이러스나 비정상적인 트래픽(e.g.DoS/DDoS)의 필터링이 가능하여 보안적으로 우수
    – 단점 : L4 Load Balancing에 비해 높은 가격 요구

Amazon Elastic Load Balancing

✅ ELB

ELB(Elastic Load Balancing)는 AWS에서 제공하는 부하분산 제품입니다. Amazon EC2 인스터스나 IP주소, Lambda 함수 등과 같은 여러 대상에 자동으로 트래픽을 분산 시켜서 내결함성에 필요한 고가용성, 자동 조정, 높은 보안을 갖출 수 있도록 합니다.

✅ ELB 종류

APP의 요구사항에 따라 3가지 중 선택하여 사용 가능

– CLB (Classic Load Balancer) : 4계층(Transport) + 3계층(Network) 에서 동작

EC2 – Classic network로 구축된 application 대상

서버 구성이 비교적 비대

가장 오래된 load balancer로, 잘 안쓰는 추세!

2. – ALB : Application Load Balancer

7계층(Application)에서 동작

⇒ http, https와 같은 고급 로드 밸런싱 서비스에 적합

→ HTTP, HTTP 리스너만 등록 가능

마이크로 서비스 및 애플리케이션에 최적화된 로드 밸런싱 제공

path나 port 등에 따라 다른 target group으로 맴핑 가능

EC2 인스턴스, 람다, IP로도 연결 가능

– NLB : Network Load Balancer

 

4계층(Network)에서 동작

→ TCP/UDP 트래픽을 로드밸런싱해서 내부 인스턴스에 전달

내부로 들어온 트래픽을 처리하고, 내부의 인스턴스로 트래픽을 전송할때 용이

최저 대기 시간을 유지하면서 초당 수백만 건 요청 처리 가능

AZ 당 하나의 고정 IP 주소 사용, 불안정한 트래픽 처리에 최적

 

 

✅ External-ELB와 Internal-ELB

  • External-ELB→ 인터넷에서 요청을 받는 ELB→ 인터넷으로부터 요청을 받아야하므로, VPC의 퍼블릿 Subnet 내부에 생성
  • Internal-ELB→ VPC Subnet 내부의 요청만을 받는 ELB→ elastic IP가 부여되지 않으므로, public Subnet을 만들어도 인터넷으로 접근 X
  • 이러한 2개의 ELB를 조합하면, 3계층 시스템(웹서버, AP서버, DB서버)처럼 애플리케이션의 여러 계층으로 요청을 분산하는 아키텍처를 구성 가능 (왼쪽 이미지)

✅ ELB 관련 기타 개념

– Listener & Rule

  • Application Load Balancing에서 사용
  • Listener를 port와 protocla 별로 분기 처리 가능
  • Rule은 Listener 아래에서 path or ARN(Amazon Resource Name) 별로 분기 처리 가능

– Cross Zone Load Balancing

  • Zone별로 사용하는 EC2 개수에 차이가 있는 경우 사용하면 좋은 기능→ NLB는 default가 Off→ ALB는 내부적으로(기본으로) Cross Zone Load Balancing 기능이 On 되어 있음

– 헬스 체크(Health Check)

  • EC2 인스턴스가 정상적으로 가동 중인지 확인하는 기능
  • load balancer가 Target에 대해서 Health Check를 수행→ EC2 인스턴스가 중단되었다고 판단되면 해당 EC2인스턴스는 트래픽 분배에서 제외→ Threashold 만큼 Health check가 실패하면 load balancer를 서비스에서 Target을 제외시키고, 다시 해당 Target이 Healthy 상태가 되면 서비스에 추가 시킴 (자동)

– Sticky Sessions

  • 사용자의 세션을 확인하여 적절한 EC2 인스턴스로 트래픽을 분배하는 기능. ex) HTTP 쿠키를 이용한 세션이면 L7의 로드 밸런싱 기능.
  • User session이 유지되는 동안 들어온 모든 request가 같은 EC2에서 처리
  • ALB, CLB 에서 해당 기능 사용 가능 (NLB 는 미제공)→ ALB에서 Sticky Session을 Enable하면, EC2 단위가 아닌 TargetGroup에 고정되어 request가 전송된다.

– Connection Draining

  • Auto Scaling이 사용자의 요청을 처리 중인 EC2 인스턴스를 바로 삭제하지 못하도록 방지하는 기능
  • ex) 사용자 수가 줄어들면 Auto Scaling에 의해 EC2 인스턴스를 삭제하는데. 마침 사용자가 해당 인스턴스에서 파일을 다운로드하는데 인스턴스가 삭제되면 파일이 끊어짐→ 즉 삭제하기 전에 요청을 처리 할 수 있도록 지정한 시간만큼 기다림

– Latency

  • ELB 로드 밸런서와 EC2 인스턴스 간의 지연시간

– HTTP 2XX, 4XX, 5XX

  • EC2 인스턴스에서 리턴한 HTTP Response Code

– ELB HTTP 4XX, 5XX

  • ELB 로드 밸런서에서 리턴한 HTTP Error Code

– Surge Queue Length

  • ELB 로드 밸런서에서 EC2 인스턴스로 전달되지 못하고 큐에 남아 있는 요청의 개수

– Spillover Count

  • 서지 큐가 꽉 차서 ELB 로드 밸런서가 거부한 요청의 개수