Contents

고가용성 및 스케일링성 : ELB 및 ASG

   Apr 21, 2023     8 min read

고가용성 및 스케일링성

  • 확장성(Scalability) : 애플리케이션 시스템이 조정을 통해 더 많은 양을 처리할 수 있다는 의미.
    1. 수직 확장성 : 인스턴스의 크기를 확장하는 것.
      ex. 데이터베이스와 같이 분산되지 않은 시스템에서 사용, RDS, ElastiCache
    2. 수평 확장성(=탄력성) : 애플리케이션에서 인스턴스나 시스템의 수를 늘리는 방법.
    • 분배 시스템이 있다는 것을 의미함.

  • 고가용성(High Availability) : 애플리케이션 또는 시스템을 적어도 둘 이상의 AWS의 AZ나 데이터 센터에서 가동 중이라는 걸 의미함.
  • 고가용성의 목표 : 데이터 센터에서의 손실에서 살아남는 것.

  • 스케일 아웃 : 인스턴스의 수가 늘어난 것.
  • 스케일 인 : 인스턴스의 수가 줄어든 것.

Elastic Load Balancing (ELB) 개요

  • Load Balancer : 서버 혹은 서버셋으로 트래픽을 백엔드나 다운스트림 EC2 인스턴스 또는 서버들로 전달하는 역할
  • 더 많은 user가 연결될 수록 EC2 인스턴스로 가는 부하가 더욱 분산됨.
  • 하지만 어떤 인스턴스에 연결될지는 알 수 없다.
  • 필요한 이유 : 부하를 다수의 다운스트림 인스턴스로 분산하기 위해서.
  • Elastic Load Balancer = Managed Load Balancer
  • ELB는 무조건 쓰는 것이 좋다.

Health Checks

  • Elastic Load Balancer가 EC2 인스턴스의 작동이 올바르게 되고 있는지의 여부를 확인하기 위해 사용됨.
  • 상태 확인은 포트라우트에서 이루어짐.
  • ex. 응답이 200이 아니라면, 인스턴스는 unhealthy의 상태이기 때문에 ELB는 그쪽으로 트래픽을 보내지 않는다.

Types of Load Balancer

  1. Classic Load Balancer - CLB : Old Generation
  2. Application Load Balancer - ALB : New Generation
  3. Network Load Balancer - NLB : New Generation
  4. Gateway Load Balancer - GWLB : layer 3, IP protocol에서 작동

  • 결론적으로, 더 많은 기능을 가지고 있는 신형 로드 밸런서를 사용하는 것이 권장됨.

Load Balancer Security Groups

  • User는 HTTP or HTTPS를 사용해 어디서든 로드 밸런서에 접근이 가능함.
  • EC2 인스턴스의 보안 그룹 규칙은 포트 80에서 HTTP 트래픽을 허용하며 Source는 IP 범위가 아니라 보안 그룹이 되어야 함.
  • EC2 인스턴스의 보안 그룹을 로그 밸런서의 보안그룹으로 연결함.

Classic Load Balancer (CLB)

  • 이제 AWS에서 지원되지 않으며, 곧 AWS 콘솔에서 사용할 수 없다.

Application Load Balancer (v2)

  • 7계층, HTTP 전용 로드 밸런서
  • HTTP/2, WebSocker 지원
  • 리다이렉트 지원
  • 경로 라우팅 지원
  • 마이크로 서비스나 컨테이너 기반 애플리케이션에 가장 좋은 로드 밸런서
  • ex. Docker & Amazon ECS
  • 포트 매핑 기능이 있기 때문에 ECS 인스턴스의 동적 포트로의 리다이렉션을 가능하게 해줌.
  • 하나만으로도 다수의 애플리케이션을 처리할 수 있음.

