티스토리 뷰
서버 내부에서 서비스할 수도 있지만 대부분 운영 환경에서는 여러 대의 서버 인스턴스로 서비스합니다.
많은 트래픽에 대응하고 서버에 장애가 생겨도 서비스가 안전하게 돌아갈 수 있게 하기 때문입니다.
AWS Auto Scaling 그룹은 AWS에서 제공하는 자동 다중 서버 서비스입니다.
같은 사양, 같은 환경, 같은 코드를 가지고 있는 똑같은 EC2 인스턴스들의 묶음입니다.
똑같은 인스턴스들이 여러 대 존재할 수 있는 이유는 같은 AMI를 이용해서 만들어진 인스턴스들이기 때문입니다.
그리고 이 서비스는 인스턴스들의 수를 자동으로 늘리고 줄여줍니다.
CPU 사용량 정책
예를 들어, 평균 CPU 사용량 정책에 따라 평소 EC2 3대로 요청을 처리하다가, 사용량이 많아져 10분동안 평균 CPU 사용량이 80% 이상을 넘어서면, Auto Scaling그룹에서 똑같은 EC2를 증설해줍니다.
그럼 정상 CPU 사용량으로 맞춰질 수 있습니다.
시간 기준 정책
에를 들어, 소셜 커머스와 같이 특정 시간에 서비스 요청이 몰린다면 사람이 매일 늘리는 것이 아니라 특정 시간에 맞춰 자동으로 늘릴 수 있습니다.
즉, 피크 타임을 미리 분석한 뒤 일정한 시간에 서버 인스턴스를 늘려주는 방식입니다.
AWS Auto Scaling 그룹의 구성
- 자동으로 생성할 EC2 인스턴스를 골라야 합니다.
- B 인스턴스의 현재 환경을 스냅숏으로 생성해서 AMI를 만듭니다.
- 이 AMI를 이용하여 어떤 설정의 인스턴스를 띄울지 미리 정의해두는 시작 템플릿(Launch Template)를 만듭니다.
- 이 시작 템플릿을 이용해 인스턴스를 실행할 Auto Scaling 그룹을 생성합니다.
Auto Scaling 그룹 생성
1. AMI 생성할 상태 stopped인지 확인
[인스턴스] → [인스턴스] 메뉴에서 AMI를 생성할 인스턴스가 stopped 상태임을 확인합니다.
파일 시스템에 있는 내용에 대한 스냅숏을 생성해야 하기 때문에 안전한 스냅숏을 위해 시스템을 중지 상태로 변경해야 합니다.
2. 이미지 생성
이미지 생성을 위해 오른쪽 버튼을 클릭한 뒤 [이미지] → [이미지 생성]을 선택합니다.
3. 생성할 이미지의 설정을 지정
이미지의 이름과 인스턴스 볼륨을 선택하고 [이미지 생성] 버튼을 클릭합니다.
4. 이미지 생성 완료
[이미지] → [AMI] 메뉴에서 이미지가 생성된 것을 확인할 수 있습니다.
pending이면 아직 만들어지는 상태이고, available 상태가 된다면 생성이 완료된 것입니다.
AMI ID를 복사해둡시다.
5. 시작 템플릿 만들기
[인스턴스] → [Launch Templates(시작 템플릿)] 메뉴에서 시작 템플릿을 누릅니다.
사용자 지정 값 지정에 아까 복사해둔 AMI ID를 적어준다.
6. 인스턴스 유형 및 키 페어
인스턴스 유형은 t2.micro, 키페어는 이전에 EC2 인스턴스를 생성할 때 내려받은 키 페어의 이름을 입력합니다.
7. 보안 그룹
보안 그룹은 web, ssh 보안 그룹을 적용한다.
8. 시작 템플릿 생성 완료
시작 템플릿 생성을 누르면 완료됩니다.
9. Auto Scaling 그룹 생성
시작 템플릿 생성을 누르면 다음과 같은 화면이 나옵니다.
10. 시작 템플릿 또는 구성 선택
Auto Scaling 그룹 이름을 EXERCISE-GROUP으로 적어줍니다.
시작 템플릿은 이전에 만들어 둔 exercise-launch-templete을 선택해줍니다.
11. 서브넷 구성
서브넷은 인스턴스들을 어떤 네트워크 망에 띄울 것인지 정하는 것입니다.
ap-northeast-2a와 ap-northeast-2c의 기본값을 모두 지정해줍니다.
12. 그룹 크기 및 조정 정책
그룹 크기는 최소 1대에서 최대 2대로 설정합니다.
조정 정책은 평균 CPU 사용률이 80% 기준으로 설정합니다.
CPU 사용률이 80% 넘는지 안 넘는지에 따라 인스턴스의 수가 자동으로 변하게 됩니다.
13. 태그 추가
태그를 지정하면 Auto Scaling 그룹 내 생성된 모든 인스턴스들은 다음 태그와 값들을 갖고 생성됩니다.
Auto Scaling 그룹 화면 구성
Auto Scaling 그룹을 클릭하면 다양한 탭이 존재합니다.
시작 템플릿
어떤 설정(AMI 종류, EC2 인스턴스 설정)을 갖고 인스턴스를 생성할 것인지 지정해 놓은 설정합니다.
클래식 로드 밸런서
어떤 로드 밸런서로부터 클라이언트 요청을 받을 것인지 지정합니다.
최근에는 애플리케이션 로드 밸런서와 대상 그룹을 사용하는 것을 추천하고 있습니다.
원하는 용량
그룹 내 목표로 하는 인스턴스 수를 의미합니다.
사용자가 임의로 지정할 수도 있고 자동 조정 정책에 맞게 이 값이 바뀔 수도 있습니다.
최소, 최대
이 그룹 내 최소/최대로 유지할 수 있는 인스턴스 수를 의미합니다.
종료 정책
그룹 내 인스턴스를 줄일 때 종료할 인스턴스를 고르는 정책입니다.
가장 오래된 인스턴스, 결제 시기가 가장 가까운 인스턴스 등 다양한 방법을 제공합니다.
활동
Auto Scaling 그룹 내 인스턴스의 실행, 종료, 실패 등에 대한 로그가 남습니다.
조정 정책
자동으로 인스턴스를 늘리고 줄이기 위한 정책들을 표시합니다.
기본적인 설정으로는 CPU 사용량, 네트워크 사용량으로 처리할 수 있습니다.
AWS CloudWatch를 통한 추가 설정을 하면 메모리 사용량, 디스크 사용량, 외부 지표 등 다양한 경우에 대해서도 인스턴스 수를 조절할 수 있습니다.
인스턴스
이 그룹에서 관리하고 있는 인스턴스의 목록을 보여줍니다.
- 인스턴스 ID : 인스턴스의 고유 ID
- 수명 주기 : 현재 인스턴스의 상태를 가지고 있습니다.
- 수명 주기가 InService 상태인 경우에만 정상적으로 서비스 중임을 나타냅니다.
- 시작 템플릿 / 구성 : 어떤 시작 구성이나 시작 템플릿을 이용해서 생성된 인스턴스인지 나타냅니다.
모니터링
그룹 지표 수집을 활성화해둔 경우 Auto Scaling 그룹에 대한 모니터링 그래프들을 보여줍니다.
인스턴스 수 변화 추이 등의 데이터를 확인할 수 있습니다.
인스턴스 자동 추가/제거
이전에 CPU 사용률이 80%를 넘으면 인스턴스를 하나 추가하고 80% 이하로 떨어지면 인스턴스를 하나 줄이는 조정 정책을 추가했습니다.
서버에 접속한 뒤 임의로 CPU 사용률을 높여보자.
PuTTY를 이용하여 express-group의 IPv4 퍼블릭 IP로 접속해줍니다.
stress라는 애플리케이션을 설치해줍니다.
$ sudo yum install stress -y
stress를 사용하여 600초 동안 1개의 CPU 사용량을 최대로 늘립니다.
$ stress --cpu 1 --timeout 600
5~10분 기다려서 인스턴스가 자동으로 한 대 더 추가되는 것을 알 수 있습니다.
[EXERCISE-GROUP]의 [활동 기록] 탭에서 확인할 수 있습니다.
종료
원하는 용량과 최소 용량을 0으로 바꿔주면 종료할 수 있습니다.
'Infra > AWS' 카테고리의 다른 글
로드 밸런서에 도메인 등록 실습 + HTTPS (0) | 2022.03.25 |
---|---|
AWS Route 53을 이용한 도메인 등록 (0) | 2022.03.25 |
AWS Elastic Load Balancing(ELB, 로드 밸런서) (0) | 2022.03.13 |
AWS EC2 - Windows(Putty), Mac OS(Terminal) (0) | 2022.03.12 |
운영 서버의 특징 (0) | 2022.02.06 |
- Total
- Today
- Yesterday
- Algorithm
- Spring
- 클린 코드
- JPA
- 이펙티브 자바
- MSA
- BOJ
- programmers
- Spring Boot
- BAEKJOON
- C++
- kotest
- kkoon9
- Kotlin
- 이팩티브 자바
- 백준
- 클린 아키텍처
- Olympiad
- 디자인패턴
- 디자인 패턴
- Effective Java
- 프로그래머스
- 테라폼
- AWS
- 알고리즘
- 정규표현식
- Java
- 코테
- 객체지향
- node.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |