Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

SYDev

[핸즈온 AWS] Chapter 9. AWS 오토 스케일링 서비스 본문

KHUDA 6th/Study

[핸즈온 AWS] Chapter 9. AWS 오토 스케일링 서비스

시데브 2024. 8. 21. 03:07

9.1. 스케일링 

9.1.1. 스케일링이란

  • Scaling: IT 자원확장하거나 축소하는 기능
  • IT 자원의 사용 요구는 항상 고정적이지 않고 특정 상황이나 이벤트에 따라 가변적 -> 자원의 성능 및 수량확장하거나 축소하는 개념인 스케일링의 필요성
  • IT 자원의 고가용성(서버, 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질)과 내결함성(시스템의 일부 구성 요소가 작동하지 않더라도 계속 작동할 수 있는 기능) 확보

 

9.1.2. 스케일링의 종류

 스케일링 기법은 확장 및 축소 방향에 따라 수직 스케일링(vertical scaling)수평 스케일링(horizontal scaling)으로 구분

 

Vertical Scaling

  • Vertical Scaling: IT 자원의 용량을 확장하거나 축소 -> scale-up, scale-down
  • scale-up: IT 자원 부하 증가 -> CPU나 메모리 성능을 높은 것으로 대체
  • scale-down: IT 자원 부하 감소 -> CPU나 메모리 성능을 낮은 것으로 대체

Horizontal Scaling

  • Horizontal Scaling: IT 자원의 수을 확장하거나 축소 -> scale-in, scale-out
  • scale-out: IT 자원 부하 증가 -> 자원 수량 확장
  • scale-in: IT 자원 부하 감소 -> 자원 수량 축소

 

9.2. AWS 오토 스케일링 서비스

  • AWS Auto Scaling: AWS에서 제공하는 클라우드 자원에 대한 스케일링 서비스
  • 클라우드 자원을 동적으로 확장하거나 축소하여 클라우드 자원의 규모를 조정 
  • AWS auto scaling으로 자원 규모를 조정하는 대상: Amazon EC2 instance, Amazon ECS, Amazon DynamoDB table & index, Amazon Aurora의 복제본 

9.2.1. Amazon EC2 오토 스케일링

  • Amazon EC2 Auto Scaling: EC2 instance에 설치된 application workload(주어진 시간 안에 컴퓨터 시스템이 처리해야 하는 작업량)를 EC2 instance 수에 scale-out,scale-in을 수행하여 유지
  • Auto scaling group이라는 EC2 instance 모음을 생성 -> 최소 및 최대 instance 수를 지정 -> 그룹 내 해당 범위로 instance 수를 유지

 

9.2.2. AWS EC2 오토 스케일링 구성 요소

 Amazon EC2 오토 스케일링 서비스의 핵심 구성 요소 - 그룹, 구성 템플릿, 조정 옵션

 

그룹

  • EC2 instance를 auto scaling으로 조정하고 관리하기 위해 EC2 instance를 논리적으로 구분하는 그룹으로 구성
  • 그룹을 생성할 때, EC2 instance 최소 및 최대 인스턴스 수와 최초 요구하는 인스턴스 수 등 정보를 지정

구성 템플릿

  • EC2 instance를 구성하는 템플릿
  • instance AMI, instance type, key pair, security group 등 정보를 지정

조정 옵션

  • 오토 스케일링 그룹을 조정하는 다양한 방법을 정의하는 것
  • 지정한 조건이나 일정에 따라 오토 스케일링 그룹을 조정

 

9.2.3. Amazon EC2 오토 스케일링의 인스턴스 수명 주기

  • Amazon EC2 Auto Scaling은 EC2 instance와 별개의 수명 주기(life cycle)를 가짐
  • Amazon EC2 auto scaling을 시작하고 서비스에 들어갈 때 시작, instance를 종료할 때 서비스에서 제외하고 대상을 종료

-> 다양한 이벤트로 인스턴스의 상태 정보가 전환됨

-> 두 개의 상태전환 인스턴스 확장에 따른 이벤트, 인스턴스 축소에 따른 이벤트

 

인스턴스 확장에 따른 이벤트

 다음 경우에 발생

  • 오토 스케일링 그룹의 크기를 수동으로 늘리는 경우
  • 지정된 수요 증가 -> auto scaling group의 크기를 자동으로 늘리는 조정 정책 적용하는 경우
  • 특정 시간에 auto scaling group의 크기를 자동으로 늘리는 예약된 작업을 수행하는 경우

