일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Classification
- regression
- LG Aimers 4th
- 분류
- 해커톤
- GPT-4
- AI
- supervised learning
- 티스토리챌린지
- ChatGPT
- PCA
- OpenAI
- 딥러닝
- LLM
- Machine Learning
- 오블완
- LG
- LG Aimers
- 지도학습
- gpt
- 머신러닝
- deep learning
- 회귀
- Today
- Total
SYDev
[핸즈온 AWS] Chapter 9. AWS 오토 스케일링 서비스 본문
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 구성
- CloudFormation으로 기본 인프라 배포
- 기본 인프라 환경 검증 수행
- EC2 instance 시작 템플릿 구성
- Auto Scaling Group 생성 & 조정 옵션 구성
- Auto Scaling으로 생성된 instance에 CPU 부하를 발생시키고 동작 확인
- 자원 삭제
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를 삭제
참고자료
- "한 권으로 배우는 도커 & 쿠버네티스", 장철원, 한빛미디어, 2024.04.29
'KHUDA 6th > Study' 카테고리의 다른 글
[Docker & Kubernetes] 5주차 정리 (1) - Chapter 9. 쿠버네티스 기초 (0) | 2024.08.20 |
---|---|
[핸즈온 AWS] Chapter 6. AWS 데이터베이스 서비스 (1) | 2024.08.14 |
[Docker & Kubernetes] 4주차 정리 (2) - Chapter 8. 쿠버네티스 실습 환경 구축 (0) | 2024.08.13 |
[Docker & Kubernetes] 4주차 정리 (1) - Chapter 7. 쿠버네티스의 기본 구조 (0) | 2024.08.10 |
[핸즈온 AWS] Chapter 5. AWS 스토리지 서비스 (0) | 2024.08.07 |