본문 바로가기
클라우드 서비스

[클라우드 서비스] Elasticity & HA _ 20241205

by 황오독 2024. 12. 8.
더보기

* 실습 내용

# 5. 부하 분산 및 자동 조정

- Application Load Balancer 생성

- 시작 템플릿 구성

- Auto Scaling 그룹 생성

- 작동 테스트 

 

* 클라우드 서비스 수요 예측의 어려움

https://www.researchgate.net/figure/The-cases-of-over-provisioning-under-provisioning-and-delay-caused-by-under-provisioning_fig5_283948945

- Over-provisioning : 불필요한 리소스(비용) 낭비

- Under0provisioning : 고객 신뢰도, 만족도 혹은 매출 저하

- Delayed allocation : 수요 변화에 따른 신속한 대응이 어려움

 

* 탄력성 확보

https://www.coveros.com/category/blogs/page/43/

- 수요에 따른 용량 요구사항 변화를 즉시 반영하기 위해 자동으로 컴퓨팅 리소스(ex.인스턴스 개수)를 확장 및 축소하여 대응할 수 있는 탄력성 확보가 반드시 필요하다.

 

1. Amazon EC2 Auto Scaling

- 애플리케이션이 변화하는 트래픽 요구를 처리할 수 있는 적정 용량을 갖추도록 지원한다. (가용성 향상)

- 여러 개의 가용 영역을 사용하도록 Auto Scaling을 구성할 경우, 하나의 가용 영역이 사용 불가 상태가 되면 다른 가용 영역에서 새 인스턴스를 시작하여 이에 대처할 수 있다. (내결함성 향상)

- 수요 변화에 따라 용량을 동적으로 조정하므로 사용한 EC2 인스턴스에 대해서만 비용을 지불할 수 있다. (비용 최적화)

 

출처 : AWS

 

(1) Auto Scaling 구성요소

시작 템플릿 - 그룹에서 생성할 인스턴스 구성 정보를 지정하기 위해 활용
- AMI, 인스턴스 유형, 키 페어, 네트워크, 보안 그룹, 사용자 데이터, IAM Role, EBS 볼륨 매핑 등으 ㅣ정보를 지정할 수 있음
ASG 그룹 - 그룹을 생성할 때 EC 인스턴스의 최소 및 최대 인스턴스 수와 원하는 인스턴스 수를 지정
조정 정책 - ex. 지정한 조건의 발생(동적 확장) 또는 일정에 따라 조정하도록 그룹을 구성할 수 있음.

 

① 시작 템플릿

- 자동 확장 과정에서 동일한 구성의 가상머신을 생성하기 위해 인스턴스 구성 정보를 사전 정의하여 템플릿화

- 인스턴스 이미지, 인스턴스 유형, 네트워크 정보, 스토리지(블록 디바이스 매핑), 사용자 데이터(쉘 스크립트), 보안그룹, I AM Role 등

 

② Auto scaling 그룹

출처 : AWS

- Auto scaling 그룹의 크기는 서비스 특성을 고려하여 사용자가 설정할 수 있다.

- 원하는 용량에 맞게 인스턴스 수를 유지하고 지정한 최대, 최소 개수 내에서 자동 확장과 축소를 진행한다.

- 조정 정책을 사용하여 그룹의 인스턴스 수를 동적으로 늘리거나 줄일 수 있다.

- 인스턴스에 대한 주기적인 상태 확인을 수행하여 비정상 상태가 되면 그룹에서는 비정산 인스턴스를 종료하고 이를 대체할 다른 인스턴스를 자동으로 시작한다.

 

③ 조정 정책

Dynamic Scaling Scheduled Scaling Predictive Scaling
- 조건 변화에 따라 동적으로 조정이 필요할 경우에 유용
- ex.임계값을 초과한 경우 정해진 CPU 사용률을 유지하기 위한 조정 실행
- 예측 가능한 워크로드인 경우 일정(시간/날짜)에 따라 조정하고자 할 경우
- ex. 퇴근시간 후 개발 및 테스트 인스턴스 종료
- AI 기반의 조정 방식으로 규칙을 수동으로 조정할 필요가 없음
- ex. 트래픽 패턴을 분석하여 인스턴스 수를 사전에 늘리고 줄임

 

