[NCP] AutoScaling 구현

Autoscaling이란? 

Autoscaling은 애플리케이션 또는 서비스의 트래픽 변화에 따라 자동으로 리소스를 조정하는 기술이다. 예를 들어, 웹 애플리케이션의 사용자 수가 증가하면 서버 수를 자동으로 늘리고, 사용자 수가 감소하면 서버 수를 줄이는 것이 Autoscaling의 핵심 아이디어다. 이를 통해 서비스의 가용성과 성능을 최적화하고, 인프라 리소스를 효율적으로 활용할 수 있다. 특히 클라우드 컴퓨팅 환경에서 유용하며, 사용자의 수요에 신속하게 대응하여 비용을 절감할 수 있는 장점이 있다.

Autoscaling에는 두 가지 확장 방식이 있다. 바로 수직적 확장(Scale-up)과 수평적 확장(Scale-out)이다.

 

Scale-out (수평 확장)
Scale-out은 시스템의 성능을 향상시키기 위해 여러 개의 인스턴스 또는 서버를 추가하는 것을 의미한다.
예를 들어, 웹 애플리케이션의 부하가 증가하면 새로운 서버 인스턴스를 추가하여 트래픽을 분산시키는 것이 Scale-out이다.
Scale-out은 주로 분산 시스템에서 사용되며, 확장성이 높은 애플리케이션을 구현하는 데 유용하다.

 

Scale-up (수직 확장)
Scale-up은 단일 서버 또는 인스턴스의 리소스(예: CPU, 메모리, 디스크 공간 등)를 증가시키는 것을 의미한다.
예를 들어, 기존 서버의 메모리를 늘리거나 CPU를 업그레이드하여 더 많은 작업을 처리할 수 있는 더 강력한 서버로 스케일 업할 수 있다.
Scale-up은 주로 단일 서버 환경에서 사용되며, 한정된 리소스를 가진 애플리케이션의 성능을 향상시키는 데 유용하다.

요약하면, Scale-out은 서버 인스턴스를 추가하여 확장성을 향상시키는 반면, Scale-up은 기존 서버의 성능을 강화하여 성능을 향상시키는 것이다.

아키텍처 구축 순서

  • Server 생성
  • Application Load Balancer 생성(Target Group 포함)
  • Auto Scaling Launch Configuration 설정
  • Auto Scaling Group 설정
  • Cloud Insight Monitoring Event Rule 설정

1. Server 생성

VPC와 Subnet을 생성했다는 가정하에 진행하도록 하겠다. 

2. Application Load Balancer 생성(Target Group 포함)

타겟 그룹에는 HTTP프로토콜 80포트를 타겟으로 해주면 된다. 

3. Server Image 생성 

Auto Scaling Launch Configuration에서 사용할 Server Image를 생성해준다. 

4. Launch Configuration 생성 

  • Launch Configuration은 Autoscaling작동시 서버타입을 지정해주는 역할을 한다. 
  • init Script를 통해 미리 Apache를 설치하여 로드밸런서 라운드로빈 테스트를 진행할 것이다. 

6. init script 생성

#! /bin/bash
yum install -y httpd 
systemctl start httpd 
cd /var/www/html
echo hostname : $HOSTNAME > index.html
systemctl restart httpd

5. Auto Scaling Group 생성

  • 좀 전에 만든 Launch Configuration 선택해준다. 

꼭 헬스 체크 유형을 로드밸런서를 선택해준다. 

최소 용량: 항상 유지해야 하는 최소 서버 수. 보통은 기본 용량을 충족하기 위해 설정한다. 
최대 용량: 시스템에서 허용되는 최대 서버 수. 확장 가능한 한도를 나타낸다. 
기대 용량: 유지하고 싶은 평균 서버 수. 트래픽 예측과 리소스 요구에 따라 조정한다.

 

정책설정

Autoscaling이 작동하면 한번에 몇개의 서버를 늘릴지 줄일지 정하는 설정이다. 

 

Auto Scaling Group 생성완료

모니터링 기능도 있지만 이번 실습에선 생략하도록 하겠다. 

6. Cloud Insight Monitoring Event Rule 설정

Server(VPC)로 Rule을 생성한다.

만들어두었던 인스턴스를 대상으로 그룹을 만들어준다. 

CPU를 대상으로 한 템플릿을 만들어준다. 

Autoscaling 정책을 설정해준다. 

방금까지 만든 Rule은 서버 CPU가 50%이상 부하시 Autoscaling으로 인해 서버가 생기는 룰만 만든것이다.

위와 같은방법으로 CPU부하가 안정되었을시 서버가 줄어드는 정책 또한 만들어 주시면 된다.

7. Server Stress 부하 테스트

  • SSH를 사용하여 서버에 접속해준다.
  • 먼저 부하테스트를 진행하기전 Apache설치를 해준다.
  • Autoscaling 서버는 init script를 설정해놨기 떄문에 자동으로 설치가 될것이다.
  • init script 코드를 직접 입력하여 설정해주시면 된다.
  • 공인ip로 접속하여 설정이 잘되었는지 확인을 해본다.
  • 설정이 완료되었으니 Stress로 CPU과부하를 주어 Autoscaling을 테스트 해본다.
  • 위 명령어로 Stress툴을 깔아준다. 
yum -y install epel-release
yum -y install stress

stress — cpu -2 — timeout 400s(stress툴을 통해 CPU에 부하를 주는 명령어 이다. 

8. Autoscaling 서버 확인

Stress로 인해 서버 CPU에 부하가 걸린 모습을 확인할 수 있다. 

Autoscaling이 작동하여 서버가 새로 하나 생성되는것을 볼 수 있다. 

이제 서버가 생성되었으니 로드밸런서로 확인해보겠습니다.


Target상태를 보니 정상적으로 로드밸런서에 연결되었다. 라운드 로빈이 정상적으로 작동하는것을 확인할 수 있다.