[EC2] EC2 Auto Scaling Group 적용 (3) - 오토스케일링 테스트

  • 이번 포스트에서는 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 부하 증가를 감지하여 추가 인스턴스를 생성하는지 확인합니다.

테스트 시나리오

  1. 인스턴스에 인위적으로 CPU 부하를 유발합니다.
  2. Cloud Watch는 ASG 그룹의 인스턴스의 평균 CPU 점유율이 높아지는것을 감지하여 ASG에 피드백을 보냅니다.
  3. ASG가 새로운 인스턴스를 생성(Scale Out)합니다.

테스트 과정

1) 부하 유발 애플리케이션 설치

  1. ASG에 의해 생성된 인스턴스에 SSH로 접근합니다.
  2. stress-ng패키지를 설치합니다.
sudo apt update
sudo apt install stress-ng -y

2) CPU 부하 유발

  1. CPU 논리코어 수를 확인합니다. 명령어 입력 후 CPU(s) 부분이 CPU 논리코어 수입니다.
lscpu

  1. 확인 후 다음 명령어를 실행하여 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 명령어를 통해 확인합니다.
  1. 부하 상태를 top 명령어로 확인합니다.
top
  • %CPU 필드에서 CPU의 부하를 확인합니다
  • 하단 프로세스 목록에 stress-ng 프로세스 실행 여부 확인합니다

3) CloudWatch 경보 확인

  1. Cloud Watch로 이동해 경보 에서 모든경보를 클릭합니다.
  2. 오토스케일링의 경보를 클릭후 CPU 사용률 증가 경보가 생성되는지 확인합니다.

  1. CPU 사용률 기준치(50%)를 초과하면 ASG에서 Scale Out 작업을 수행합니다.

4) 인스턴스 추가 확인

  1. EC2 콘솔 > ASG > 활동 탭에서 스케일 아웃 로그를 확인합니다.

  1. 새로운 인스턴스가 생성되었는지 확인합니다.


2. Scale in 테스트

테스트 목표

  • ASG가 부하 감소를 감지하고 Scale In 작업을 진행하는지 확인합니다.

테스트 시나리오

  1. stress-ng 부하 종료: 인스턴스에서 실행 중인 stress-ng 프로세스를 종료하면 평균 CPU 사용률이 점차 감소합니다.
  2. CloudWatch 경보: CloudWatch에서 평균 CPU 사용률 감소를 감지하고, ASG에 피드백을 보냅니다.
  3. 인스턴스 종료: ASG는 조건에 따라 최소수량 이상의 여분 인스턴스를 Terminate 합니다.

테스트 과정

1) CloudWatch 경보 확인

  1. CloudWatch에서 ASG와 연결된 CPU 사용률 경보를 확인합니다.
  2. 평균 CPU 사용률이 임계값(50%) 이하로 감소하면, ASG가 스케일 인 작업을 트리거합니다

2) 인스턴스 감소 확인

  1. EC2 콘솔 > ASG > 활동 탭에서 스케일 인 로그를 확인합니다.
  2. 기존 인스턴스가 정상적으로 종료(Terminate)되었는지 확인합니다.


3 인스턴스 교체 테스트

테스트 목표

  • ASG가 헬스 체크 실패 상황을 감지하고, 해당 인스턴스를 종료하고, 새로운 인스턴스로 생성하는지 확인합니다.

테스트 시나리오

  1. 헬스 체크 실패 상황을 인위적으로 유발합니다
  2. ASG가 헬스 체크 실패를 감지 합니다.
  3. ASG가 문제가 있는 인스턴스를 종료(Terminate) 하고, 새로운 인스턴스를 생성(Launch)합니다.

테스트 과정:

1) Health Check 실패 유도

  1. ASG에 의해 생성된 인스턴스에 SSH로 접속합니다.
  2. 인스턴스의 네트워크 인터페이스를 비활성화하여 헬스 체크 실패를 유발합니다.
sudo ip link set eth0 down

2) 헬스 체크 실패 확인

  1. ASG가 해당 인스턴스에 접근할 수 없어 Health Check Fail 상태가 됩니다.
  2. ASG가 헬스 체크 실패를 감지하고, 새로운 인스턴스를 생성하고(Launch) 문제가있는 인스턴스를 종료합니다.(Terminate)

3) 결과 확인

  1. ASG의 활동 탭에서 교체 로그를 확인합니다.
  2. 문제가 있던 인스턴스가 Terminated 상태로 전환된 것을 확인합니다

  1. 새로운 인스턴스가 실행(또는 시작)된 것을 확인합니다.

결론

  • 이번 테스트를 통해 AWS Auto Scaling Group(ASG)을 활용하여 백엔드 시스템의 트래픽 증가와 장애 상황을 효과적으로 대응할 수 있음을 확인했습니다.
  • 트래픽 증가 대응: ASG의 Scale Out 기능을 통해 CPU 부하와 같은 지표를 기반으로 인스턴스를 자동으로 확장함으로써 백엔드 시스템의 처리 용량을 즉각적으로 늘릴 수 있습니다. 이를 통해 갑작스러운 트래픽 몰림 현상에도 안정적인 서비스를 제공할 수 있습니다.
  • 비용 최적화: 트래픽이 감소하면 Scale In 기능을 통해 불필요한 인스턴스를 종료하여 비용을 절감합니다. 이는 변동이 심한 트래픽 환경에서 매우 효과적입니다.
  • 장애 복구: 헬스 체크 실패 시 ASG가 자동으로 문제가 있는 인스턴스를 제거, 새로운 인스턴스를 생성 함으로써 백엔드의 가용성안정성을 보장합니다.
  • 이를 통해 트래픽 증가시, 백엔드의 확장성과 복원력을 극대화하고, 안정적인 사용자 경험을 제공할 수 있게 되었습니다.