1. 개요
오토스케일링은 클라우드 환경의 가장 기본적 요소들 중에 하나로, 갑작스러운 트래픽 집중에 서버, 스토리지 등의 자원이 자동으로 확장하면서, 안정적인 서비스를 유지하는 것입니다.
서버의 개수가 늘어나거나 줄어드는 것을 스케일 아웃 (scale out), 스케일 인 (scale in)이라고 합니다. 오토스케일링을 통해 사용자가 많으면 서버를 늘리고 사용자가 적으면 서버를 줄이는 것을 자동화해 효율적으로 웹서버를 운영할 수 있게 되었습니다.
이번 테크블로그에서는 구글 클라우드 플랫폼(GCP)에서 오토스케일링이 되는 웹서버를 구축해보겠습니다.
뉴스레터 가입
클라우드 관련 최신 소식을 업데이트 받으실 수 있습니다.
2. Architecture
GCP에서는 오토스케일링이 가능한 웹서버를 구축하기 위해서 다음과 같은 구성이 필요합니다. 먼저, 외부의 요청을 받을 글로벌 로드 밸런서가 필요하고 웹서버가 설치된 인스턴스 그룹이 필요합니다. 실제로 서비스 할 VM 인스턴스는 인스턴스 그룹의 설정 정보(CPU 사용량 등 모니터링 메트릭)에 따라 인스턴스 템플릿을 통해 자동으로 생성이 되거나 삭제가 됩니다.
- User: 웹서버에 접속하는 유저들
- Global Load Balancing: 들어오는 트래픽을 분산시키는 글로벌 로드 밸런서
- Instance Template: 인스턴스 그룹에 있는 인스턴스를 만들기 위한 템플릿
- Metric: 컴퓨팅 엔진 인스턴스 그룹 자동 크기 조정을 위한 입력 값으로 사용되는 모니터링 메트릭
- Instance: 사용자 수에 따라 변화하는 인스턴스 개수
3. 실습/ 구성하기
이제 오토스케일링이 되는 웹서버를 구축해보겠습니다. 구축하는 순서를 나열하면 다음과 같습니다.
- 인스턴스 템플릿을 만들기 위해 VM 인스턴스를 생성합니다.
- 생성된 VM 인스턴스에 웹서버를 설치합니다.
- 웹서버가 설치된 인스턴스를 스냅샷으로 만듭니다.
- 생성된 스냅샷을 가지고 이미지를 만듭니다.
- 이미지를 가지고 인스턴스 템플릿을 생성합니다.
- 인스턴스 템플릿으로 인스턴스 그룹을 생성합니다.
- 로드 밸런서를 적용해 웹서버에 들어오는 트래픽을 부하분산 시킵니다.
1) VM Instance 생성
GCP 콘솔에서 [Compute Engine]에서 [VM 인스턴스]를 선택한 후, [인스턴스 만들기]를 클릭해서 인스턴스를 생성합니다. VM 인스턴스는 아래와 같은 조건으로 생성합니다. 나머지 값들은 기본으로 둡니다.
2) Web 서버 설치
VM 인스턴스 생성 후 SSH로 접속합니다. 가장 간단한 방법은 해당 VM 오른쪽의 [SSH] 링크를 클릭하는 것 입니다. 이제 새로 만든 VM에 웹 서버를 설치하고 가동합니다. 설치가 끝나면 자동으로 웹 서버가 가동됩니다. 가동이 되었는지를 확인하려면 브라우저에 이 VM의 외부 IP로 접속하면 됩니다.
nginx 설치를 진행합니다.
sudo yum install -y nginx
방화벽에서 웹서버 포트를 개방합니다.
sudo firewall-cmd –permanent –zone=public –add-service=http
sudo firewall-cmd –permanent –zone=public –add-service=https
sudo firewall-cmd –reload
nginx를 실행시키고, 부팅시 자동으로 시작되게 변경합니다.
sudo systemctl start nginx
sudo systemctl enable nginx
접속에 성공하면 다음과 같은 페이지가 브라우저에 뜨는 것을 확인할 수 있습니다.
3) Snapshot 생성
웹서버가 설치된 인스턴스로 “스냅샷”을 만듭니다. [Compute Engine]에서 [스냅샷] 메뉴로 들어가서 디스크의 스냅샷을 뜹니다. 아래와 동일하게 값을 설정하면 됩니다.
4) Image 생성
생성된 스냅샷을 이용해서 VM 이미지를 만듭니다. [Compute Engine]에서 [이미지] 메뉴로 들어가서 이미지를 생성합니다. 아래와 동일하게 값을 설정합니다.
5) Template 생성
다음으로는 VM 이미지를 가지고 인스턴스 템플릿을 만듭니다. [Compute Engine]에서 [인스턴스 템플릿] 메뉴로 들어가서 템플릿을 생성합니다. 아래와 같이 동일하게 값을 설정하면 됩니다.
6) Instance Group 생성
이제 인스턴스 템플릿을 이용해 인스턴스 그룹을 생성합니다. [Compute Engine]에서 [인스턴스 그룹]메뉴로 들어가 [인스턴스 만들기]를 선택합니다. 생성 조건은 아래와 같습니다. 이제 인스턴스의 CPU 사용량이 20%를 넘을 때마다 인스턴스 개수가 자동 확장 됩니다.
7) Load Balancer 생성
로드 밸런서 설정에 앞서 로드 밸런서에 할당할 고정 IP를 생성합니다. GCP 콘솔에서 [Compute Engine]이 아닌 [VPC 네트워크]에서 [외부 IP 주소] 메뉴로 들어간 후, [고정 주소 예약] 버튼을 클릭합니다. 아래와 같이 동일하게 값을 설정하면 됩니다.
이제 로드 밸런서를 생성하기 위해서 [네트워크 서비스]에서 [부하 분산] 메뉴로 들어갑니다. 로드 밸런서는 크게 다음과 같은 단계로 생성하게 됩니다.
a. 프로토콜 선택
b. 백엔드 구성
c. 호스트 및 경로 규칙 설정
d. 프런트엔드 구성
로드 밸런서 생성을 시작하면 제일 처음 프로토콜을 선택하게 됩니다. 지원하는 프로토콜은 HTTP(S), TCP, UDP 이렇게 3가지인데 이 예제에서는 HTTP(S) 프로토콜을 사용하면 됩니다.
“HTTP(S) 부하 분산” 아래의 [구성 시작]버튼을 클릭하면 단계별 구성 화면이 나타납니다. 백엔드와 프런트엔드를 구성하면 됩니다.
이제 백엔드를 구성합니다. [백엔드 구성]에서 [백엔드 서비스 만들기 또는 선택]에 들어가 [백엔드 서비스 만들기]를 선택합니다. 아래와 같이 동일한 값을 설정하면 됩니다.
아래쪽에 보면 “상태 확인”이라는 메뉴가 보입니다. 상태 확인은 인스턴스 그룹 내의 인스턴스가 양호 한지를 점검하고, 정상이 아닌 노드를 부하 분산에서 빼 버리는 기능을 수행합니다. 항목을 선택해서 새로운 상태 확인을 생성합니다. 아래와 같이 동일한 값을 설정하면 됩니다.
마지막으로 프런트엔드 서비스를 설정하는데, 여기서는 어떤 프로토콜을 어떤 IP와 포트로 받을지를 지정하고, HTTPS의 경우에는 SSL 인증서를 설정합니다. 아래와 같이 설정하면 됩니다.
8) 테스트
이제 모든 구성이 완료되었으니 테스트를 진행합니다. 웹 브라우저를 열고 로드 밸런서에 할당한 정적 IP로 접속하면 nginx가 브라우저에 뜨는 것을 확인할 수 있습니다.
4. 테스트
웹서버 부하발생기(Load Runner 또는 Jmeter 등)로 부하를 주면 처음에는 VM 인스턴스 개수가 한 대였다가 자동으로 늘어나서, 최대 다섯 대까지 늘어나는 것을 볼 수 있습니다. 그리고 부하를 줄이면 인스턴스 개수가 자동으로 줄어드는 것을 확인할 수 있습니다. 아래 차트는 [Compute Engine]에서 [인스턴스 그룹]에 들어간 후 생성된 인스턴스 그룹 (web-instance-group)의 모니터링 탭 메뉴에서 확인이 가능합니다.
실무자를 위한 Step by Step Guide
- 구글 클라우드 플랫폼의 Cloud Healthcare API 소개
- GCP Cloud SQL용 private networking connection 소개
- Google Cloud Platform Security Overview
- GCP Cloud Dataflow 개발 환경 구성하기
- Google Cloud Platform의 Cloud Composer를 이용한 Workflow Orchestration
- Stackdriver를 이용한 GCP의 로깅 및 모니터링 소개
- Google Cloud Platform의 Datalab 및 BigQuery를 이용한 빅 데이터 분석
- Google Cloud Platform에 IoT Analytics Pipeline 구축하기
- GCP Machine Learning 엔진을 활용한 Object Detection
- Google Cloud Platform Overview
구글 클라우드 플랫폼(GCP)에 대해 더 알고 싶으세요?
베스핀글로벌의 GCP 전문 엔지니어가 답해드립니다.