본문 바로가기

AWS Architecture Basic/설계 기본

6. AWS 고가용성 환경

1. 확장 대응

 

1.1. 아키텍처 확장

 

아키텍처는 변화하는 수요를 처리할 수 있어야 함

 ㅁ  위 안티패턴(설계가 적절하지 못한 시스템의 예)에서는 조정이 수동적 및 반응적으로 수행

 ㅁ  애플리케이션 서버는 최대 용량에 도달

 ㅁ  여유 용량이 없으므로 사용자는 애플리케이션에 액세스하지 못하고 있음

 ㅁ  관리자는 서버가 완전 가동중인 것을 발견하고 로드를 분담하기 위해 새 인스턴스 시작

 ㅁ  신규 인스턴스를 시작한 후 사용할 수 있게 될 때까지 몇 분 정도가 걸리므로, 그 시간 동안 사용자가 애플리케이션에 액세스 하지 못함.

 

1.2. 아키텍처 확장- 모범 사례

 

모니터링 솔루션(Cloud Watch )은 서버 집합 전체의 총 로드가 지정된 로드 임계값에 도달했는지 탐지

정보가 트리거 되면, Amazon EC2 Auto Scaling이 즉시 새 인스턴스를 시작

최대 용량에 도달하기 전 이 인스턴스가 준비되어 사용자에게 원할 한 경험 제공

 

1.3 Scale-Up & Scale-Out

 

수직적 조정(Scale-Up)

 ㅁ  워크로드가 증가함에 따라 메모리와 CPU 추가

 ㅁ  Java 애플리케이션 실행 시 메모리 추가(Java 힙 증가)는 가비지 컬렉션이 실행되는 시간이 길어진다는 의미

 

수평적 조정

 ㅁ  제한은 없으나 수평적 조정에 의존할 계획이라면 애플리케이션이 이를 충분히 활용할 수 있도록 설계하는 것이 중요

 

2 Amazon CloudWatch

 

인스턴스를 모니터링하고 원시 데이터를 거의 실시간 지표로 읽을 수 있도록 수집하고 처리합니다.

 

지정한 지표를 기준으로 알림을 전송하고 Auto Scaling 작업을 트리거합니다.

 

Amazon CloudWatch 제공 내용

 ㅁ  분산 통계 수집 시스템: 지표를 수집 및 추적

 ㅁ  기본적으로 하이퍼바이저 수준에서 원활하게 수집되는 지표 (CPU, I/O, Network)

 ㅁ  자체 애플리케이션 및 시스템에서 생성한 데이터에 대한 사용자 정의 지표를 생성 및 사용하는 기능

 

Amazon CloudWatch 사용자 정의 지표

 ㅁ  https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html

 

Publishing Custom Metrics - Amazon CloudWatch

When you create a metric, it can take up to 2 minutes before you can retrieve statistics for the new metric using the get-metric-statistics command. However, it can take up to 15 minutes before the new metric appears in the list of metrics retrieved using

docs.aws.amazon.com

Amazon EC2 인스턴스 용 모니터링 스크립트

 ㅁ  https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html

 

Monitor memory and disk metrics for Amazon EC2 Linux instances - Amazon Elastic Compute Cloud

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

2.1 CloudWatch 경보 예

 

 

2.2. CloudWatch 경보 및 작업

 

 

2.3. CloudWatch 설계 패턴: 모니터링 통합 패턴

 

해결할 문제

 ㅁ  시스템 운영에서는 모니터링 필요

 ㅁ  Amazon 클라우드의 모니터링 서비스가 가상 서버의 내부 작업(운영 체제, 미들웨어, 애플리케이션 등)을 모니터링할 수 없으므로 독립적 모니터링 시스템 구축 필요

 

클라우드 패턴 설명

 ㅁ  가상 서버 등은 AWS 클라우드 모니터링 서버에서 모니터링

 ㅁ  고객은 별도의 시스템을 사용하여 운영 체제, 미들웨어, 애플리케이션 등을 모니터링해야 함

 

