AWS Auto Scaling

송선권·2024년 9월 4일
0

인프라 스터디

목록 보기
7/7
post-thumbnail

주제

이번 주에는 AWS Auto Scaling을 학습 및 실습한다.

이론

특징

  • 정확한 수의 EC2 인스턴스를 보유한다.
    • 그룹의 최소 / 최대 인스턴스 수를 관리함
      • 이를 지키기 위해 자동으로 인스턴스를 추가 / 삭제할 수 있음
  • 다양한 스케일링 정책을 적용할 수 있다.
    • ex) CPU 부하에 따라 인스턴스 크기를 조절할 수 있다.
  • 여러 가용 영역에 인스턴스를 분산시킬 수 있다.
    • 가용 영역에 장애가 발생하더라도 영향 최소화
  • 여러 서비스에 적용할 수 있다.
    • EC2뿐만 아니라 다른 여러 AWS 서비스에도 유기적으로 연동할 수 있음

구성 요소

Auto Scaling Groups

  • 인스턴스를 관리하기 위한 그룹
  • 최소 / 최대 / 원하는(평소) 인스턴스 수를 지정하고 이 범위 안에서 스케일 인 / 스케일 아웃이 일어난다.
  • 인스턴스 증감은 사용자가 정의한 정책에 의해 이 그룹 내에서 이루어진다.
    • 어떤 템플릿을 통해 인스턴스를 생성할 것인가
    • 얼마나 많은 서버가 필요한가
    • 어떤 값을 기반으로 모니터링하여 인스턴스 수를 관리할 것인가
  • 증설된 인스턴스가 로드밸런서에 연결되어야 한다면, 로드밸런서를 미리 지정해둘 수 있다.

스케일 인(Scale-In) / 스케일 아웃(Scale-Out) 이란?
스케일링 방법 중 하나로 스케일 업(Scale-Up) / 스케일 다운(Scale-Down)과 비슷하면서 다르다. 스케일 업/다운은 스케일링 시 서버 인스턴스를 더 높거나 낮은 사양으로 업/다운그레이드한다. 이는 직관적이지만 효율이 매우 떨어지기 때문에 스케일 인/아웃을 주로 사용한다. 스케일 인/아웃은 스케일링 시 서버 인스턴스 수를 늘리거나 줄여서 관리한다. 여러 인스턴스를 하나의 서비스처럼 사용할 수 있다면 훨씬 효율적으로 사용할 수 있어서 로드 밸런서(ELB)와 잘 어울린다.

시작 템플릿

  • Auto Scaling 그룹에서 인스턴스를 시작하는 데 사용하는 템플릿이다.
    • AMI와 비슷한 개념이다.
  • 동일한 OS의 인스턴스를 간편하게 복제하기 위해 구성한다.
  • 오토스케일링으로 인스턴스가 증설되면 그 환경 구성은 템플릿에 설정된 환경을 따라간다.
  • 인스턴스 AMI ID, 인스턴스 유형, 키 페어, 보안 그룹, 블록 디바이스 매핑 정보 등을 설정한다.
  • 최초 구성 후 수정이 불가능하다.
    • 옵션을 바꿔야 한다면 새로 생성 후 버전을 바꾸는 방향으로 진행한다.
    • 매 서비스 업데이트마다 업데이트된 서비스가 담긴 이미지와 이를 사용하는 시작 템플릿 버전을 만들고 그 버전을 사용하도록 변경해줘야 한다.
      • 이 과정은 쉘 스크립트를 통해 자동화할 수 있다. (참고 포스트)
      • 시작 템플릿 버전업 대신 도커 허브를 활용하면 비교적 가볍게 업데이트가 가능하다.

실습

시작 템플릿 구성


먼저 Auto Scaling에 사용할 시작 템플릿을 생성해야 한다.

이 템플릿은 Auto Scaling을 적용할 예정이니 표시한 부분을 체크해주자.

