Engineering
오토스케일(Autoscale)의 이해와 예제를 통한 구성(TOAST 서비스 들여다보기)
2019년 1월 18일
원문에서 보기 ↗오토스케일은 인스턴스의 부하를 모니터링해서 특정 이벤트에 대해 인스턴스를 추가/삭제하는 기능을 제공하는 서비스 입니다. 예를 들어, 급작스러운 서비스 트래픽의 증가 상황에서 운영자의 개입없이 자동으로 인스턴스를 추가한다던가, 부하 상황이 해제되면 추가된 인스턴스를 삭제 하는 것이 가능합니다. 이처럼 탄력적인 서비스 인프라 운영이 가능해지고, 이를 통해 인프라 비용 및 운영 비용 절감이 가능해집니다.
이번 달에는 이러한 오토스케일을 이용하기 위해 알아두어야 할 개념들에 대해 설명하고, 사용 예를 통해 동작 방식을 설명 드리려 합니다.
인스턴스 템플릿 (Instance Template)
오토스케일에 의해 자동으로 생성되는 인스턴스들은 사용자가 생성한 인스턴스 템플릿을 기반으로 만들어지게 되며, 지정 가능한 속성들은 아래와 같습니다.
- 이미지
- 인스턴스 타입
- 디스크 사이즈 (추가볼륨 지정 가능)
- 키페어
- 연결될 네트워크
- 플로팅 IP 연결 여부
- 부팅 스크립트
대부분의 경우 사용자 서비스에 맞도록 설정이 변경된 이미지가 사용됩니다. (이미지 생성에 대한 내용은 콘솔 가이드 참고. https://docs.toast.com/ko/Compute/Image/ko/console-guide/) 간단한 변경일 경우 기본 이미지와 부팅 스크립트를 이용해 인스턴스 부팅시 자동으로 설정이 변경되도록 할 수 있습니다.
스케일링 그룹 (Scaling Group)
인스턴스의 증감은 스케일링 그룹안에서 이루어 지게 되며, 사용자가 지정한 조건을 통해 실행됩니다. 기본적으로 아래와 같은 내용을 기술하게 됩니다.
- 증설 시 어떤 인스턴스 템플릿을 이용할 것인지
- 얼마나 많은 서버를 필요로 하는지
- 어떤 값을 기반으로 모니터링해서, 인스턴스를 증설 또는 감축 할 것인지
추가적으로 증설된 인스턴스가 로드밸런서의 멤버로 연결되어야 한다면, 로드밸런서를 지정할 수도 있습니다.
예제를 통한 오토스케일 구성하기
오토스케일에 필요한 기본 컨셉에 대한 간략한 설명을 마치고, 실제로 어떻게 동작하는지 예를 통해 구성해 보도록 하겠습니다.
사용자는 웹서버를 이용해 서비스를 제공 중이며, 아래와 같은 정책을 서비스에 적용하기 원한다고 가정합니다.
- 기본 2대로 서비스 시작
- CPU 사용량이 60%를 넘기는 시점에 자동으로 스케일 아웃
- CPU 사용량이 30%보다 낮아지는 시점에 자동으로 스케일 인
- 스케일 아웃된 인스턴스는 로드밸런서에 자동으로 추가
- 새로운 인스턴스는 기존 인스턴스와 동일하게 설정
오토스케일 구성 전 사전 준비
로드밸런서에 인스턴스가 추가되어 서비스가 되는 것을 확인
- 로드밸런서 생성 (Exam-LB) : Round Robin으로 구성
- 로드밸런서에 플로팅 IP 연결
- 보안 그룹 설정 : HTTP 허용 가능하도록 변경
인스턴스 템플릿 구성
- 이미지 : CentOS 7.1
- 인스턴스 타입 : m2.small
인스턴스 템플릿 구성시, 이 예와 같이 간단한 스크립트로 구성이 가능한 경우가 아니라면, 사용자 이미지를 생성하여 사용할 수 있습니다.
- 예약 스크립트 :
#!/bin/bash
yum -y install httpd
ifconfig eth0 | grep "inet " | awk -F'[: ]+' '{ print $3 }' > /var/www/html/index.html
systemctl start httpd
스케일링 그룹 구성
- 최소 인스턴스 2 : CPU 부하가 낮더라도 2대의 인스턴스를 유지합니다.
- 최대 인스턴스 5 : CPU 부하가 높더라도 5대까지만 자동으로 스케일 아웃 합니다.
- 구동 인스턴스 2 : 초기 구동 인스턴스의 수를 지정합니다.
- 정책 설정
- cpu_util > 60 상태가 5분 지속시 1개의 인스턴스 생성
- cpu_util < 30 상태가 5분 지속시 1개의 인스턴스 삭제
테스트
스케일링 그룹 구성 까지 마치면, 자동으로 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/) 를 참고해 주세요. 오토스케일을 통해 탄력적인 인프라 구성을 이용해보세요.