구현

 ㅁ  Amazon EC2 인스턴스에 모니터링 소프트웨어를 설치하여 CloudWatch 모니터링 서비스에서 모니터링 정보를 가져오도록 함.

 ㅁ  모니터링 소프트웨어 설치 (Nagios, Zabbix, Munin)

 ㅁ  플러그인을 사용하여 CloudWatch API를 통해 모니터링 정보를 가져오고, 해당 정보를 모니터링 소프트웨어에 사용

 ㅁ  이 플러그인을 사용하여 모니터링 수행

 

클라우드 모니터링 설계 패턴 정보

 ㅁ  http://en.clouddesignpattern.org/index.php/CDP:Monitoring_Integration_Pattern

 

CDP:Monitoring Integration Pattern - AWS-CloudDesignPattern

Centralization of Monitoring Tools Problem to Be Solved Monitoring (of services and resources, and the like) is necessary in system operation. A monitoring service is provided by the Amazon Cloud. However, because the monitoring service in the Amazon Cloud

en.clouddesignpattern.org

2.4. CloudWatch Logs를 통한 애플리케이션 로그 파일 저장 및 모니터링

 

                             

지표는 CloudWatch CloudWatch Logs로 안정적으로 저장

 ㅁ  관리자 및 기타 관계자는 AWS Management Console에서 직접 CloudWatch 로그 확인 가능

 ㅁ  로그는 Amazon S3에 저장되어 다른 서비스 및 다른 사용자가 액세스 할 수 있음

 ㅁ  로그는 Amazon Kinesis Streams 또는 AWS lambda와 같은 데이터 처리 솔루션으로 실시간 스트리밍 가능

 

CloudWatch Logs 자세한 내용

ㅁ  https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html

 

What Is Amazon CloudWatch Logs? - Amazon CloudWatch Logs

What Is Amazon CloudWatch Logs? You can use Amazon CloudWatch Logs to monitor, store, and access your log files from Amazon Elastic Compute Cloud (Amazon EC2) instances, AWS CloudTrail, Route 53, and other sources. CloudWatch Logs enables you to centraliz

docs.aws.amazon.com

3. Auto Scaling

 

지정된 조건에 따라 인스턴스를 시작 또는 종료

지정된 경우, 새 인스턴스를 로드 밸

밸런서에 자동으로 등록

여러 가용 영역에 걸쳐 시작 가능

 

3.1. Auto Scaling 기본 아키텍처

 

작업 수행 방법

 ㅁ  API

 ㅁ  스크립트

 ㅁ  Auto Scaling

 

3.2. Auto Scaling 작동 방식

 

- 시작 구성

 ㅁ  Auto Scaling에서 Amazon EC2 인스턴스를 시작하는 방법 정의

 ㅁ  기존 Amazon EC2 인스턴스 속성을 사용하여 새 시작 구성을 생성할 수 있는 옵션 제공

 ㅁ  이 옵션 사용 시 Auto Scaling이 속성을 지정된 인스턴스에서 사용자가 하나 이상의 Auto Scaling 그룹을 시작할 수 있는 템플릿으로 복사

 

Auto Scaling 그룹

 ㅁ  Auto Scaling 그룹은 시작 구성을 사용하여 Amazon EC2 인스턴스를 시작

 ㅁ  Auto Scaling Amazon EC2 인스턴스를 시작 시 사용할 이미지에 대한 정보를 제공하는 방식으로 시작 구성 생성

 ㅁ  이러한 정보는 이미지 ID, 인스턴스 유형, 키 페어, 보안 그룹, 블록 디바이스 매핑 등이 될 수 있음.

 

Auto Scaling 정책

 ㅁ  Auto Scaling 그룹은 정책과 경보의 조합을 사용하여 어떤 조건에 부합하면 인스턴스가 시작되고 종료되도록 할지 결정

 ㅁ  경보는 사용자가 지정한 일정 시간 동안 단일 지표를 주시하는 객체

 ㅁ  지표값이 사용자가 정의한 임계값을 지정된 횟수 이상 초과하는 경우, 경보가 하나 이상의 작업을 수행

 ㅁ  Auto Scaling 지원 정책

    >  단순 조정(Simple Scaling) – 그룹의 현재 용량을 단일 조정 조절에 따라 늘리거나 줄임

    >  단계 조정(Step Scaling) 그룹의 현재 용량을 일련의 조정 조절(단계 조절)에 따라 늘리거나 줄이며 이는 경보 위반의 크기에 따라 달라짐

 

