- 이번 포스트에서는 AWS의 Auto Scaling Group(ASG)을 설정하고 동작을 확인하는 과정을 단계별로 알아보겠습니다.
ASG 테스트 개요 및 시나리오
1) 테스트 항목
1. Scale Out 테스트: 부하 증가 시 ASG가 적절히 인스턴스를 추가하는지 확인
2. Scale In 테스트: 부하 감소 시 ASG가 인스턴스를 줄이는지 확인
3. 인스턴스 교체 테스트: 헬스 체크 실패 시 ASG가 정상적으로 인스턴스를 교체하는지 확인
2) ASG 환경 설정
- 최소 인스턴스 수: 1개
- 최대 인스턴스 수: 3개(Scale Out 인스턴스 수 제한)
- 스케일링 조건: 평균 CPU 사용률 50% 이상(낮은 허들 설정)
- 인스턴스 교체 조건: 헬스 체크 실패
1. Scals out 테스트
테스트 목표
- ASG가 CPU 부하 증가를 감지하여 추가 인스턴스를 생성하는지 확인합니다.
테스트 시나리오
- 인스턴스에 인위적으로 CPU 부하를 유발합니다.
- Cloud Watch는 ASG 그룹의 인스턴스의 평균 CPU 점유율이 높아지는것을 감지하여 ASG에 피드백을 보냅니다.
- ASG가 새로운 인스턴스를 생성(Scale Out)합니다.
테스트 과정
1) 부하 유발 애플리케이션 설치
- ASG에 의해 생성된 인스턴스에 SSH로 접근합니다.
stress-ng
패키지를 설치합니다.
sudo apt update
sudo apt install stress-ng -y
2) CPU 부하 유발
- CPU 논리코어 수를 확인합니다. 명령어 입력 후 CPU(s) 부분이 CPU 논리코어 수입니다.
lscpu
- 확인 후 다음 명령어를 실행하여 CPU 부하를 줍니다.
stress-ng --cpu 1 --cpu-load 70 --cpu-method matrixprod --timeout 300
--cpu 1
: CPU 1개 사용
--cpu-load 70
: CPU 70% 부하
--timeout 300
: 5분 동안 부하 유지
- 부하 상태는
top
명령어를 통해 확인합니다.
- 부하 상태를
top
명령어로 확인합니다.
top
- %CPU 필드에서 CPU의 부하를 확인합니다
- 하단 프로세스 목록에
stress-ng
프로세스 실행 여부 확인합니다
3) CloudWatch 경보 확인
- Cloud Watch로 이동해 경보 에서 모든경보를 클릭합니다.
- 오토스케일링의 경보를 클릭후 CPU 사용률 증가 경보가 생성되는지 확인합니다.
- CPU 사용률 기준치(50%)를 초과하면 ASG에서 Scale Out 작업을 수행합니다.
4) 인스턴스 추가 확인
- EC2 콘솔 > ASG > 활동 탭에서 스케일 아웃 로그를 확인합니다.
- 새로운 인스턴스가 생성되었는지 확인합니다.
2. Scale in 테스트
테스트 목표
- ASG가 부하 감소를 감지하고 Scale In 작업을 진행하는지 확인합니다.
테스트 시나리오
- stress-ng 부하 종료: 인스턴스에서 실행 중인 stress-ng 프로세스를 종료하면 평균 CPU 사용률이 점차 감소합니다.
- CloudWatch 경보: CloudWatch에서 평균 CPU 사용률 감소를 감지하고, ASG에 피드백을 보냅니다.
- 인스턴스 종료: ASG는 조건에 따라 최소수량 이상의 여분 인스턴스를 Terminate 합니다.
테스트 과정
1) CloudWatch 경보 확인
- CloudWatch에서 ASG와 연결된 CPU 사용률 경보를 확인합니다.
- 평균 CPU 사용률이 임계값(50%) 이하로 감소하면, ASG가 스케일 인 작업을 트리거합니다
2) 인스턴스 감소 확인
- EC2 콘솔 > ASG > 활동 탭에서 스케일 인 로그를 확인합니다.
- 기존 인스턴스가 정상적으로 종료(Terminate)되었는지 확인합니다.
3 인스턴스 교체 테스트
테스트 목표
- ASG가 헬스 체크 실패 상황을 감지하고, 해당 인스턴스를 종료하고, 새로운 인스턴스로 생성하는지 확인합니다.
테스트 시나리오
- 헬스 체크 실패 상황을 인위적으로 유발합니다
- ASG가 헬스 체크 실패를 감지 합니다.
- ASG가 문제가 있는 인스턴스를 종료(Terminate) 하고, 새로운 인스턴스를 생성(Launch)합니다.
테스트 과정:
1) Health Check 실패 유도
- ASG에 의해 생성된 인스턴스에 SSH로 접속합니다.
- 인스턴스의 네트워크 인터페이스를 비활성화하여 헬스 체크 실패를 유발합니다.
sudo ip link set eth0 down
2) 헬스 체크 실패 확인
- ASG가 해당 인스턴스에 접근할 수 없어 Health Check Fail 상태가 됩니다.
- ASG가 헬스 체크 실패를 감지하고, 새로운 인스턴스를 생성하고(Launch) 문제가있는 인스턴스를 종료합니다.(Terminate)
3) 결과 확인
- ASG의 활동 탭에서 교체 로그를 확인합니다.
- 문제가 있던 인스턴스가 Terminated 상태로 전환된 것을 확인합니다
- 새로운 인스턴스가 실행(또는 시작)된 것을 확인합니다.
결론
- 이번 테스트를 통해 AWS Auto Scaling Group(ASG)을 활용하여 백엔드 시스템의 트래픽 증가와 장애 상황을 효과적으로 대응할 수 있음을 확인했습니다.
- 트래픽 증가 대응: ASG의 Scale Out 기능을 통해 CPU 부하와 같은 지표를 기반으로 인스턴스를 자동으로 확장함으로써 백엔드 시스템의 처리 용량을 즉각적으로 늘릴 수 있습니다. 이를 통해 갑작스러운 트래픽 몰림 현상에도 안정적인 서비스를 제공할 수 있습니다.
- 비용 최적화: 트래픽이 감소하면 Scale In 기능을 통해 불필요한 인스턴스를 종료하여 비용을 절감합니다. 이는 변동이 심한 트래픽 환경에서 매우 효과적입니다.
- 장애 복구: 헬스 체크 실패 시 ASG가 자동으로 문제가 있는 인스턴스를 제거, 새로운 인스턴스를 생성 함으로써 백엔드의 가용성과 안정성을 보장합니다.
- 이를 통해 트래픽 증가시, 백엔드의 확장성과 복원력을 극대화하고, 안정적인 사용자 경험을 제공할 수 있게 되었습니다.