반응형
SMALL

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)이라는 두 가지의 확장성 전략을 이용하여 구현할 수 있다.

  1. 스케일 업(Scale up)은 단일 하드웨어에 대해 시스템 리소스(프로세서, 메모리, 디스크, 네트워크 어댑터 등)를 추가하거나 기존 하드웨어를 더욱 강력한 것으로 교체하는 작업이 포함되며,
  2. 스케일 아웃(Scale out)은 서버를 여러 대 추가하여 처리 능력을 향상시키는 방법이다.
  • AWS의 Auto Scaling클라우드의 이점을 살려 인프라의 증설/축소를 손쉽게 구현할 수 있어서 확장성 및 탄력성 높은 시스템을 구축할 수 있다.

 

3. Amazon Auto Scaling


  • Amazon Auto Scaling
    • Amazon Auto ScalingAmazon 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. 인스턴스 개수가 증가 되는 게 보인다.

반응형
LIST

+ Recent posts