월루를 꿈꾸는 대학생

8주차 - EC2 Auto Scaling 본문

Cloud/AWS

8주차 - EC2 Auto Scaling

하즈시 2021. 4. 7. 20:55
728x90

접속자가 늘면 서버가 더 필요하고 줄어들면 서버는 필요가 없다 -> 유연하게 서버의 갯수를 늘렸다 줄일 수 있는 것 

->  Auto Scaling

애플리케이션의 로드를 처리할 수 있게 동적으로 EC2 인스턴스를 유지

 

- 어떤 이벤트가 있을 때 늘릴 것인가 줄일 것인가 - POLICY 

- 너무 많이 늘어나지 않도록 맥시멈 얼마까지 할 것인가 

- 최소 유지 인스턴스 수는 어느 정도로 할 것인지! 

 

EX _ 하이브가 BTS 영상 올리기 전에 미리 서버를 배포해둔다고 함 ... 사람이 엄청 보니까 ! 

 

EC2인스턴스를 만들 때 마다 이미지 유형 키페어 보안 그룹 등 .... 이거 세팅 귀찮음  이걸 런치 템플릿을 이용하면 EC2를 위한 설정을 미리 하고 필요할 때 마다 클릭 두번으로 인스턴스 만들기 가능 !!!! 

 

 

그룹

- 조정 및 관리 목적의 논리적인 단위

 

구성 템플릿

- 오토 스케일링으로 늘어날 때 아무런 웹서버 설정 없는 상태로 배포하면 없는거랑 같음... 즉 미리 OS, 인스턴수유형, 키페어, 보안 그룹, 블록 디바이스 매핑 등의 정보를 미리 지정할 수 있음 

- 시작 템플릿 = Launch Template(권장)  / 시작 구성 = Launch Configuration

 

조정 옵션 

- 오토 스케일링 조정하는 다양한 방법들 

 

 


장점

 

- 가변 수용 허용 : 주말은 서버 수를 줄이고.. 평일은 일하니까 서버를 늘리고 ! 

- 가용성과 내결함성 향상 : 다른 AZ에도 가능 

- 인스턴스 생명 주기 

- 조정정책 

 

 

 


 

 

 

기본 환경 검증

# AWS CLI 확인
aws --version
aws ec2 describe-instances
aws ec2 describe-instances --no-cli-pager

## 쿼리로 필터링 ! 
aws ec2 describe-instances --query "Reservations[*].Instances[*].InstanceId" --output text
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, State.Name]' --output text
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, State.Name, PrivateIpAddress]' --output text

while true; do aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, State.Name, PrivateIpAddress]' --output text; date; sleep 1; done

(아래는 AS 배포 후)
aws ec2 describe-instances --filter "Name=tag:Name,Values=MyEC2"
aws ec2 describe-instances --filter "Name=tag:Lab,Values=ASLab"
while true; do aws ec2 describe-instances --filter "Name=tag:Lab,Values=ASLab" --query 'Reservations[*].Instances[*].[InstanceId, State.Name, PrivateIpAddress]' --output text; date; sleep 1; done

# ApachBench 확인
ab -V

# ALB DNS 이름 변수 지정
ALB=ALB-TEST-901731084.ap-northeast-2.elb.amazonaws.com

# 도메인에 질의해서 접근하려면 통신해야하는 ip를 반환해주는 툴
# 나중에 alb에 타겟 등록되면 2개 뜬다 
dig +short $ALB


while true; do curl $ALB --silent --connect-timeout 1; date; echo "---[AutoScaling]---"; sleep 1; done

 

i am 롤 매핑해서 저렇게 뜬다고 함 

 

 

웹 서비스 부하를 간단하게 줄 수 있는 유틸리티 ApachBench 

 

 

 

배포된 alb
타겟 서버가 없음.. 등록 x 

오토스케일링 하면 자동으로 alb 등록 됨 

이것이 오토 스케일링이다 

 

 

오토 스케일링 전 !! 배포할 설정 - 런치 템플릿 만들어야함 

 

시작 템플릿 

 

 

오토스케일링 지침 체크 ! 

 

 

vpc1 포함된 보안 그룹 - tcp 80 22 허용된 그룹 

 

오토스케일링로 추가된 인스턴스에 이름 붙이기 

 

 

활성화 해야 1분에 한 번씩 확인 모니터링 가능 

 

# 생성 후 실행되는 명령어 같음 

#!/bin/bash
RZAZ=`curl http://169.254.169.254/latest/meta-data/placement/availability-zone-id`
IID=`curl 169.254.169.254/latest/meta-data/instance-id`
LIP=`curl 169.254.169.254/latest/meta-data/local-ipv4`
amazon-linux-extras install -y php7.2
yum install httpd htop tmux -y
systemctl start httpd && systemctl enable httpd
echo "<h1>RegionAz($RZAZ) : Instance ID($IID) : Private IP($LIP) : Web Server</h1>" > /var/www/html/index.html
echo "1" > /var/www/html/HealthCheck.txt
curl -o /var/www/html/load.php https://cloudneta-book.s3.ap-northeast-2.amazonaws.com/chapter5/load.php --silent
curl -o /var/www/html/cpuload.php https://cloudneta-book.s3.ap-northeast-2.amazonaws.com/chapter5/cpuload-aws.php --silent

 

성공 

 

시작템플릿 만들었으니 이걸로 오토스케일링 그룹 만든다 

 

 

 

미리 시작 템플릿이 미리 만들어 둔게 매핑되어 있음 

 

 