2. Elastic Load Balancer

https://cloud.in28minutes.com/aws-certification-elastic-load-balancers-elb

- 수신되는 애플리케이션 트래픽을 여러 EC2 인스턴스, 컨테이너 등으로 분산하는 관리형 로드밸런싱 서비스

- 한 리전 내 단일 가용 영역 또는 여러 가용 영역에서 애플리케이션 트래픽에 대한 부하 분산을 처리

- 가용 영역 하나가 사용할 수 없는 상태가 되거나 정상 상태의 인스턴스를 가지고 있지 않은 경우 로드밸런서는 다른 가용 영역에 있는 정상 상태의 인스턴스로 트래픽을 라우팅

 

(1) ELB 아키텍처

https://dev.classmethod.jp/articles/mistakes-that-you-make-often-when-you-create-alb/

- 용도에 따라 외부(인터넷 경계) 또는 내부 로드밸런스를 활용할 수 있다.

- 인터넷 경계 로드밸런서는 Public IP를 갖게 되며 DNS 와 연동되어 변환된다.

- VPC 내부 트래픽의 부하분산을 위한 내부 로드밸런서의 노드는 프라이빗 IP 주소만 가지며 내부 DNS와 연동된다.

- 인터넷 경계 및 내부 로드 밸런서는 모두 프라이빗 IP 주소를 사용하여 대상으로 요청을 라우팅하므로 대상이 퍼블릭 IP 주소 없이도 로드밸런서에서 요청을 수신할 수 있다.

 

(2) ELB 특징

- 초당 수백만 개의 요청을 로드밸런싱할 수 잇으며 고가용성 구성, 자동 확장/축소, 강력한 보안성을 갖추고 있다.

- HTTP, HTTPS, TCP, UDP 및 SSL(보안 TCP, UDP) 프로토콜을 사용한다.

- AWS 외부에서 유입되는 트래픽 혹은 내부 트래픽 부하분산을 위한 다양한 로드밸런서(L7/L4) 유형을 지원한다.

- 백엔드 인스턴스에 대한 상태 확인(Health Check)를 통해 실시간으로 애플리케이션 상태 및 성능을 모니터링하고 병목 현상을 파악한다.

 

① ELB 내부 작동방식

- 리스너는 로드밸런싱 규칙을 정의하는 구성요소
- 프로토콜과 포트를 기반으로 연결요청을 확인하고 정의한 규칙에 따라 등록된 대상 그룹(Target group)으로 요청을 라우팅
- 대상 그룹에 등록된 대상에 상태 확인(Health Check)을 수행하여 정상 상태로 판정된 경우에만 트래픽을 라우팅

 

② 상태 확인(Health Check)

- 주기적인 Health Check를 통해 대상이 정상 상태로 판정되어야 요청을 라우팅한다.

프로토콜 상태 확인을 위해 사용하는 프로토콜 포트 대상에서 상태 확인을 할 때 사용하는 포트
정상 임계값
(Healthy threshold)
정상 간주를 위한 연속적인 상태확인 성공횟수 비정상 임계값
(Unhealthy threshold)
비정상적으로 간주하기 위해 필요한 연속적인 상태확인 실패 횟수
제한시간(Timeout) 대상으로부터 응답 대기 기간 간격(Interval) 상태확인 간의 간격
성공코드(Success Codes) 대상으로부터 성공응답을 체크하는 HTTP code    

 

③ 오프로딩

- HTTPS를 통한 사용자 요청이 EC2 인스턴스로 직접 전달되게 되면 개별 EC2 인스턴스에서 TLS 암호화를 복호화하는데 많은 컴퓨팅 리소스가 필요하다.

- 이를 해결하기 위해 Application Load Balancer에서 HTTPS 연결을 종료할 수 있는데, 이를 위해 SSL 인증서를 로드밸런서에 설치한다.

- 로드밸런서는 이 인증서를 사용하여 SSL 연결을 종료한 후, 클라이언트의 요청을 복호화하여 HTTP 연결로 요청을 대상으로 전송한다.

 

③ 고정 세션 (Sticky sessions)

- 동일한 클라이언트에서 들어오는 요청을 동일한 대상으로 라웉이하는 메커니즘(=Session affinity)