- 인스턴스 확장 이벤트가 발생 -> auto scaling은 할당된 configuration template을 사용하여 필요한 수의 instance 시작 -> 이때 instance 상태는 '대기 중'으로 시작됨

- instance가 완전히 구성되면 auto scaling에 연결되어 '실행 중' 상태로 전환

- auto scaling load balancer와 연결되는 경우 -> load balancer가 instance를 자동으로 load balancer에 등록- > '실행 중' 

 

인스턴스 축소에 따른 이벤트

 다음 경우에 발생

  • 오토 스케일링 그룹의 크기를 수동으로 줄이는 경우
  • 지정된 수요 감소 -> auto scaling group의 크기를 자동으로 줄이는 조정 정책을 적용하는 경우
  • 특정 시간에 auto scaling group의 크기를 자동으로 줄이는 예약된 작업을 수행하는 경우

- instance

- 인스턴스 축소 이벤트 발생 -> auto scaling은 하나 이상의 instance 종료(종료 정책을 이용하여 종료할 인스턴스 결정) -> 선택된 인스턴스의 상태 '종료 중'으로 전환(다시 '실행 중'으로 전환 불가능)

- instance를 종료할 때, 바로 삭제되지 않고 일정 시간 대기하는 경우도 존재 -> 이런 상태를 'Draining'이라고 함 -> draining 상태에서는 새로운 연결 수행 X

 

9.2.4. Amazon EC2 오토 스케일링 조정 옵션

인스턴스를 일정한 수로 유지

  • 실행 중인 instance를 주기적으로 확인 -> 비정상 상태의 instance가 있으면 종료 -> 새로운 instance 시작하여 일정한 수로 유지

수동 조정

  • auto scaling group의 최대/최소 용량을 수동으로 변경
  • 수동 조정으로 업데이트된 사항으로 인스턴스를 생성하거나 종료

동적 조정

  • 트래픽의 변화에 따라 auto scaling group의 용량을 조정
  • 대상 추적 조정: 특정 지표의 목표 값을 기준으로 유지하는 auto scaling 적용 -> ex) 평균 CPU 사용률 50%
  • 단계 조정: auto scaling group의 용량을 단계별로 조정하여 auto scaling 적용 -> 임곗값 기준으로 임곗값을 넘어서는 크기에 따라 단계적으로 조정
  • 단순 조정: auto scaling group의 용량을 단일하게 조정하여 auto scalng 적용 -> 임곗값 기준으로 임곗값을 넘어서는 크기와 무관하게 단일하게 조정

일정을 기반으로 예약된 조정

  • 작업 시간이나 날짜에 따라 auto scaling 수행 
  • group의 instance 수를 늘려야 할지 또는 줄여야 할지 정확히 아는 경우에 유용
  • ex) 업무 시간에만 사용량이 많게 반복되는 일정

일정을 기반으로 예측 조정

  • 지난 측정값으로 누적된 기록 -> 트래픽 흐름의 일일 및 주간 패턴을 예측하여 auto scaling 수행

 

+ auto scaling 발생 별도 요금 X, 사용한 EC2 instance와 CloudWatch 경보에 따른 요금만 발생

 

 

9.3. Amazon EC2 Auto Scaling 구성

목표 구성도

 

  1. CloudFormation으로 기본 인프라 배포
  2. 기본 인프라 환경 검증 수행
  3. EC2 instance 시작 템플릿 구성
  4. Auto Scaling Group 생성 & 조정 옵션 구성
  5. Auto Scaling으로 생성된 instance에 CPU 부하를 발생시키고 동작 확인
  6. 자원 삭제

 

9.3.2. 기본 인프라 환경 검증 수행

# AWS CLI 버전 확인 
aws --version

# AWS ec2 설정 확인하기
aws ec2 describe-instances

# AWS ec2 설정 확인하기 - 정보를 필터링(id, 상태, privateIP)해서 텍스트로 출력하기
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, State.Name, PrivateIpAddress]' --output text

