Auto Scaling 그룹의 최대 값이 min, desired 값보다 클 때의 스케일링 동작을 확인해 봤습니다.
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Auto Scaling 그룹의 최대 값(max)이 min, desired 값보다 클 때의 스케일링 동작을 확인해 봤습니다.
사전 준비
사전 준비로는 간단하게 Auto Scaling 그룹을 준비합시다.
Auto Scaling 그룹에서의 설정은 다음과 같습니다. 그룹 크기에서 max, min, desired 값을 각각 설정합니다. desired(원하는 욜량)과 min(원하는 최소 용량)은 1로 설정하고 max(원하는 최대 용량)을 4로 설정합니다.
각 항목에 대한 설명은 다음과 같습니다.
- min(원하는 최소 용량)
- 최소 EC2 인스턴스 수입니다. 수동 또는 자동으로 최소 크기 제한보다 EC2 인스턴스를 작게 만들 수 없습니다.
- max(원하는 최대 용량)
- 최대 EC2 인스턴스 수입니다. 수동 또는 자동으로 최대 크기 제한보다 EC2 인스턴스를 늘릴 수 없습니다.
- desired(원하는 욜량)
- Auto Scaling 그룹을 만들 때 초기 EC2 인스턴스의 수입니다.
이 설정으로 Auto Scaling 그룹을 생성하면 다음 이미지와 같이 최소 한 대의 EC2 인스턴스가 생성될 것이며, 이를 바탕으로 스케일링 동작을 확인해 봅시다.
대상 추적 크기 조정에서 확인
동적 크기 조정 정책에서 [대상 추적 크기 조정]를 설정하여 CPU 부하에 따른 스케일링 작업을 확인해 봅시다.
강제로 EC2 인스턴스의 CPU 사용률을 올리기 위해 stress를 사용합니다.
설치 방법 및 명령어는 아래 블로그를 확인해 주세요.
CPU 부하를 올린 다음 기다려보니 3대의 EC2 인스턴스가 추가된 것을 확인할 수 있습니다. 한 번에 EC2 인스턴스가 다 추가된 것일까요? 확인해 봅시다.
추가된 세 대의 EC2 인스턴스의 생성 시간을 확인해 봤더니 모두 동일한 시간에 생성되었습니다. CPU 사용률을 100%로 유지했기 때문일까요? 보다 정확하게 확인하기 위해 CPU를 25-30%정도만을 유지해서 테스트해 보겠습니다.
aws ec2 describe-instances \
--instance-ids i-xxxxxxxxx \
--query "Reservations[*].Instances[*].LaunchTime" \
--output text
2025-04-22T02:24:32+00:00
stress는 CPU를 100로 만들어주기 때문에 보다 정밀한 설정이 불가능합니다. 때문에 stress-ng를 사용해서 CPU 부하를 20%까지만 사용하도록 설정합시다.
sudo yum install stress-ng
sudo stress-ng --cpu 1 --cpu-load 20 --timeout 300
CPU가 약 18%를 유지하니 하나의 EC2 인스턴스가 추가되었습니다.
CPU 사용률이 30%를 넘어가면서 하나의 EC2 인스턴스가 또 추가되었습니다. 지정한 [CPU 사용률이 15%를 넘으면]이라는 조건에 맞추어 15% -> 30% 식으로 EC2 인스턴스가 추가된 것일까요? 아니면 지정한 조건에 따라 CPU 부하가 지속되어서 EC2 인스턴스가 추가된 것일까요?
이번에는 CPU 부하 시간을 늘려서 확인해 봅시다.
sudo stress-ng --cpu 1 --cpu-load 20 --timeout 900
약 10분 이상 CPU 20%를 유지했음에도, 단 하나의 EC2 인스턴스만이 추가된 상태입니다. 이후 20%를 꾸준히 유지해 봤지만 EC2 인스턴스가 추가되지는 않았습니다.
결과
결과적으로는 시간이 아니라 지정한 조건(CPU 사용률)과 워밍업에 따른 것 같습니다.
이번 테스트에서 사용한 설정은 다음과 같습니다.
- Target Tracking 정책
- 평균 CPU 사용률 15% 목표
- 기존 인스턴스 1대, 워밍업 시간 300초
- 부하: --cpu-load 20 → CPU 부하 약 20%
- 결과:
- 인스턴스가 한 대만 추가되어 총 2대가 됨 (최대 4대까지 가능한데도)
결과는 다음과 같습니다.
- 대상 추적 정책의 작동 방식
- CPU 사용률 목표가 15%로 설정되어 있고, stress-ng 명령어로 20% 부하를 주었을 때
- Auto Scaling은 점진적으로(gradually) 용량을 조정하려고 함
- 한 번에 여러 인스턴스를 추가하지 않고, 필요한 만큼만 점진적으로 추가
- 워밍업 시간(300초) 영향
- 새로운 인스턴스가 추가된 후 300초(5분) 동안은 해당 인스턴스의 지표가 무시됨
- 이 기간 동안 추가 확장이 즉시 발생하지 않음
- 부하 수준
- 20% CPU 부하는 목표치(15%)를 약간만 초과하는 수준
- 시스템이 판단하기에 한 대의 추가만으로도 충분하다고 판단했을 수 있음
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 jaewookkim533@yahoo.com로 보내주시면 감사하겠습니다.