- 쿠키를 활용하여 사용자가 한번 접속한 적 있는 서버를 기억해두고 사용자가 다시 접속하더라도 기존 커넥션이 있었던 서버로 연결해주는 기능이다.

- 사용자 요청에 EC2가 응답을 보낼때 ALB가 응답 헤더에 쿠키를 포함시켜 전달한다.
- 이후 사용자가 재 요청시 해당 쿠키를 동봉하여 전달하면 ALB는 커넥션이 생성되었던 EC2에 연결한다.

 

④ 등록취소 지연

- Deregistration delay == Connection Draining
- 인스턴스 등록 취소 시 인스턴스에 어느 정도의 시간을 주어 현재 진행중인 요청 처리를 완료할 수 있도록 하는 기능
- 인스턴스가 Draining 되면 ELB는 등록 취소 중인 인스턴스로는 새로운 요청을 보내지 않는다.
- 등록 취소 프로세스를 완료하기 전에 300초(기본값) 동안 대기
- ex. 주문 취소, 구독 취소 등

 

(3) ELB 유형

https://www.nclouds.com/blog/what-type-of-aws-elastic-load-balancing-aws-elb-is-right-for-you/

① Application Load Balancer

- HTTP, HTTPS 트래픽을 활용하는 애플리케이션을 위한 L7 계층 로드밸런서

- 컨텐츠 기반, 가중치 기반 로드밸런싱 등 고급 부하 분산 기능 지원

- 클라이언트가 IPv4 또는 IPv6을 통해 ALB에 연결할 수 있다.

- 고정 IP 설정이 불가, 보안 그룹 설정 지원은 가능하다.

 

* 컨텐츠 기반 라우팅

- ALB는 컨텐츠 기반 라우팅(Content-based Routing)을 지원

- 리스너에서 정의한 규칙에 따라 대상으로 요청을 라우팅하는 방법 결정

https://jayendrapatil.com/aws-elb-application-load-balancer/
- 요청 URL의 경로 패턴 기반 라우팅 (path-pattern, 경로 정보를 기반으로)
- 호스트 이름 기반 라우팅(도메인 네임별)
- HTTP 요청 메소드 기반
(http-requests-method, GET/POST/PUT/DELETE)
- HTTP 헤더 기반 (헤더 내 정보 기반의 규칙)
- 요청의 소스 IP 기반 라우팅 등

 

* 가중치 기반 라우팅

- ALB는 가중치 기반 라우팅 (Weighted Routing)을 지원

- 리스너 규칙의 전달 작업에 둘 이상의 대상 그룹을 추가하고 각 그룹에 가중치를 지정

- 가중치 8과 2가 지정된 두 개의 대상 그룹을 포함하는 규칙을 정의하면, 로드 밸런스가 트래픽의 80%를 첫 번째 대상 그룹으로, 20%를 두 번째 대상 그룹으로 라우팅
- 새 앱 버전에 대한 블루-그린 배포(Blue-Green Deployment) 시에도 활용할 수 있다.
- Blue가 구버전, Green이 신버전으로 각각 가중치를 80%, 20%를 준다.
- Green 사용자의 반응이 좋으면 Green으로 가중치를 100%으로 수정하고,
- 반응이 좋지 않으면 다시 가중치를 Blue에 100% 둘 수 있다.

 

② Network Load Balancer

- L4 즉, TCP와 UDP를 사용하는 요청에 대한 부하분산 목적의 로드밸런서

- 매우 짧은 대기 시간을 유지하면서 대규모 트래픽 처리에 적합

- 소스 IP/Port, 대상 IP/Port 정보를 활용한 로드밸런싱

- IPv4만 지원, 고정 IP 혹은 탄력적 IP 설정 지원

 

③ Gateway Load Balancer

https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/getting-started.html

- 방화벽(트래픽 분석 및 차단), 패킷 검사, 침입 탐지 시스템 등과 같은 가상 보안 어플라이선스에 트래픽을 전달하고 관리하기 위한 서비스

- 가상 어플라이언스는 게이트웨이 로드밸런서의 대상 그룹으로 등록되며 수요에 따라 가상 어플라이언스를 자동 확장하면서 트래픽을 분산한다.

 

 

