본문 바로가기
Cloud/AWS

ELB + EC2 Auto Scaling

by 민휘 2024. 1. 7.

ELB와 EC2 Auto Scaling 통합하기

  • AWS Auto Scaling Group은 EC2 인스턴스의 스케일링을 담당한다.
  • ELB는 로드 밸런싱을 담당한다.
  • ELB에 ASG를 통합하여 ASG가 관리하는 EC2 인스턴스들에 트래픽을 분산시킬 수 있다. 또 ELB 헬스 체크를 통해 정상 인스턴스에만 트래픽을 전송할 수 있다.

 

Auto Scaling Group의 역할

  • 그룹 안의 ec2 인스턴스의 개수를 관리. 스케일 아웃과 스케일 인을 담당한다. 최소 개수, 최대 개수를 설정한다. Policy로 스케일링 전략을 정할 수 있다.
  • CloudWatch를 통해 인스턴스의 성능 지표를 모니터링하고, 특정 지표에 따라 자동으로 인스턴스를 확장 및 축소할 수 있다.
  • 그룹 내 인스턴스의 헬스 체크를 주기적으로 수행해 인스턴스의 상태를 확인한다.
  • 롤링 업데이트를 지원한다.
  • 가용성을 위해 사용한다.

 

Auto Scaling Policies 종류

  • Dynamic : Amazon CloudWatch 지표에 따라 동적으로 조정
    • Target Tracking : target value를 만족하도록 조정. CPU 사용률이 50%가 넘지 않도록 ec2 개수를 자동 조정한다.
    • Step : 단계적인 범위에 대한 행동 정함. CPU 30-40%이면 하나 추가, 50-60이면 두개 추가.
    • Simple : 단순히 수치에 대한 행동 정함. CPU 50% 넘으면 두개 추가.
  • Predictive : CloudWatch의 데이터를 보고 ML이 패턴을 예측해서 미리 조정해둠.
  • Scheduled : 새벽에는 줄이고, 아침에는 늘리기.

 

이제 실습하기! 실습 과정은 이 유튜브 튜토리얼을 참고했다.

 

Security Group 생성

ALB SG

  • 이름 : SGforALB
  • 인바운드 규칙 : HTTP - Anywhere-IPv4

ASG SG

  • 이름 : SGforAutoScaling
  • 인바운드 규칙 : All TCP - ALB SG, SSH - Anywhere-IPv4

 

Auto Scaling Group 및 ALB 생성

1단계

  • ASG name : DemoAutoScaling
  • 아래 절차에 따라 시작 템플릿 생성
  • 시작 템플릿 : 생성 후 선택

시작 템플릿

  • 이름 : TestTemplate
  • OS : Amazon Linux 2023 AMI
  • 인스턴스 유형 : t2.micro
  • 키 페어 생성
  • 보안그룹 : SGforAutoScaling 선택
  • 스토리지 : 디폴트 EBS
  • 세부정보의 사용자 데이터 : 아파치 웹서버 설치 및 실행, 인덱스 파일 작성
  • #!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "<h1>This message from : $(hostname -i)</h1>" > /var/www/html/index.html

2단계

  • VPC : 디폴트
  • 가용영역 및 서브넷 : 모든 az 선택

3단계

  • 로드밸런싱 : 새 로드 밸런서에 연결
  • 로드밸런서 유형 : ALB
  • 이름 : DemoALB
  • 체계 : Internet-facing (공개)
  • VPC : default
  • 라우팅 대상 그룹 생성
  • Elastic Load Balancer 상태 확인 활성화

4단계

  • 현재 개수 : 1
  • 최소 개수 : 1
  • 최대 개수 : 2
  • 크기 조정 정책 없음

5, 6단계는 생략 후 ASG 생성

 

ALB 보안 그룹 설정

  • DemoALB > 보안
  • 보안 그룹 편집
  • SGforALB 선택

ASG 생성 확인

 

 

public ALB 동작 확인 (DNS 이름으로 접속)

 

Scaling Policy

Auto Scaling 탭 > 동적 크기 조정 정책 생성

Target Tracking Policy

정책 생성

  • 정책 유형 : 대상 추적 크기 조정
  • 이름 : Target Tracking Policy
  • 지표 유형 : 평균 CPU 사용률
  • 대상 값 : 30

CloudWatch 확인

  • ASG가 만든 알람
  • < 27은 스케일 인을 트리거하는 알람
  • > 30은 스케일 아웃을 트리거하는 알람

 

 

스케일 아웃 테스트 - ec2에 부하 발생시키기

  • ec2 인스턴스에 cloud console로 연결
  • sudo yum install stress -y
  • sudo stress --cpu 12 --timeout 30s

스케일 아웃 확인하기

  • EC2의 CPU 사용률이 52까지 튀었음
  • 알람이 발생하여 스케일 아웃 수행. 새 인스턴스 시작까지 시간이 좀 걸린다.

 

public ALB 동작 확인 (DNS 이름으로 접속)

 

Simple Scaling

정책 생성

  • 정책 유형 : 단순 크기 조정
  • 이름 : avg-cpu-policy
  • 아래 처럼 CloudWatch 생성 후 선택
  • 추가, 1, 용량 단위 → 알람이 발생하면 인스턴스를 한개 추가한다.

CloudWatch 생성

DemoAutoScaling 내 ec2의 평균 CPUUtilization이 30보다 크면 CPUUtilization 알람이 발생한다.

1단계

  • 지표 선택 : EC2 > Auto Scaling > CPUUtilization
  • 지표 이름 : CPUUtilization
  • AutoScalingGroupName : DemoAutoScaling
  • 통계 : 평균
  • 기간 : 5분
  • 임계값 유형 : 정적
  • 경보 조건 : 보다 큼
  • 값 : 30

2단계

  • 알림 제거

3단계

  • 경보 이름 : CPUUtilizationForTG

테스트하기 - 경보 발생시키기

  • 만약 현재 활성화된 인스턴스가 2개라면 하나로 줄인다.
  • 클라우드 셸 실행
  • aws cloudwatch set-alarm-state --alarm-name CPUUtilizationForTG --state-value ALARM --state-reason "test”

스케일 아웃 확인하기

 

Step Scaling

ASG 최대 용량 수정

  • 그룹 세부 정보 편집
  • 최대 용량 7로 수정
  • 현재 용량 1로 수정

정책 생성

  • 정책 유형 : 단순 크기 조정
  • 이름 : step-avg-cpu-policy
  • CloudWatch : 위에서 생성한 CPUUtilzationForTG 선택
  • 작업 추가 : CPUUtilization 지표값의 범위에 따라 추가할 인스턴스 용량 지정

 

테스트 하기

  • ec2 인스턴스에 cloud console로 연결
  • sudo yum install stress -y
  • sudo stress --cpu 8 --timeout 30s

50%보다 높게 튀어서 인스턴스가 두개 추가된 것을 확인할 수 있다.