# 반복(1초간격)해서 인스턴스 정보 확인 - 오토스케일링에 의해서 인스턴스가 증가하게 되면 그 정보를 확인하기 위해서
while true; do aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, State.Name, PrivateIpAddress]' --output text; date; sleep 1; done

--------------------------------------------------------

# ApachBench(부하테스트용) 확인 - 이미 설치되어있어서 사용가능함
ab -V

# ALB DNS 이름 변수 지정
ALB=ALB DNS 이름

# dig(도메인주소찾기)로 ALB 변수로 잘 들어갔는지 체크 - IP 주소 나옴
dig +short $ALB

# ALB로 요청보내보기 - ALB에 아무 인스턴스도 연결되어있지 않기떄문에 503이 반환됨
curl $ALB

--------------------------------------
(아래는 Auto Scaling 배포 후)
# 반복문으로 인스턴스 정보확인
while true; do aws ec2 describe-instances --filter "Name=tag:Lab,Values=ASLab" --query 'Reservations[*].Instances[*].[InstanceId, State.Name, PrivateIpAddress]' --output text; date; sleep 1; done

# 반복문으로 ALB에 요청 보내기
while true; do curl $ALB --silent --connect-timeout 1; date; echo "---[AutoScaling]---"; sleep 1; done

 

9.3.3. EC2 instance 시작 템플릿 생성

-> 다양한 설정을 활용하여 시작 템플릿 정의

-> 생성된 시작 템플릿을 auto scaling group에 적용할 수 있음 

 

9.3.4. Amazon EC2 Auto Scaling Group 생성

Auto Scaling Group 생성 및 Instance 확대 정책 수립

  • 최초 인스턴스 생성 수는 한 대, 오토 스케일링 동작으로 인스턴스를 1 - 4대 유지
  • 인스턴스 수의 크기를 확대하는 조정 정책 -> 대상 추적 크기 조정 정책 -> 3분 동안 세 번 연속으로 CPU 평균 사용률이 80% 이상일 때는 스케일 아웃을 수행

 

Instance 종료 정책 수립

 

Instance 축소 정책 수립

-> FirstEC2ASG의 축소 정책인 Scale In Policy와 확장 정책인 Scale Out Policy 생성

 

CloudWatch 대시보드 구성

-> 생성한 경보에 대한 대시보드 생성

 

 

9.3.5. MyEC2에 접속하여 Instance에 CPU 부하 발생시키기

while true; do curl $ALB --silent --connect-timeout 1; date; echo "---[AutoScaling]---"; sleep 1; done

-> MyEC2에 접속해서 지속적으로 인스턴스에 부하 발생

 

-> WebServers SSH 터미널에서 htop 명령어로 서버 자원의 CPU나 메모리 사용률 출력

-> CPU 사용률이 0%에 가까움

 

ab -n 500 -c 1 http://$ALB/load.php

-> MyEC2의 두 번째 instance에서 500회 반복 작업을 수행하는 명령어 수행

-> CPU 사용률이 100%에 가까워짐

 

오토 스케일링의 스케일 아웃 확인

 

-> 스케일 아웃으로 하나 추가된 instance -> CPU 사용률이 3분 내로 평균 80% 이상을 넘어갔다는 의미

 

-> 대시보드를 통해서도 확인

 

오토 스케일링의 스케일 인 확인

- 강제적인 CPU 부하가 모두 끝나고, CPU 사용률 평균값은 0에 가깝도록 낮아짐 -> 인스턴스 축소 조정으로 scale-in 수행 

- CPU 사용률이 2분 내로 평균 10% 이하로 내려가서 scale-in 조정으로 한 대의 instance를 삭제


참고자료

 

AWS Certification Study · AUSG의 AWS 자격증 스터디

AUSG의 AWS 자격증 스터디

AUSG.github.io

 

고가용성 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 고가용성(高可用性, 영어: high availability, HA)은 서버, 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말

ko.wikipedia.org

 

AWS 8주차 실습 - 오토스케일링 실습

실습 내용 Auto Scaling 그룹 생성을 통한 오토스케일링 생성 Scale Up, down 정책 만들기 CPU 부하를 줘서 잘 작동하는지 테스트 CloudFormation으로 환경 구성 CloudFormation 스택 생성 - 링크 클릭 후 템플릿

velog.io

  • "한 권으로 배우는 도커 & 쿠버네티스", 장철원, 한빛미디어, 2024.04.29