** 리전간 부하분산

- ELB는 단일 리전 내 부하분산을 위한 서비스인데, 전역적인 리전간 부하분산은 어떻게 구현해야 할까?

 

3. Route53

- 높은 가용성과 확장성이 뛰어난 클라우드 DNS(Domain Name System) 서비스

- 전 세계 DNS 서버의 글로벌 애니캐스트 네트워크를 사용하여 최적의 위치로 사용자 요청을 자동으로 라우팅한다.

- 전역적으로 유연한 고가용성 아키텍처를 지원하고 다양한 라우팅 유형을 통해 트래픽을 관리할 수 있다.

- 사용자 요청을 여러 리전에 있는 EC2 인스턴스, ELB, S3 버킷 등에 효과적으로 연결한다.

https://medium.com/@randika/high-availability-with-route53-dns-failover-c13cb30cbe94

 

(1) 라우팅 정책

정책 내용
단순 라우팅
(Simple Routing)
- 하나의 리소스(ex.특정 웹서버)로 트래픽을 라우팅하고자 할 경우 활용
가중치 기반 라우팅
(Weighted Routing)
- 할당된 다른 가중치 기반으로 트래픽을 분할
- 블루-그린 배포 등에 활용할 수 있음
지리 위치 라우팅
(Geolocation Routing)
- DNS 쿼리가 발생한 지리적 위치 기반으로 지원할 리소스를 선택
- ex. 콘텐츠를 현지화하고 웹 사이트를 사용자의 언어로 표시
지연 시간 기반 라우팅
(Latency based Routing)
- 물리적 거리가 아닌 지연시간 기반으로 라우팅
- 여러 리전의 실제 성능 측정치를 기준으로 가장 빠른 환경을 제공하는 리전으로 라우팅
- 독일에서 발생하는 트래픽이 지리적으로 따지면 서울보다 영국이지만, 지연 기반 시간이 서울이 더 짧으면 서울로 라우팅할 수 있다.
장애 조치 라우팅
(Fail-over Routing)
- 주로 재해 복구에 사용되는 'Active-Standby' 장애 조치 개념
- 웹 사이트의 가동 중단을 탐지하고 사용자를 애플리케이션이 제대로 작동하는 대체 위치로 리디렉션
지리 근접 라우팅
(Geoproximity Routing)
- 리소스 기준으로 트래픽을 처리할 지리적 크기(Bias)를 지정
- 지정된 Bias 내에서 발생한 사용자 요청을 처리 (Bias는 변경 가능)
- 만약 A에 대한 Bias를 10%로 줄이면, 다른 영역에 대한 Bias를 10% 늘려야 함

 

(2) DR 체계 구현

출처 : AWS

* 왼쪽으로 갈 수록 느린 복구 속도, 낮은 비용 / 오른쪽으로 갈 수록 빠른 복구 속도, 높은 비용

① Pilot Light

- 클라우드에 온프레미스와 동일한 환경을 구성해놓지만 평상 시 중지 상태로 유지

- DB의 데이터는 자동 복제가 되도록 구성

- 장애 발생시 리소스를 실행시키고 요청 트래픽을 클라우드로 전환하여 서비스

- 상대적으로 저렴한 DR 체계이지만, 대응하는데 시간은 오래 걸린다.

 

② Warm Standby

- 온프레미스의 리소스보다 작은 최소 용량의 리소스만 클라우드상에서 실행되도록 구성

- 장애 발생 시 오토 스케일링 그룹을 통해 온프레미스 리소스 개수만큼 클라우드 리소스를 즉시 자동 확장하고 요청 트래픽을 클라우드로 전환하여 서비스

- Pilot Light 보다 더 빠른 대응이 가능하나 비용은 더 발생한다.

 

③ Multi-site active/active

- 온프레미스 시스템과 동일한 수준의 서비스 체계를 클라우드 상에 구축하고 평상 시 요청 트래픽을 50%:50%으로 서비스

- 장애 발생 시 가중치 기반 라우팅을 통해 클라우드로 요청 트래픽이 100% 전달되도록 구성

- 즉각적이고 안정적인 장애조치가 가능하지만 비용이 가장 많이 발생한다.