예약된 작업

 ㅁ  일정을 기준으로 조정 수행 시 예측 가능한 로드 변화에 대응하여 애플리케이션 조정 가능

 ㅁ  Auto Scaling 그룹이 일정을 기준으로 조정 수행하도록 구성하려면, 예약된 작업을 생성해야 함.

 

3.3 Auto Scaling 정책과 예약된 작업 비교

구분

Auto Scaling 정책

예약된 작업

개요

조정 활동을 수동으로 개시

지표를 기준으로 조정 활동을 개시하도록 CloudWatch를 사용해 동적 조정

미리 조치를 취할 수 있는 사전 지식 (예측 가능한 일정)

파라미터 예시

파라미터 예시

AutoScalingGroupName

HonorCoolDown

PolicyName

파라미터 예시

ScheduledActionNAme

AutoScalingGroupName

DesiredCapacity

사용량 시나리오

CPU 사용률이 70%에 도달하면 인스턴스를 추가

반대로 CPU 사용률이 낮으면, 인스턴스를 제거하여

매주 수요일 웹 애플리케이션에 대한 트래픽이 증가하고 목요일까지 높은 상태로 유지되다가, 금요일에 줄어들기 시작

 3.4. Elstic Load Balacing CloudWatch 및 Auto Scaling 통합 아키텍처

Auto Scaling 구성

Auto Scaling 작동

①.    이 시나리오에서는 로드 밸런서가 지정된 CloudWatch 경보가 지연 시간을 계속 추적

②.    경보가 트리거 되면, Amazon CloudWatch에 알림 전송

③.    알림은 CloudWatch Auto Scaling 정책을 실행하도록 트리거

④.    AutoScaling은 지정된 Auto Scaling 그룹을 스케일아웃하여 다른 인스턴스를 추가

 

3.5. 최소 용량 크기 결정 방법

 

Auto Scaling 그룹에서 다음을 정의

 ㅁ  원하는 용량

 ㅁ  최소 용량

 ㅁ  최대 용량

설정하기에 적절한 최소 용량은?

AZ별로 최소한 1개의 인스턴스로 시작해야 하는 경우, 최소 용량 크기는 AZ의 수로 설정

설정하기에 적절한 최대 용량은?

시나리오: 적절한 최대 용량은 애플리케이션과 예산에 따라 달라짐.

 ㅁ  Auto Scaling 그룹

    최소 = 2, 최대 = 12

 ㅁ  Auto Scaling 정책

    CPU 사용률이 60% 이상이면

    그룹의 100% 추가 = 용량을 두배로

 

3.6. Auto Scaling 단계별 시나리오

 

I.  기본 구성

II.  사용량 증가 시 1

III.  사용량 증가 시 2

IV. 사용량 증가 시 3

V. 사용량 회복

VI. 사용량 감소 1

VII.사용량 감소 2

VIII.사용량 안정

3.7. Auto Scaling 고려 사항

 

Auto Scaling 스레싱을 방지

 ㅁ  Scale in 할 때 좀더 주의를 기울이고 공격적인 인스턴스 종료는 피함

 ㅁ  미리 확장하고, 천천히 축소

 

최소 및 최대 용량 파라미터 값은 신중하게 설정

 

수명 주기 후크를 사용

 ㅁ  Auto Scaling이 인스턴스를 시작 또는 종료함에 따라 사용자 정의 작업을 수행

 

상태 저장 애플리케이션의 경우 Auto Scaling 그룹에서 시작되는 인스턴스에 대한 추가 자동 구성이 필요

Auto Scaling 수명 주기 후크에 대한 정보

 

 ㅁ  https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html

 

