Print
카테고리: [ Amazon Web Services ]
조회수: 1945

1. AWS Auto Scaling 그룹을 이용한 다중 서버 구성

이번에는 늘어난 트래픽을 소화하기 위해서 서버의 수를 늘리는 scale out과

단순히 늘리는 것이 아닌 트래픽에 따라 서버의 수를 조절해주는 auto scaling에 대해 실습을 진행하겠습니다.

 

설정한 AMI를 사용하여 만든 같은 사양, 같은 환경, 같은 코드를 가지고 있는 EC2 instance들의 그룹을 auto scaling 그룹이라고 합니다.

* 앞 시간에서 EC2 인스턴스들은 AMI로 만들어졌다는 것을 배웠고, 이게 AWS에서 auto scaling이 가능한 이유입니다!

 

트래픽의 증가와 같은 실시간 자원 사용량 이외에 원하는 시간으로도 auto scaling 조정 정책을 설정할 수 있습니다.

예를 들어, 매주 금요일 새벽마다 이루어지는 작업에 대비해 시간을 설정하면 그 시간에 서버를 늘려주는 겁니다.

 

2. 실습

2-1. 인스턴스 중지(stopped) 확인

인스턴스의 OS등, 파일 시스템에 있는 내용에 대한 스냅숏을 생성할 예정이기 때문에 안전하게 진행하기 위해 시스템을 중지상태로 변경합니다.

 

 

2-2. AMI 이미지 생성

auto scaling에 사용할 EC2 인스턴스의 이미지를 생성합니다.

해당 인스턴스 우클릭 -> [이미지] -> [이미지 생성]

*이미지 이름을 설정해 주시고 다른건 디폴트로 진행하겠습니다.

그리고 콘솔 왼쪽 탭에서 [이미지] -> [AMI] 메뉴로 이동합니다.

여기서 상태가 available임을 확인하고, AMI ID는 나중에 사용하기 때문에 복사를 해둡니다.

* 편의를 위해 복사를 한 것입니다..ㅎ 아래 템플릿 생성 에서 ID를 넣는 부분의 우측에 Search for AMI라는 기능으로 검색해서 넣을 수 있습니다!

 

2-3. Template 생성

콘솔 왼쪽 탭 -> [인스턴스] -> [시작 템플릿] 에서 템플릿 생성을 아래와 같이 진행하겠습니다.

키 페어는 전 시간에 생성해 둔 키 페어를 사용합니다. 보안 그룹은 ssh과 WEB을 적용해 주겠습니다.

 

2-4. Auto Scaling Group 생성

콘솔 왼쪽 탭 -> [AUTO SCALING] -> [Auto Scaling 그룹] 에서 Auto Scaling 그룹을 생성합니다.

생성 할 때는 시작 템플릿을 선택합니다.

* 시작 구성 기능은 과거에 AWS에서 제공하던 기능으로 시작 템플릿과 같은 역할을 합니다. 하지만 시작 템플릿이 시작 구성에 비해서 버전 등 관리가 편리하기 때문에 시작 템플릿을 사용하겠습니다.

서브넷은 위와 같이 ap-northeast-2a와 ap-northeast-2c를 선택하겠습니다. 이것은 생성하는 인스턴스들 중 절반은 서울 리전의 a 가용영역에, 나머지 절반은 c 가용영역에 생성하겠다는 의미입니다.

 

다음 단계로 아래와 같이 조정 정책을 구성합니다.

CPU 사용률이 80%가 넘는지를 기준으로 진행하겠습니다.

 

실습인 관계로 알림은 넘어가겠습니다. 

알림 기능은 Auto Scaling 그룹 내 인스턴스에 변화가 있을 경우 알림을 받을 수 있는 기능입니다. 원하시면 추가로 진행하셔도 될 것 같습니다.

 

마지막으로 Auto Scaling 그룹 내 인스턴스들에 대한 태그를 지정해주겠습니다.

키 에는 Name, 값 에는 exercise-group을 입력하고 [검토]를 진행합니다.

(이제 생성되는 모든 인스턴스들은 설정한 태크과 값들을 갖고 생성됩니다.)

 

최종적으로 아래와 같은 모습을 확인 할 수 있습니다.

인스턴스 부분을 보면 현재 0이지만 잠시후 1로 표시가 될 것입니다. 앞에서 지정한 것처럼 최초에는 1대의 인스턴스를 실행하고 있다는 소리입니다.

* 세부 정보를 보면 여러 정보를 확인 할 수 있는데 정보들에 대한 것은 따로 정리할 예정입니다. 정리가 되는 대로 아래 링크 달아드리겠습니다.

세부 정보 탭 설명 링크 : [진행 중]

 

2-5. 인스턴스 자동 추가, 제거

앞에서 Auto Scaling 그룹을 만들고, CPU 사용률이 80%를 넘으면 인스턴스를 추가하라는 조정 정책을 추가했습니다.

그러면 제대로 동작하는지 테스트를 진행해 보겠습니다.

 

그룹 정보 탭에서 위와 같이 최대가 2인지 확인하시기 바랍니다.

이는 인스턴스의 수가 늘어나도 최대 2대까지만 생성이 가능하다는 의미입니다.

*아닌 경우 2로 설절해주세요!

 

인스턴스 탭에서 최초 실행 된 인스턴스의 상태가 InService인지 확인합니다.

 

이제 콘솔 왼쪽 탭 -> [인스턴스] -> [인스턴스] 에서 실행 중인 인스턴스의 퍼블릭 IP 주소를 통해 서버에 접속합니다.

(인스턴스 상태 확인 페이지에서 인스턴스 ID 를 클릭하셔도 됩니다.)

 

접속 후 stress라는 어플리케이션을 설치합니다.

sudo yum install stress -y

stress는 원하는 CPU의 수를 원하는 시간만큼 100% 사용하게 만드는 기능을 합니다.

 

그리고 600초 동안 1개의 CPU사용량을 최대로 늘립니다.

stress --cpu 1 --timeout 600

*여기서 10분이나 진행하는 이유가 궁금하실 수 있습니다. 생성한 그룹의 정보를 살펴보시면 현재 인스턴스의 사용량 지표를 5분(300초)에 한번씩만 모니터링 서버로 전송하고 있기 때문입니다..

인스턴스를 생성할 때 [세부 모니터링 활성화] 옵션을 활성화해두면 인스턴스가 1분마다 지표를 보내기 때문에 빠르게 대응할 수 있습니다만... 이 옵션은 약간의 추가비용이 발생합니다..

제 돈은 소중하기 때문에 실습때는 활성화 하지 않기로 했습니다.

 

실제로 top 명령어로 사용률을 확인해 보니 100%인 것을 볼 수 있었습니다.

 

그리고 5~10분정도 기다려 보면 인스턴스가 자동으로 한 대 더 추가 된 것을 확인할 수 있었습니다.

 

3. 마치며

인스턴스가 제대로 생성 되었지만, 트래픽을 분산시켜 주기 위해서는 다들 잘 아시는 Load Balancer가 필요합니다.

다음과정에는 Load Balancing을 사용해서 서버 트래픽 분산 관리와, 장애 조치 부터 진행하도록 하겠습니다.