8장 가용성 높고 빠르게 확장 가능한 인프라 구성하기
1. 가용성(Availability)
가용성(Availability)
- 가용성이란, 해당 시스템이나 서비스가 가동 및 실행되는 시간의 비율을 말한다.
- 가용성이 높다는 것은 서비스의 가동률이 높다는 것을 의미하며, 이러한 가용성은 보통 **'9'**로 측정한다.
- 예를 들어, 가용성 수준이 '세 개의 9(Three Ninew)' 인 서비스는 가동되어 실행되는 **99.9%**의 시간만큼 지원할 수 있다는 것을 말하며, 24 * 7 * 365 (하루 24시간/일주일 7일/일년 365일)을 기준으로 했을 때, 1년 동안 서비스 중지가 8.76 시간이라는 것을 의미한다.
다음은 인프라의 가용성 비용에 따른 서비스 가동 중지 시간을 정리한 내용이다.
- 매우 중요한 업무 시스템이나 평상시 서비스 중지 및 다운타임을 가져갈 수 없는 시스템을 설계해야 하는 경우 인프라의 가용성을 극대화 할 수 있는 아키텍처로 인프라를 구성한다.
- 이러한 시스템을 '고가용성 시스템'이라 말한다.
- Amazon Web Services의 주요 서비스를 이용하면 손쉽게 '고가용성 시스템'을 설계하고 구현할 수 있다.
2. 확장성(Scalability)
확장성(Scalability)
- 확장성이란, 서비스나 응용프로그램이 증가하는 성능 요구에 맞게 향상될 수 있는 정도
- 예시) 동시 접속자가 100명인 시스템이 있다고 가정할 때 특정 시즌이나 이벤트로 인해 동시 접속자가 10배에서 100배 이상 많이 접속하는 경우 확장성이 높은 시스템은 사용자 증가에 따라 시스템의 자원이나 리소스를 손쉽게 추가/삭제할 수 있다.
- 이러한 확장성은 물리적 하드웨어 환경에서 스케일 업(Scale up)과 스케일 아웃(Scale Out)이라는 두 가지의 확장성 전략을 이용하여 구현할 수 있다.
- 스케일 업(Scale up)은 단일 하드웨어에 대해 시스템 리소스(프로세서, 메모리, 디스크, 네트워크 어댑터 등)를 추가하거나 기존 하드웨어를 더욱 강력한 것으로 교체하는 작업이 포함되며,
- 스케일 아웃(Scale out)은 서버를 여러 대 추가하여 처리 능력을 향상시키는 방법이다.
- AWS의 Auto Scaling은 클라우드의 이점을 살려 인프라의 증설/축소를 손쉽게 구현할 수 있어서 확장성 및 탄력성 높은 시스템을 구축할 수 있다.
3. Amazon Auto Scaling
- Amazon Auto Scaling
- Amazon Auto Scaling은 Amazon Web Services에서 제공하는 서비스 중 가장 클라우드답다
- 예를 들어, 전세계 게이머를 대상으로 신규 모바일 게임을 오픈하는 경우 이벤트와 홍보를 통해 많은 사용자가 동시에 접속하게 된다.
- 클라우드가 아니라 일반 H/W로 시스템을 구성한다면 사용자의 접속 예상 최대치를 산정하여 H/W를 구매해야 한다.
- 비용적인 측면에서 보면 많은 초기 투자가 필요하며, 사용자가 줄어 들어 더 이상 많은 시스템이 필요하지 않더라도 구매했던 H/W를 다시 처분할 수 없다.
- 동일한 상황에서 Amazon Web Services의 Auto Scaling을 사용한다면 초기 H/W 구매나 투자는 필요하지 않다.
- 서비스 오픈 초기 서버의 사용자가 급증하면Auto Scaling을 사용하여 인스턴스를 늘린다.
- 이용자가 줄어 평상시 상황이 유지되면 인스턴스를 자동으로 줄여 비용을 줄임
- 이렇듯 Amazon Web Services Auto Scaling은 서버나 애플리케이션을 모니터링하고 리소스를 자동으로 조정(Scale In/Scale Out)함
- 최대한 저렴한 비용으로 안정적이고 예측 가능한 성능을 유지할 수 있다.
구분 | 내용 |
서비스명 | Amazon Auto Scaling |
설명 | 성능과 비용을 최적화 하도록 애플리케이션 규모 조정 |
주요 특징 | - Auto Scaling을 사용하면 애플리케이션 가용성을 간편하게 관리 - 사용자가 정의한 조건에 따라 EC2용량이 자동으로 확장/축소 -실행 중인 EC2 인스턴스의 수를 원하는 수준으로 유지 가능 - 수요가 급증할 경우 인스턴스의 수를 원하는 수준으로 유지 가능(Scale in) - 수요가 적을 경우 자동으로 용량을 감소시켜 비용 낭비를 최소화(Scale Out) - 수요 변화가 많지 않은 애플리케이션과 사용량이 시, 일, 주 단위로 변하는 애플리케이션 모두에 알맞은 상품 |
프리티어 (Free Tier) |
Auto Scaling의 사용은 무료지만, AWS 리소스에 대한 비용과 Clouldwatch 비용은 발생됨 |
4. Amazon Auto Scaling의 구성 요소
4-1. Amazon Auto Scaling 그룹
- Amazon Auto Scaling 그룹은 인스턴스의 조정 및 관리 목적으로 구성된 논리적 그룹으로 Auto Scaling을 수행하는 ‘인스턴스의 모음’이다.
- 예를 들어, B2B용 웹 사이트를 여러 인스턴스에서 서비스한다면 애플리케이션의 성능을 향상시키기 위해 Auto Scaling 그룹을 사용하여 지정된 조건에 따라 자동으로 인스턴스 수를 늘리거나, 비정상적으로 동작하는 경우 고정된 수의 인스턴스를 유지하거나, 비용 절감을 위해 인스턴스의 수를 자동으로 조정할 수 있다.-
- 이러한 Auto Scaling 그룹은 인스턴스의 수를 조건에 따라 자동 조정 및 관리하는 Amazon Auto Scaling의 핵심 기능이다.
4-2. 시작 구성
- 시작 구성은 Auto Scaling 그룹에서 인스턴스를 시작하는 데 사용하는 템플릿이다.
- 시작 구성을 생성하는 경우, Amazon Machine Image(AMI), 인스턴스 유형, 키 페어, 하나 이상의 보안 그룹, EBS 등 인스턴스에 대한 정보를 지정한다.
- 시작 구성은 여러 개의 Auto Scaling 그룹에 지정될 수 있으나,
- Auto Scaling 그룹은 하나의 시작 구성만을 지정할 수 있다.
- 또한 시작 구성은 한 번 생성한 이후에는 수정/변경할 수 없다.
- 따라서 시작 구성을 변경하여 Auto Scaling 그룹에 적용하고자 한다면, 시작 구성을 새롭게 생성하여 Auto Scaling 그룹을 업데이트 해야 한다.
4-3. Amazon Auto Scaling 그룹 조정
- Auto Scaling 그룹 조정은 인스턴스의 수를 늘리거나 줄이는 기능이다.
- 조정 작업은 이벤트와 함께 시작되거나, Auto Scaling 그룹의 인스턴스를 시작하거나 종료하도록 수행하는 조정 작업과 함께 수행된다.
인스턴스의 조정 옵션은 다음과 같다.
1. 현재 인스턴스 수준 유지 관리 :
- 최소 또는 항상 지정된 수의 인스턴스를 실행 유지 관리하도록 구성할 수 있다.
2. 수동 조정 :
- Auto Scaling 그룹에서 최소, 최대 또는 원하는 용량의 변경 사항을 조정 변경할 수 있다.
3. 일정을 기반으로 조정 :
- 예측 가능한 일정에 따라 수요가 증가하거나 감소하는 경우 일정에 따른 확장 및 축소 작업을 시간 및 날짜 함수를 통해 자동으로 수행되도록 구성할 수 있다.
4. 온디맨드 기분 조정 :
- 리소스를 조정하는 가장 효과적인 방법으로 인스턴스의 CPU 사용률이 15분 동안 90% 유지될 때마다 인스턴스를 확장하도록 구성하는 정책을 생성할 수 있다.
- 변화하는 조건에 따라 효과적으로 자원의 조정을 가능하게 한다.
- CPU, 메모리 사용량, 네트워크의 대역폭이 일정 수준 이상인 경우 새로운 인스턴스를 시작
- 네트워크 대역폭이 다시 내려가면 인스턴스를 종료하는 정책을 수립하여 적용
- 이러한 모니터링 기반의 조정은 2개의(확장/축소) 정책을 통해 작업을 수행
5. 실습 : ELB(Elastic Load Balancing) 설정하기
- Auto Scaling 서비스에 대한 동작 원리와 구성 방법을 확인하기 위한 실습이다.
- 본 실습을 진행하기 위해 Auto Scaling에 사용될 **ELB(Elastic Load Balancing)**를 사전에 구성한다.
- Auto Scaling은 별도로 비용이 부과되지 않는다. 다만 Auto Scaling에 사용되는 EC2와 ELB는 프리티어(Free Tier) 범위 내에서 실습 할 수 있다.
1. AWS에 [서비스] → [EC2] → [로드 밸러서]로 이동 후 [로드 밸런서] 페이지에서 [로드 밸런서 생성] 버튼을 클릭한다.
2. [로드 밸런스 유형 선택] 페이지에서 "Classic Load Balancer"를 선택 후 [생성] 버튼을 클릭한다.
3. [로드 밸런스 정의] 페이지에서 다음과 같이 구성한다.
- Load Balancer 이름: WOONG-AutoScaling-ELB
- LB 생성할 VPC : woong-test-vpc
4. Load Balance 처리할 퍼블릭 서브넷을 선택 후 [다음: 보안 그룹 할당] 버튼을 클릭한다.
5. [보안 그룹 할당] 페이지에서 "Tutorial Security Group"을 선택 후 [다음: 보안 설정 구성] 버튼을 누른다.
6. [보안 설정 구성] 페이지에서 [다음: 상태 검사 구성] 버튼을 클릭한다.
7. [상태 검사 구성] 페이지에서 [다음: EC2 인스턴스 추가] 버튼을 클릭한다.
8. [EC2 인스턴스 추가] 페이지에서 인스턴스를 추가하지 않고 Pass 후 [다음: 태그 추가] 버튼을 클릭한다.
9. [태그 추가] 페이지에서 [검토 및 생성] 버튼을 클릭한다.
10. [검토] 페이지에서 [생성] 버튼을 클릭한다.
6. 실습 : Auto Scaling 구성하기
- Auto Scaling 구성을 위해 그룹을 생성하는 방법과 사용하게 될 인스턴스를 구성하는 방법, 구성 시 필요한 ELB, 자원 조정 정책 생성방법에 대해 실습 할 것이다.
1. [Auto Scaling 그룹]을 누른 후, [Auto Scaling 그룹 생성] 버튼을 클릭한다.
2. [Auto Scaling 그룹 생성] 페이지에서 그룹 이름을 입력하고, [시작 템플릿]으로 전환하고 시작 구성 생성을 클릭한다.
WOONG-AUTOSCALLINGGROUP
3. [시작 템플릿 생성] 페이지에서 [이름] 항목에 "AutoScalingEC2"를 입력한다.
4. AMI 는 전에 내가 만든 이미지를 넣는다.
5. 인스턴스 유형은 "t2.micro" 로 잡는다.
6. 고급 세부 정보에서 [사용자 데이터]를 아래 텍스트로 입력한다.
#!/bin/sh
yum -y install httpd php mysql php-mysql chkconfig httpd on
sudo systemctl start httpd
cd /tmp wget https://nulls.co.kr/media/post-body/2022/03/24/autoscaling-source.zip unzip autoscaling-source.zip
sudo
mv *.php /var/www/html
7. 스토리지(볼륨)은 기본으로 선택한다.
8. 보안 그룹은 "기존 보안 그룹"을 선택한다
9. 키 페어(로그인)는 기존 것으로 설정한다. 그 후, [시작 구성 생성] 버튼을 클릭한다.
10. 다시 [Auto Scaling 그룹]으로 돌아와 생성한 시작 구성을 선택하여 [다음] 버튼을 클릭한다.
11. 네트워크에서 "tutorial-vpc" 를 선택하고, 서브넷은 ...-2a 로 선택 후, [다음] 버튼을 클릭한다.
12. [Classic Load Balancer] 를 선택 후, 전에 생성한 로드 밸런서를 선택한다. 그 후, [다음] 버튼을 클릭한다.
13. 그룹 크기에서 최대 용량을 3으로 늘리고, 조정 정책 이름으로 "Scale Group Size" 로 적는다.
14. 알림을 추가한다.
15. 태그에서 [다음] 버튼을 클릭한다.
16. 검토 페이지에서 [Auto Scaling 그룹 생성] 을 클릭한다.
17. 이제 [로드 밸런서] 페이지에서 ELB를 선택하고 [상태 검사 편집] 버튼을 클릭한다.
18. Ping 경로를 변경 후 [저장] 버튼을 클릭한다.
19. [로드벨런서] 페이지에서 DNS 정보를 확인 후 복사한다.
20. ELB의 도메인으로 접속하여 페이지가 정상 로드됨을 확인한다.
woong-autoscaling-elb-414101395.ap-northeast-2.elb.amazonaws.com
조금 많이 기다려본다... 그러면 상태에 서비스 중이 인스턴스가 뜬다...
21. 생성 후, 300 초 뒤에 [Generate Load] 를 클릭해라
생성된 index.php 코드에 문제가 있다
위 6번 내용에서 적었던 bash 코드
#!/bin/sh
yum -y install httpd php mysql php-mysql
chkconfig httpd on
sudo systemctl start httpd
cd /tmp
wget <https://s3.ap-northeast-2.amazonaws.com/cftest20180909/autoscaling-source.zip>
unzip autoscaling-source.zip
sudo mv *.php /var/www/html
위에 https://s3.ap-northeast-2.amazonaws.com/cftest20180909/autoscaling-source.zip 이곳 안에 있는 index.php 코드가 잘못되었다.
[index.php 문제점]
<dev> → <div> / 마지막 refresh 쪽 코드에 $cof 삭제 후 refresh 닫아주기
<div>
<center>
<?php
echo "<h3>CPU Load: ";
include 'getcpuload.php';
echo "</h3></br></br>";
# Get the instance CPU Load Generation form
include 'putcpuload.php';
# Check to see if genload session variable has been set, if so, refresh$
session_start();
if (isset($_SESSION['genload']))echo "<meta http-equiv=\\\\"refresh\\\\">"
?>
</center>
</div>
(이거 나중에 오류 없는 코드 업로드 해야함... Auto Scaling 은 되는데 이거 코드 문제로 해당 하는 곳이 생성한 후 작동 제대로 안됨)
만약 문제를 해결하고 싶다면, 일단 코드를 받고, 알집을 다시 하여 해당 zip 주소로 6번 과정을 다시한다.
22. 인스턴스 개수가 증가 되는 게 보인다.
'Clould > 아마존 웹 서비스' 카테고리의 다른 글
아마존 웹 서비스 (AWS Discovery Book) #7 (0) | 2022.08.29 |
---|---|
아마존 웹 서비스 (AWS Discovery Book) #5 (1) | 2022.08.29 |
아마존 웹 서비스 (AWS Discovery Book) #4 (0) | 2022.08.28 |
아마존 웹 서비스 (AWS Discovery Book) #3 (0) | 2022.08.27 |
아마존 웹 서비스 (AWS Discovery Book) #2 (0) | 2022.08.26 |