시작 템플릿 준수 - 런치 템플릿 t2.micro 세팅한 그거대로 준수한다 ! 

 

 

 

기존 alb 에 연결 
좀 더 빠르게 확인을 위해 .. 모니터링 

 

 

조정정책! 

 

원하는 용량을 1 -> 1대씩 증가 // 2 -> 2대씩 증가 

 

 

2대의 웹서버에 하나는 90퍼 한대는 10퍼 그러면 2개의 평균 cpu 사용율은 50퍼 80퍼 안 넘음.... 근데 각각 90이면 평균사용율 90이니까 대상값 80을 넘어감 그러면 정책에 따른 엑션으로 1대가늠 

대상값 80 : 3분동안 3번 연속 cpu가 80퍼 인 경우 1분마다 기록함 

 

다음 다음 다음 -> 그룹 생성 ㄱ

 

 

이름 없는 거 하나 만들어짐 
ALB에도 타겟 된 거 완료 

 

오토스케일링 그룹 

 

 

세부정보에서 밑에 고급구성 

 

축소될 때 어떤 인스턴스를 죽일까 

NEWEST -> 맨 마지막 생성된 거 부터 날리자! 

결과를 빨리 보기위해 

 

 

최소 1개니까 EC2를 만듬 -> 로그 

 

정책들

 

이제 축소 정책을 만든다! 스케일 아웃은 이미 만듦 

상단 정책 추가 !

 

3번째 경보 생성 - 삭제의 기준 !

경보생성 클릭 

 

축소를 알리는 경보 - 지표선택 

 

 

EC2- 오토스케일링 그룹별 - FIRSTEC2 :CPUUtilization

지표 선택 ! 

클라우드워치 알람 설정해서 1분 설정 가능 ! 

 

 

 

10이라는 숫자보다 작은 게 2번 연속 2분동안 나올 때 ! 

 

작업 구성 알림 제거 

제거 후 다음 

 

 

 

경보생성 ! 

 

2개의 경보 생성 

 

다시 조정 정책으로 

방금 만든 ASG-CpuLow가 있음 

 

알람 발생시 용량 단위 1개 삭제  60초 후 또 알람 울리면 또 삭제 

 

 

 

클라우드워치에서 경보 클릭 지금 경보가 하나 울림 
작업 - 대쉬보드 추가 저렇게 다 선택해야함 

 

새로생성 만들면 대쉬보드가 생성 됨

 

 

클라우드워치에 키카이 대쉬보드가 생성되어서 경보 두개를 모니터링 가능 
사용자 지정으로 분단위 , 나라별 시간대 설정가능 // 우측에 자동 새로고침도 있음 

 

--- 위젯 추가 

 

 

행 선택 

 

지표

 

오토스케일링 -> 그룹 지표 -> GroupInServiceInstances (현재 사용되고 있는 인스턴스 갯수 )

 

누적면적 // 0-4 로 

 

1분으로 평균 수정 

위젯이 하나 생겼고 지금 1대인 상태

 

대쉬보드 저장 클릭 

 

 


부하발생 시키기 

 

오토스케일링으로 배포된 웹 서버 접속 

# 터미널1
htop

# 터미널2
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"

## (심화 옵션) Client IP 확인
vim /etc/httpd/conf/httpd.conf
196 shift+G
%{X-Forwarded-For}i 
systemctl reload httpd
tail -f /var/log/httpd/access_log |grep -v "ELB-HealthChecker/2.0"

 

 

htop 현재 cpu 부하 상태 확인 

 

부하발생 - 해쉬값 계산이 cpu에 부하를 줌 

<?php
header('Content-Type: text/plain');
$time = microtime(true);
$pass = password_hash('Hello',CRYPT_BLOWFISH,array("cost"=>14));
echo "Server Hostname : ".gethostname();
echo "\nHash Calculation Time : ".(microtime(true) - $time)." Second";
echo "\nPassword Hash Result : ".$pass;
?>

 

ab -n 1 -c 1 http://$ALB/load.php

 

1개의 요청 풀에서 총 1번 요청 

 

 

ab -n 500 -c 1 http://$ALB/load.php

1번씩 요청을 해서 응답을 받는데 500번!!! 

 

cpu가 부하가 걸림 

 

클라우드 워치에서 80퍼 넘은 걸 확인 이제 3분동안 3번 넘은 걸 확인하면 ec2 새로 하나 생김 

 

 

3분 뒤 경보발생 

 

 

 

오토스케일링 그룹 활동에 새로 생기려고 하는 로그 확인 

 

 

ALB 타겟 추가 확인 

 

3대가 생겼고 alb에서 이를 로드분산 하는중 

 

cpu 부하 없으니... 경보 울리고 인스턴스도 줄어들고 있음 

 

 

늘었던 인스턴스가 다시 삭제됨 

 

ALB에 추가된 인스턴스도 사라짐 

 


첫째, CloudWatch (대시보드에 추가된 지표 Metric 삭제 → 대시보드 삭제)

둘째, EC2 Auto Scaling Group 삭제 // 한 3분 걸림 

셋째, EC2 시작 템플릿(Launch Templates) 삭제

넷째, CloudFormation 템플릿 스택 삭제

728x90

'Cloud > AWS' 카테고리의 다른 글

[AWS] 관리자 권한 IAM생성  (0) 2023.03.06
9주차 Wordpress & WooCommerce  (2) 2021.04.14
7주차 로드밸런서 ELB  (2) 2021.04.04
6주차 - 데이터베이스 서비스  (2) 2021.03.24
3주차 네트워킹 서비스  (0) 2021.03.03