grep

Engineering

오토스케일(Autoscale)의 이해와 예제를 통한 구성(TOAST 서비스 들여다보기)

NHN

2019년 1월 18일

원문에서 보기 ↗

오토스케일은 인스턴스의 부하를 모니터링해서 특정 이벤트에 대해 인스턴스를 추가/삭제하는 기능을 제공하는 서비스 입니다. 예를 들어, 급작스러운 서비스 트래픽의 증가 상황에서 운영자의 개입없이 자동으로 인스턴스를 추가한다던가, 부하 상황이 해제되면 추가된 인스턴스를 삭제 하는 것이 가능합니다. 이처럼 탄력적인 서비스 인프라 운영이 가능해지고, 이를 통해 인프라 비용 및 운영 비용 절감이 가능해집니다.

이번 달에는 이러한 오토스케일을 이용하기 위해 알아두어야 할 개념들에 대해 설명하고, 사용 예를 통해 동작 방식을 설명 드리려 합니다.

인스턴스 템플릿 (Instance Template)

20190116_Autoscale.png 오토스케일에 의해 자동으로 생성되는 인스턴스들은 사용자가 생성한 인스턴스 템플릿을 기반으로 만들어지게 되며, 지정 가능한 속성들은 아래와 같습니다.

대부분의 경우 사용자 서비스에 맞도록 설정이 변경된 이미지가 사용됩니다. (이미지 생성에 대한 내용은 콘솔 가이드 참고. https://docs.toast.com/ko/Compute/Image/ko/console-guide/) 간단한 변경일 경우 기본 이미지와 부팅 스크립트를 이용해 인스턴스 부팅시 자동으로 설정이 변경되도록 할 수 있습니다.

스케일링 그룹 (Scaling Group)

인스턴스의 증감은 스케일링 그룹안에서 이루어 지게 되며, 사용자가 지정한 조건을 통해 실행됩니다. 기본적으로 아래와 같은 내용을 기술하게 됩니다.

추가적으로 증설된 인스턴스가 로드밸런서의 멤버로 연결되어야 한다면, 로드밸런서를 지정할 수도 있습니다.

예제를 통한 오토스케일 구성하기

오토스케일에 필요한 기본 컨셉에 대한 간략한 설명을 마치고, 실제로 어떻게 동작하는지 예를 통해 구성해 보도록 하겠습니다.

사용자는 웹서버를 이용해 서비스를 제공 중이며, 아래와 같은 정책을 서비스에 적용하기 원한다고 가정합니다.

  • 기본 2대로 서비스 시작
  • CPU 사용량이 60%를 넘기는 시점에 자동으로 스케일 아웃
  • CPU 사용량이 30%보다 낮아지는 시점에 자동으로 스케일 인
  • 스케일 아웃된 인스턴스는 로드밸런서에 자동으로 추가
  • 새로운 인스턴스는 기존 인스턴스와 동일하게 설정

오토스케일 구성 전 사전 준비

로드밸런서에 인스턴스가 추가되어 서비스가 되는 것을 확인

인스턴스 템플릿 구성

인스턴스 템플릿 구성시, 이 예와 같이 간단한 스크립트로 구성이 가능한 경우가 아니라면, 사용자 이미지를 생성하여 사용할 수 있습니다.

#!/bin/bash
yum -y install httpd
ifconfig eth0 | grep "inet " | awk -F'[: ]+' '{ print $3 }' > /var/www/html/index.html
systemctl start httpd

스케일링 그룹 구성

테스트

스케일링 그룹 구성 까지 마치면, 자동으로 2개의 인스턴스가 생성된 상태로 서비스가 됩니다.

$ curl http://133.186.153.69/
192.168.0.24
$ curl http://133.186.153.69/
192.168.0.23
$ curl http://133.186.153.69/
192.168.0.24

이후 로드를 충분히 주게 되면 자동으로 인스턴스가 생성되는 것을 확인 할 수 있습니다.

로드를 가하는 방법에는 여러가지가 있겠지만, 이번 예에서는 강제로 cpu 로드를 높일 수 있는 stress 툴을 이용했습니다.

stress --cpu 1 --timeout 700

또한 로드밸런서를 통해 추가된 인스턴스로 트래픽이 정상 분배되는 것을 확인할 수 있습니다.

$ curl http://133.186.153.69/
192.168.0.26
$ curl http://133.186.153.69/
192.168.0.25
$ curl http://133.186.153.69/
192.168.0.24
$ curl http://133.186.153.69/
192.168.0.23
$ curl http://133.186.153.69/
192.168.0.26

이후 로드 가하는 것을 멈추면 한대씩 인스턴스가 점진적으로 삭제되며, 2대만 남을 때까지 지속됩니다.

마무리

기본 컨셉과 예제를 통한 간단한 구성을 통해 오토스케일에 대해 알아보았습니다. 예제에는 언급되지 않은 스케일링 정책(cron식 등)과 수동 인스턴스 추가 / 삭제 등의 기능은 사용자 가이드(https://docs.toast.com/ko/Compute/Auto%20Scale/ko/console-guide/) 를 참고해 주세요. 오토스케일을 통해 탄력적인 인프라 구성을 이용해보세요.