Cloud & Platform
6강. Auto Scaling
6강. Auto Scaling 학습 내용을 정리한 백필 노트입니다.
이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.
1. Auto Scaling 이란?
- 정의: 트래픽에 따라 서버(EC2 인스턴스)의 개수를 자동으로 조절해주는 기능입니다.
- 필요성:
- 서버 용량 초과 방지: 갑작스러운 트래픽 증가 시 자동으로 서버를 늘려 안정적인 서비스를 유지합니다.
- 자원 낭비 방지: 트래픽이 적을 때는 서버 수를 줄여 불필요한 비용을 절감합니다.
- 효율적인 운영: 트래픽 변동에 유연하게 대응하여 안정적이고 효율적인 서버 운영이 가능하게 합니다.
- 특징: Auto Scaling은 일반적으로 **ELB(Elastic Load Balancing)**와 함께 사용되어 트래픽을 새로 생성된 인스턴스에 분산시킵니다.
2. Auto Scaling 기본 구조
- 클라이언트 요청: 사용자의 요청이 ELB로 들어옵니다.
- ELB: 요청을 Auto Scaling Group 내의 EC2 인스턴스들에게 분산합니다.
- CloudWatch: EC2 인스턴스들의 CPU 사용률과 같은 지표를 모니터링합니다.
- Auto Scaling Group (ASG):
- CloudWatch에서 설정된 조건(예: CPU 사용률 80% 이상)이 충족되면, ASG는 새로운 EC2 인스턴스를 생성(Scale-out)합니다.
- 반대로 조건이 해소되면(예: CPU 사용률 감소), 인스턴스를 종료(Scale-in)합니다.
- AMI (Amazon Machine Image): 새로운 EC2 인스턴스를 생성할 때, 미리 정의된 AMI를 사용하여 동일한 구성의 서버를 복제합니다.
주요 구성 요소
- Auto Scaling Group (ASG):
- Auto Scaling이 적용되는 EC2 인스턴스들의 집합입니다.
- 설정된 최소, 최대, 목표 용량 값에 따라 인스턴스 수를 조절합니다.
- CloudWatch와 연동하여 특정 조건에 따라 확장 또는 축소 정책을 실행합니다.
- 시작 템플릿 (Launch Template) / 시작 구성 (Launch Configuration):
- Auto Scaling으로 새로 생성될 EC2 인스턴스의 사전 설정 정보입니다.
- 포함되는 내용:
- AMI: 인스턴스의 기반이 되는 이미지
- 인스턴스 유형:
t2.micro등 - 스토리지(EBS)
- 보안 그룹
- 현재는 시작 템플릿(Launch Template) 사용이 권장됩니다.
3. 실습: Auto Scaling 구성하기
3.1. (준비) WordPress EC2 인스턴스 종료하기
- 실습을 위해 기존에 운영하던 두 개의 WordPress 인스턴스 중 하나를 종료하여 한 개만 남겨둡니다.
3.2. (실습) AMI 생성하기
Auto Scaling Group이 인스턴스를 복제할 수 있도록 현재 운영 중인 EC2 인스턴스를 기반으로 AMI(Amazon Machine Image)를 생성합니다.
- EC2 대시보드에서 실행 중인
WordpressInstance를 선택합니다. 작업→이미지 및 템플릿→이미지 생성을 선택합니다.- 이미지 이름을
MyWordpressAMI와 같이 지정합니다. 재부팅 안 함옵션을 활성화하면 인스턴스를 중지하지 않고 이미지를 생성할 수 있지만, 파일 시스템의 무결성을 보장하지 않을 수 있습니다.이미지 생성버튼을 클릭합니다.- 왼쪽 메뉴의
이미지→AMI에서 생성된 이미지가사용 가능상태인지 확인합니다.
3.3. (실습) Auto Scaling Group 생성하기
- 시작 템플릿 생성:
- EC2 대시보드의 왼쪽 메뉴에서
시작 템플릿→시작 템플릿 생성을 클릭합니다. - 이름:
MyTemplate - 애플리케이션 및 OS 이미지(AMI): 방금 생성한
MyWordpressAMI를 선택합니다. - 인스턴스 유형:
t2.micro를 선택합니다. - 키 페어: 기존에 사용하던 키 페어를 선택합니다.
- 네트워크 설정:
기존 보안 그룹 선택에서 WordPress용 보안 그룹을 선택합니다. 시작 템플릿 생성을 클릭합니다.
- EC2 대시보드의 왼쪽 메뉴에서
- Auto Scaling Group 생성:
- EC2 대시보드 왼쪽 메뉴 하단의
Auto Scaling 그룹→Auto Scaling 그룹 생성을 클릭합니다. - 1단계: 시작 템플릿 또는 구성 선택
- 이름:
MyAutoScalingGroup - 시작 템플릿: 위에서 생성한
MyTemplate을 선택하고다음을 클릭합니다.
- 이름:
- 2단계: 인스턴스 시작 옵션 선택
- 네트워크: VPC를 선택하고, ELB의 대상 그룹이 사용하는 가용 영역(예:
ap-northeast-2a,ap-northeast-2c)과 동일한 서브넷을 선택합니다. 다음을 클릭합니다.
- 네트워크: VPC를 선택하고, ELB의 대상 그룹이 사용하는 가용 영역(예:
- 3단계: 고급 옵션 구성
- 로드 밸런싱:
기존 로드 밸런서에 연결을 선택합니다. - 기존 로드 밸런서 대상 그룹: 기존에 생성한
MyTargetGroup을 선택합니다. - 상태 확인:
Elastic Load Balancer 상태 확인 켜기를 활성화합니다. - 상태 확인 유예 기간: 300초로 설정합니다.
다음을 클릭합니다.
- 로드 밸런싱:
- 4단계: 그룹 크기 및 크기 조정 정책 구성
- 원하는 용량: 1
- 최소 용량: 1
- 최대 용량: 2
- 크기 조정 정책:
대상 추적 크기 조정 정책을 선택합니다.- 지표 유형:
평균 CPU 사용률 - 대상 값:
80(CPU 사용률이 평균 80%를 넘으면 인스턴스를 추가)
- 지표 유형:
- 5~7단계: 알림, 태그, 검토
- 필요시 알림(SNS) 및 태그를 추가하고, 마지막으로 설정을 검토한 후
Auto Scaling 그룹 생성을 클릭합니다.
- 필요시 알림(SNS) 및 태그를 추가하고, 마지막으로 설정을 검토한 후
- EC2 대시보드 왼쪽 메뉴 하단의
3.4. (실습) Auto Scaling 작동 테스트
-
인스턴스 부하 주기:
-
Auto Scaling Group에 의해 자동으로 생성된 새 인스턴스에 SSH로 접속합니다.Bash
ssh -i "my-key.pem" bitnami@<새 인스턴스의 퍼블릭 IP> -
CPU 부하 테스트 도구인
stress를 설치하고 실행합니다.Bashsudo apt-get install stress stress --cpu 4
-
-
모니터링 및 결과 확인:
- EC2 인스턴스의
모니터링탭에서 CPU 사용률이 급증하는 것을 확인합니다(99% 이상). - 잠시 후, Auto Scaling Group의 크기 조정 정책이 트리거되어 새로운 EC2 인스턴스가 자동으로 시작되는 것을 EC2 대시보드에서 확인할 수 있습니다.
Auto Scaling 그룹메뉴의활동탭에서 확장 이벤트(Scaling out) 기록을 볼 수 있습니다.
- EC2 인스턴스의
3.5. (실습) 데이터 불일치 문제 확인
- 문제 상황:
- ELB의 DNS 주소로 블로그에 접속합니다.
- 한 인스턴스에 접속하여 새 글을 작성합니다.
- 페이지를 새로고침하면, ELB가 트래픽을 분산시키므로 새 글이 보였다가 안 보였다가 하는 현상이 발생합니다.
- 원인:
- 각 EC2 인스턴스는 자신만의 내장 MySQL 데이터베이스를 가지고 있습니다.
- 한 인스턴스에서 작성된 글은 다른 인스턴스의 데이터베이스와 동기화되지 않습니다.
- 해결 방안:
- MySQL 데이터베이스를 EC2 인스턴스 외부로 분리하여 모든 인스턴스가 하나의 공유 데이터베이스(예: Amazon RDS)를 바라보도록 아키텍처를 변경해야 합니다.