Amazon EC2 Auto Scaling lifecycle hooks - Amazon EC2 Auto Scaling

Amazon EC2 Auto Scaling lifecycle hooks Lifecycle hooks enable you to perform custom actions by pausing instances as an Auto Scaling group launches or terminates them. When an instance is paused, it remains in a wait state either until you complete the lif

docs.aws.amazon.com

 

Auto Scaling을 통한 아키텍처 개선

AS-IS

TO-BE

 

Amazon CloudWatch

 ㅁ  ELB /또는 인스턴스의 상태를 모니터링하고 적절하게 작업을 시작

 

Auto Scaling

 ㅁ  Amazon CloudWatch로부터 요청을 수신

 ㅁ  인스턴스를 추가 또는 삭제

 

4. EC2 자동 복구

 

Amazon EC2 자동 복구 기능을 사용해 손상된 Amazon EC2 인스턴스를 자동으로 교체

 

인스턴스 손상의 원인이 되는 조건 (CloudWatch에서 탐지)

 ㅁ  네트워크 연결성 손실

 ㅁ  시스템 전원 손실

 ㅁ  호스트의 소프트웨어/하드웨어 문제

 

교체 인스턴스

 ㅁ  동일한 인스턴스 ID/메타데이터, IP 주소 유지

 ㅁ  손상된 인스턴스의 인 메모리 데이터를 사용할 수 없음.

 

지원 인스턴스 유형

 ㅁ  C3, C4, C6, M3, M4, M%, R3, R4, T2 X1

 ㅁ  모든 AWS 리전에서 사용 가능

 ㅁ  인스턴스는 VPC에 있고 공유 테넌시 사용 필요

 ㅁ  인스턴스 스토리지는 사용할 수 없으며 EBS 지원 스토리지만 사용해야 함

 ㅁ  작업에서 동일한 인스턴스 메타 데이터 또는 스토리지 볼륨을 유지해야 하는 경우 Auto Scaling 대신 사용

 

5. 데이터 스토어 조정

 

5.1. Amazon RDS 규모 조정

 

Amazon RDS 조정을 통해 다음을 수행

크기 조정 가능한 인스턴스 유형으로 확장 또는 축소

 

클릭 몇 번 또는 API를 통해 스토리지 확장

 ㅁ  스탠다드에서 프로비저닝된 IOPS 스토리지로 쉽게 전환

 

읽기 트래픽을 읽기 전용 복제본으로 오프로드

 

성능 향상을 위해 다음과 같이 Amazon RDS 앞에 캐시를 배치

 ㅁ  Memcached 또는 Redis Amazon ElastiCache

 ㅁ  선호하는 Amazon EC2 기반 자체 관리형 캐시 솔루션

 

5.2. 데이터베이스 샤딩으로 Amazon RDS 쓰기 조정

 

                             

샤딩이 없으면 모든 데이터가 하나의 파티션에 상주

 ㅁ  : 사용자를 성에 따라 A에서 Z까지 하나의 데이터베이스에 구성

 

샤딩은 데이터를 큰 청크(샤드)로 분할

 ㅁ  : 사용자를 성에 따라 A에서 M까지 하나의 데이터 베이스에, N에서 Z까지 다른 데이터베이스 구성

 

대부분의 경우에 샤딩은 뛰어난 성능과 높은 운영 효율성을 제공함

 

클라우드 설계 패턴: 샤딩 쓰기 패턴

 ㅁ  http://en.clouddesignpattern.org/index.php/CDP:Sharding_Write_Pattern

 

CDP:Sharding Write Pattern - AWS-CloudDesignPattern

From AWS-CloudDesignPattern Improving Efficiency in Writing Problem to Be Solved It is extremely important to increase the speed of writing to a relational database management system (RDBMS), but is a very difficult problem. Of course, you can use multiple

en.clouddesignpattern.org

5.3. 읽기 전용 복제본으로 수평적 조정: Amazon RDS

 