시작 템플릿 기반 이미지로 사용할 AMI를 지정해주자. EC2 생성 시 AMI를 지정하는 것처럼 선택하면 된다.

시작 템플릿으로 올릴 인스턴스의 유형을 선택한다.


Auto Scaling에 사용할 템플릿의 경우 기존 네트워크 인터페이스를 사용하지 않는 것이 적절하다고 한다. 따라서 새로운 네트워크 인터페이스를 추가하고 보안 그룹을 선택한다.

인스턴스를 올릴 EBS를 지정한다.

이렇게 Auto Scaling에 사용할 시작 템플릿 구성이 완료되었다.

Auto Scaling 그룹 구성

이번에는 Auto Scaling 그룹을 생성해보자.

앞에서 만들어둔 시작 템플릿을 선택한다.

사용할 VPC와 가용 영역을 고르면 되는데, 가용 영역의 경우 여러 개를 선택하여 특정 가용영역에 발생하는 이슈에 대한 영향을 최소화할 수 있다.

로드밸런서를 새로 만들거나 기존 로드밸런서에 연결할 수 있는데, 여기서는 Auto Scaling 그룹을 생성하는 것을 목표로 로드밸런서 없이 진행한다.

Auto Scaling 그룹에서 유지할 인스턴스 개수의 범위를 설정한다. 원하는(평소) 용량, 최소 용량, 최대 용량을 지정할 수 있다.

대상 추적 크기 조정 정책을 선택하면 오토스케일링으로 인스턴스 개수를 조정하는 정책을 설정할 수 있다. 여기서는 CPU 사용률이 50%를 넘어가면 인스턴스 수를 늘리도록 지정해두었다. 인스턴스 워밍업은 새로 시작된 인스턴스가 정상 범위에 들어올 때까지 기다려줄 시간이다. 워밍업 시간 전까지는 (위에서 설정한 정책에 따라)CPU 사용률이 50%를 넘어가도 인스턴스를 늘리지 않는다. 크기 조정 정책 지표에 포함시키지 않는 것이다.

인스턴스를 교체할 때 적용할 정책을 선택할 수 있다. 이 정책은 다른 서비스에서도 확인할 수 있는데(ex. Docker Swarm - stop-first / start-first), 읽어보고 자신의 서비스에 어울리는 정책을 선택하자.

태그는 추가하지 않아도 무관하지만 Name 태그를 설정해두면 나중에 EC2를 관리하기 편하다.

모든 설정이 끝나면 Auto Scaling 그룹을 생성할 수 있다.

동작 확인

Auto Scaling 그룹 생성 후 메뉴로 들어와보면 성공적으로 2개의 인스턴스가 올라갔다는 작업 기록을 확인할 수 있다.

EC2 목록을 보면 그룹 생성 시 Name 태그로 설정해둔 이름을 가진 인스턴스가 2개 생성됨을 확인할 수 있다.

인스턴스 하나를 임의로 종료시키자 새로운 인스턴스가 자동으로 초기화되고 있는 모습이다.

이 과정은 작업 기록에서 구체적으로 확인할 수 있다.

기타

Auto Scaling은 Elastic Load Balancing(ELB)과 매우 잘 어울린다. Auto Scaling 자체로는 인스턴스 수를 늘리고 줄이기만 할 뿐 요청을 분산시키는 일은 수행하지 못한다. 부하 분산을 위해서는 DNS RR이나 로드 밸런서 등을 함께 사용해야 한다. 하지만 DNS RR만으로는 세부적인 제어가 힘들기 때문에 중요한 서비스라면 로드 밸런서를 함께 사용하자.

ELB와 Auto Scaling의 연결이 궁금하다면 이 포스트에 자세히 설명되어 있으니 여기를 참고하자.

참고자료

Amazon EC2 Auto Scaling이란 무엇입니까?
Auto Scaling 개념 원리 & 사용 세팅 정리
ELB(Elastic Load Balancer) 구성 & 사용법 가이드

0개의 댓글