월루를 꿈꾸는 대학생
8주차 - EC2 Auto Scaling 본문
접속자가 늘면 서버가 더 필요하고 줄어들면 서버는 필요가 없다 -> 유연하게 서버의 갯수를 늘렸다 줄일 수 있는 것
-> 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
오토스케일링 하면 자동으로 alb 등록 됨
이것이 오토 스케일링이다
오토 스케일링 전 !! 배포할 설정 - 런치 템플릿 만들어야함
오토스케일링 지침 체크 !
vpc1 포함된 보안 그룹 - tcp 80 22 허용된 그룹
오토스케일링로 추가된 인스턴스에 이름 붙이기
# 생성 후 실행되는 명령어 같음
#!/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 세팅한 그거대로 준수한다 !
조정정책!
원하는 용량을 1 -> 1대씩 증가 // 2 -> 2대씩 증가
대상값 80 : 3분동안 3번 연속 cpu가 80퍼 인 경우 1분마다 기록함
다음 다음 다음 -> 그룹 생성 ㄱ
오토스케일링 그룹
축소될 때 어떤 인스턴스를 죽일까
NEWEST -> 맨 마지막 생성된 거 부터 날리자!
이제 축소 정책을 만든다! 스케일 아웃은 이미 만듦
상단 정책 추가 !
3번째 경보 생성 - 삭제의 기준 !
EC2- 오토스케일링 그룹별 - FIRSTEC2 :CPUUtilization
클라우드워치 알람 설정해서 1분 설정 가능 !
작업 구성 알림 제거
경보생성 !
다시 조정 정책으로
방금 만든 ASG-CpuLow가 있음
새로생성 만들면 대쉬보드가 생성 됨
--- 위젯 추가
오토스케일링 -> 그룹 지표 -> GroupInServiceInstances (현재 사용되고 있는 인스턴스 갯수 )
위젯이 하나 생겼고 지금 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"
부하발생 - 해쉬값 계산이 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번!!!
클라우드 워치에서 80퍼 넘은 걸 확인 이제 3분동안 3번 넘은 걸 확인하면 ec2 새로 하나 생김
3대가 생겼고 alb에서 이를 로드분산 하는중
첫째, CloudWatch (대시보드에 추가된 지표 Metric 삭제 → 대시보드 삭제)
둘째, EC2 Auto Scaling Group 삭제 // 한 3분 걸림
셋째, EC2 시작 템플릿(Launch Templates) 삭제
넷째, CloudFormation 템플릿 스택 삭제
'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 |