Target Groups : 대상 그룹

  • EC2 instances - HTTP
  • ECS tasks(작업) - HTTP
  • Lambda functions - HTTP
  • IP 주소들의 앞에도 위치할 수 있음. (꼭 사설 주소여야만함)
  • 여러 대상 그룹으로 라우팅할 수 있음.
  • 상태 확인은 대상 그룹 레벨에서 이루어짐.

Part 1

01. 먼저 EC2 인스턴스를 2개 만든다.

사진첨부

사진첨부

사진첨부

#!/bin/bash
# Use this for your user data (script from top to bottom)
# install httpd (Linux 2 version)
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html



사진첨부

EC2 인스턴스가 2개 완성이 된 것을 확인할 수 있다.

사진첨부

IPv4 퍼블릭 주소로 잘 작동이 되는 것도 확인할 수 있다.

로드 밸런서

사진첨부

사진첨부
로드 밸런서의 종류별 차이점을 잘 알아두도록 하자.

사진첨부

사진첨부

사진첨부
모든 가용영역에 배포해줄 것이다.

사진첨부
오직 HTTP만 허용가능하게 만들 것이다.

사진첨부

사진첨부
Target Group = 내가 만든 EC2 인스턴스

사진첨부

사진첨부

사진첨부
인스턴스 등록하기

사진첨부
Target Group이 잘 생성된 것을 확인할 수 있다.

사진첨부

사진첨부
ALB가 잘 만들어졌다.

  • DNS를 통해 사이트를 접속해 보면 부하분산이 일어나고 있는 것을 확인할 수 있다.

사진첨부

  • 만약 한 인스턴스가 중지됐을 경우 정상적으로 작동하는 인스턴스로만 작동이 가능하게 한다.

Part 2

  1. Network Security (네트워크 보안)

  • 로드밸런서를 통해서만 접근이 가능하도록 하기.

사진첨부

사진첨부

사진첨부
현재 HTTP는 보안 그룹으로부터 오는 모든 트래픽을 허용하고 있다.

사진첨부
기존의 HTTP는 지우고 Load Balancer로 새 규칙을 만든다.

  • 결과)

  • EC2 인스턴스의 주소를 넣으면 화면을 새로 고침하는 것처럼 타임아웃이 발생한다. 인스턴스에 접속이 불가한 것처럼 보인다. (인스턴스에 직접 접근하는 것을 막았음.)
  • 반면 로드 밸런서 (주소로 들어간) 화면에서는 여전히 인스턴스에 접근할 수 있다.

  1. 애플리케이션 로드 밸런서에 관한 규칙

사진첨부

사진첨부
규칙을 언제든 추가하거나 삭제할 수 있다.

Network Load Balancer (NLB) 개요

  • Lyver 4, TCP, UDP
  • 성능은 매우 높음
  • 가용 영역별로 하나의 고정 IP를 가짐.
  • 고성능, TCP, UDP, 정적 IP -> NLB

Target Groups

  • EC2 Instances
  • IP Address - Private IPs
  • ALB앞에 배치
  • Health Check : TCP, HTTP, HTTPS Protocols

NLB Health Check가 Unhealth일 때

  • NLB에서는 밸런서의 보안 그룹을 정의하지 않음.

Gateway Load Balancer (GWLB) 개요

  • 가장 최근의 로드 밸런서
  • 모든 로드 밸런서 보다 낮은 계층에서 작동함 : L3 (layer 3)
    1. Transparent Network Gateway (투명 게이트웨이)
    2. Load Balancer
  • 6081번 포트의 GENEVE 프로토콜을 사용하자 (시험에서) -> GWLB

Target Groups

  • EC2 Instances
  • IP Addresses - Private IPs

Elastic Load Balancer - Sticky Sessions(고정 세션)

  • 요청에 응답하기 위해 백엔드에 동일한 인스턴스를 갖는 것임.
  • CLB, ALB에서 설정할 수 있음.
  • Coockie가 만료되면 클라이언트가 다른 EC2 인스턴스로 리디렉션 된다는 것임.

  1. Application-based Cookies
    • 사용자 정의 쿠키
    • Application cookie

  2. Duration-based Cookies
    • 로드밸런서에서 생성되는 쿠키