읽기 전용 복제본 추가

 ㅁ  읽기 중심의 워크로드 처리를 위해 수평적으로 확장

 ㅁ  보고서 오프로드

 

주의점

 ㅁ  복제는 비동기식

 ㅁ  현재 Amazon Aurora, MySQL, MariaDB PostgreSQL(9.3.5 이상)에서 사용 가능

 

5.4. Amazon RDS 조정: 버튼 클릭으로 조정

 

노드를 수직적으로 확장 또는 축소

 ㅁ  마이크로에서 8xlarge까지 그리고 그 사이의 모든 크기 지원

 

읽기 전용 복제본으로 수평적 조정

 ㅁ  읽기가 많은 워크로드

 

중단 시간 없이 수직으로 확장

 

Amazon RDS API 또는 AWS Management Console을 통해 조정 가능

 

RDS PIOPS 사용 시 IOPS 속도를 1,000 IOPS 단위로 30,000 IOPS까지 조정 가능

 

스토리지 100GB에서 6TB까지 지정하여 DB 인스턴스 처리량 확장 가능 (SQL Server 제외)

DB 인스턴스 변경 방법

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html#USER_ModifyInstance.Settings

 

Amazon RDS DB 인스턴스 수정 - Amazon Relational Database Service

일부 수정 사항을 적용하려면 Amazon RDS가 DB 인스턴스를 재부팅해야 하므로 인스턴스가 잠시 중단될 수도 있습니다. DB 인스턴스 설정을 수정하기 전에 데이터베이스 및 애플리케이션에 미치는

docs.aws.amazon.com

5.5 Dynamic DynamoDB용 Auto Scaling

                             

테이블 및 글로벌 보조 색인을 위해 용량 관리 자동화

원하는 대상 활용률을 지정하고 읽기 및 쓰기 용량에 대한 상한 및 하한 제공

DynamoDB Amazon CloudWatch 경보를 사용하여 처리량 소비를 모니터링

모든 새 테이블 및 색인에 대한 기본값 정의

중단 시간 없이 자동으로 읽기 및 쓰기 처리 용량 조정

DynamoDB Auto Scaling을 사용할 때 원하는 처리량 활용률 목표, 최소 및 최대 제한만 설정하면 나머지는 Auto Scaling이 알아서 처리

 

6. AWS LAmbda

 

이벤트 또는 시간 기반 간격에 대한 응답으로 상태 비저장 코드(Node.js, Java, Python C#)를 실행하는 완전 관리형 컴퓨팅 서비스

Amazon EC2 인스턴스 및 Auto Scaling 그룹과 같은 인프라를 관리하지 않고도 코드를 실행할 수 있음

 

6.1. AWS LAmbda가 처리하는 작업

 

서버

용량 요구

배포

조정 및 내결함성

OS 또는 언어 업데이트

지표 및 로깅

 

6.2. AWS Lambda를 사용하면 할 수 있는 작업

 

자체 코드 사용 가능(네이티브 라이브러리 포함)

코드를 병렬로 실행

백엔드, 이벤트 핸들러 및 데이터 처리 시스템 생성

유휴 리소스에 대해 비용을 지불할 필요가 없음

 

6.3. AWS Lambda 기본 조정 방법

 

                             

조정 이벤트가 AWS Lambda 함수를 트리거 할 수 있음

 

AWS Lambda에서 실행되는 코드는 AWS API에 액세스 할 수 있고, AWS IAM 역할을 통해 권한 부여

 

Lambda 함수를 사용하면 조정 발생 시, 다른 AWS 서비스에 대한 API 호출을 자동으로 수행 가능

 

조정 관련 작업 예

 ㅁ  컨테이너 기반 인스턴스 조정(Docker, Amazon Elastic Container Service )

 ㅁ  함수를 사용해 더욱 지능적으로 조정(: 단지 이벤트가 아니라 패턴을 차도록 성능 데이터 스트림 분석)

 ㅁ  AWS Lambda는 자동으로 조정할 수 있으므로, 적합한 경우 일부 Amazon EC2 인스턴스를 Lambda 함수로 대체하는 것을 고려