사진첨부

사진첨부

Elastic Load Balancer - Cross Zone Load Balancing

  • 교차 영역 밸런싱
  • ALB에 기본으로 적용되어 있음.
  • NLB, GWLB -> 비활성화 되어있음. 비용 내야 됨.
  • CLB -> 비활성화 되어 있음. 비용 필요 없음.

Elastic Load Balancer - SSL 인증서

  • SSL/TLS 인증서
  • SSL 보안 소켓 계층을 의미, 연결을 암호화하는 데 사용
  • TLS는 새로운 버전의 SSL, 전송 계층 보안을 의미
  • SSL 인증서는 만료날짜가 있어서 주기적으로 갱신해 인증 상태를 유지해야 함.

Load Balancer - SSL Certificates

  • Users -> HTTPS (S가 붙은 건 SSL 인증서를 써서 암호화해 안전하다는 뜻)
  • ACM = AWS Certificate Manager (AWS 인증서 관리자)
  • HTTP listener를 구성할 때 반드시 HTTPS listener로 구성해야 함.

SSL - Server Nama Indication

  • 중대한 문제의 해결책
  • 여러 개의 SSL 인증서를 하나의 웹 서버에 로드해 하나의 웹 서버가 여러 개의 웹 사이트 지원할 수 있게 해줌.
  • ALB, NLB, CloudFront에서만 작동함.

Elastic Load Balancer(ELB) - 연결 드레이닝

  • Connection Draining - for CLB
  • Deregistration Delay - for ALB & NLB
  • value : 0 - 드레이닝이 일어나지 X

Auto Scaling Group(ASG) 개요

  • ASG 목표 : 스케일 아웃, 스케일 인
  • ASG가 로드 밸런서와 페어링 하는 경우 ASG에 속한 모든 EC2 인스턴스가 로드 밸런서에 연결된다.
  • Free

ASG 생성

  • EC2를 먼저 모두 종료한다.

사진첨부

사진첨부

사진첨부

사진첨부

사진첨부

사진첨부

사진첨부

#!/bin/bash
# Use this for your user data (script from top to bottom)
# install httpd (Linux 2 version)
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html



사진첨부

사진첨부

사진첨부

사진첨부

사진첨부
ASG가 잘 생성되었다.
ASG는 EC2 인스턴스를 한 개 생성해 줄 것이다.

사진첨부
새로운 Instance가 생성된 것을 확인할 수 있다.

사진첨부
역시나 새로운 Instance가 ASG에 의해 만들어졌다.

Auto Scaling Group - 조정 정책

Dynamic Scaling Polices

  • 동적 스케일링 정책은 세 가지 유형이 있음.
    1. Target Tracking Scaling - 대상 추적 스케일링
    2. Simple / Step Scaling - 단순 / 단계 스케일링
    3. Scheduled Actions - 예약된 작업

Predictive Scaling - 예측 스케일링

  • 지속적으로 예측 생성
  • 해당 예측을 기반으로 사전에 스케일링 작업이 예약됨.

Good metrics to scale on

  • CPU 사용량
  • 대상별 요청의 수
  • 평균 네트워크 입출력량 (네트워크 병목 현상 발생 예측)
  • Any custom metric

Scaling Cooldowns - 스케일링 휴지

  • 스케일링 작업이 끝날 때마다 기본적으로 5분 혹은 300초의 휴지 기간을 갖는 것.
  • 휴지 기간에는 ASG가 추가 인스턴스를 실행 또는 종료할 수 없음.
  • 즉시 사용이 가능한 AMI를 이용하여 EC2 인스턴스 구성 시간을 단축하고 이를 통해 좀 더 신속히 처리하는 것이 좋음.

Auto Scaling Group - 스케일링 정책

사진첨부

3가지로 나누어진다.