JINWOO.log
로그인
JINWOO.log
로그인
High Availability & Scalability
JINWOO OH
·
2023년 7월 19일
팔로우
0
SAA_study
aws
SAA
목록 보기
6/19
Scalability
scale을 조절함으로써 더 많은 양을 처리 할 수 있게 해줌
수직적 스케일 (Vertical Scalability)
수평적 스케일 (Horizontal Scalability = elasticity)
Vertical Scalability
인스턴스의 크기를 확장하는 것을 의미
데이터베이스와 같이 분산되지 않은 시스템에서 사용
RDS, ElastiCache
Horizontal Scalability
인스턴스나 시스템의 수를 늘려줌
High Availability
애플리케이션 또는 시스템을 적어도 둘 이상의 AWS의 AZ나 데이터 센터에서 가동 중인 것을 말한다 (Scalability와 다른 개념)
고가용성의 목표는 하나의 센터가 멈춰도 시스템이 아무 문제 없이 작동되게 하는 것
HA & Scalability For EC2
Vertical Scaling
: scale up / down
Horizontal Scaling
: scale out (인스턴스 수 증가) / in (인스턴스 수 감소)
Auto Scaling Group
Load Balancer
HA
: 같은 애플리케이션을 다중 AZ에 구성
Auto Scaling Group multi AZ
Load Balancer multi AZ
What in load balancing?
트래픽은 다중화된 서버들로 보내줌
부하 분산의 기능 (부하를 다수의 다운스트림 인스턴스로 분산을 위함)
유저들은 어떤 인스턴스에 연결 되었는지는 모른다 (애플리케이션에 단일 액세스 지점 (DNS)를 노출)
로드밸런서의 health check 기능으로 어떤 인스턴스의 오류인지 검출 가능
SSL 가능
쿠키와 HA
클라우드 내의 개인 트래픽과 공공 트래픽의 분리 가능
Elastic Load Balancer
관리형 로드 밸런서
AWS가 HA를 유지하도록 관리
가능한 사용하는 것이 좋다
다수의 서비스들과 통합되어 있다
Health Checks
작동이 올바르게 되고 있는지 확인
상태확인은 포트와 라우트에서 이루어진다 (/heath 경로가 일반적)
200 (OK)응답이 안온다면 health check는 실패
실패하게 되면 실패한 인스턴스로는 트래픽을 보내지 않음
Types of load balancer on AWS
Classic Load Balancer (2009)
HTTP, HTTPS, TCP, SSL
Application Load Balancer (2016)
HTTP, HTTPS, WebSocket
Network Load Balancer (2017)
TCP, TLS, UDP
초고성능을 위할 때, 지연 시간을 최소로 유지하면서 초당 수백만 건의 요청을 처리
Gateway Load Balancer (2020)
3계층인 네트워크 레이어 (IP protocol)
보안, 침입 탐지, 방화벽 등에 특화
Load Balancer Security Groups
EC2 인스턴스의 보안 규칙은 로드 밸런서의 보안 규칙과 연결할 수도 있다
인스턴스의 IP로는 직접적인 연결은 불가능하지만 로드 밸런서를 통해서는 접근이 가능하다
네트워크 트래픽을 분석하기 위한 로드 밸런서
강화된 보안 메커니즘
Application Load Balancer
애플리케이션 계층인 7 계층, HTTP 전용 로드 밸런서
URL 경로, 호스트 이름, HTTP 헤드 및 쿼리 문자열을 기반으로 트래픽을 다른 대상 그룹으로 라우팅 할 수 있다
머신 간 다수 HTTP 애플리케이션의 라우팅에 사용
머신들은 대상 그룹으로 묶인다
부하를 분산
컨테이너와 ECS를 사용
라다이렉트도 설정 가능
URL기반의 라우팅 가능
마이크로 서비스나 컨테이너 기반 애플리케이션에 가장 좋은 로드 밸런서 (Docker, ECS)
포트 매핑 기능이 존재 (독립된 타겟 그룹을 처리 할 수 있음)
뒷단의 EC2가 요청한 사용자의 IP를 알기 위해서는 HTTP 요청에 있는 추가 헤더인 X-Forwarded-For을 확인 해야 한다
X-Forwarded-Port(포트를 확인)와 X-Forwarded-Proto
ALB Target Groups
EC2 인스턴스 : HTTP
ECS : HTTP
Lambda functions
IP Addresses
Network Load Balancer
HTTP를 다루는 Layer 7보다 낮은 Layer 4 계층 (전송 계층)으로, TCP, UDP 트래픽을 다룬다
초당 수백만 건의 요청을 처리 할 수 있고 지연시간도 짧다
AZ별로 하나의 고정 IP를 가진다
탄력적 IP주소를 각 AZ 에 할당 가능하다 (정적 IP를 가진다)
여러 개의 고정IP를 가진 애플리케이션을 노출 할 때 편리하다
NLB는 로드 밸런서의 보안 그룹을 정의하지 않고 곧장 타겟 그룹으로 트래픽을 보내며, 타켓 그룹의 보안 그룹이 트래픽을 허용할지 말지를 결정한다
NLB Target Groups
EC2 인스턴스
TCP, UDP 트래픽을 EC2 인스턴스로 리다이렉트할 수 있따
IP Addresses
반드시 사설 주소여야 한다
ALB
ALB 앞단에 NLB를 둘 수 있다
NLB로 고정 IP를 얻을 수 있고, ALB를 통해 HTTP 유형의 트래픽을 처리할 수 있따
Health check로는 3가지 프로토콜을 지원한다
TCP, HTTP, HTTPS
Gateway Load Balancer - GWLB
NLB보다 낮은 Layer 3인 네트워크 계층에서 실행된다 (IP 패킷)
6081번 포트의 GENEVE 프로토콜을 사용한다
배포 및 확장과 AWS의 타사 네트워크 가상 어플라이언스의 플릿 관리에 사용
네트워크의 모든 트래픽이 방화벽을 통과하게 하거나 침입 탐지 및 방지 기능 등 네트워크 수준에서 사용
네트워크 트래픽을 분석해서 올바르지 않다면 트래픽을 드롭한다
GWLB의 2가지 기능
Transparent Network Gateway
트래픽의 단일 엔트리와 출구를 통과
Load Balancer
대상 그룹의 가상 어플라이언스 집합에 전반적으로 그 트래픽을 분산해 로드 밸런서가 된다
GWLB Target Groups
EC2 instances
IP Addresses
Elastic Load Balancer - Sticky Seesions (Session Affinity)
2가지 요청을 수행하는 클라이언트가 요청에 응답하기 위해
백엔드에 동일한 인스턴스를 갖는 것
CLB와 ALB에서 설정이 가능하다
쿠키로 인해 이런 기능을 이용할 수 있는데 쿠키가 만료되면 클라이언트가 다른 EC2 인스턴스로 리다이렉션 된다
세션 만료시에는 사용자의 로그인과 같은 중요한 정보를 취하는 세션 데이터를 잃지 않기 위해 사용자가 동일한 인스턴스에 연결된다
고정성을 활성화 하면 백엔드 EC2 인스턴스 부하에 불균형을 초래할 수 있다
설정 방법은 Target groups > Actions > Edit attributes > Stickiness를 통해 설정 가능하다
Sticky Seesions - Cookie
Application-based Cookies
대상으로 생성된 사용자의 정의 쿠키로 애플리케이션에서 생성
애플리케이션에 필요한 모든 사용자 정의 속성을 포함할 수 있다
쿠키 이름은 각 대상 그룹별로 개별적으로 지정해야 한다
Duration-based Cookies (기간 기반 쿠키)
로드 밸런서에서 생성되는 쿠키
특정 기간을 기반으로 만료
Elastic Load Balancer - Cross Zone Load Balancing
두개의 AZ에 인스턴스가 불균형하게 존재 해도 트래픽을 모두 균일하게 할당하는 것
트래픽을 고르개 분배할 수 있다
Attributes에서 설정할 수 있다
Cross-zone Load Balancing
Application Load Balancer
ALB는 default로 교차 영역 로드 밸런싱이 활성화 되어 있다
다른 AZ 로 데이터를 옮길 때 비용이 들지 않는다
Network Load Balancer
ALB와 달리 교차 영역 로드 밸런싱이 활성화 되어 있지 않다
활성화 하려면 비용이 든다
Classic Load Balancer
NLB와 마찬가지로 비활성화가 기본이다
SSL/TLS - Basics
X.509 인증서로도 불림
AWS에서는 이런 인증서들을 관리 할 수 있는 ACM이라는 서비스가 존재
SSL 인증서는 클라이언트와 로드 밸런서 사이에서 트래픽이 이동하는 동안 암호화 (in-flight 암호화)
SSL은 Secure Sockets Layer이며, 연결을 암호화하는데 사용한다
TLS는 Transport Layer Security이다
퍼블릭 인증서는 인증기관(CA)에서 발급
퍼블릭 SSL 인증서를 로드 밸런서에 추가하면, 클라이언트와 로드 밸런서 사이의 연결을 암호화 할 수 있다
SSL인증서는 만료 기간이 존재한다
Load Balancer - SSL Certificates
사용자가 HTTPS를 이용해 접속
Load Balancer가 SSL Termination을 수행
백엔드에서는 HTTP로 통신
VPC로 이동하는 트래픽은 프라이빗 네트워크를 사용하기 때문에 안전하게 보호
클라이언트는 SNI (Server Name Indication)을 통해 접속할 호스트의 이름을 알릴 수 있다
SNI - Server Name Indication
여러개의 SSL 인증서를 하나의 웹 서버에 로드해 하나의 웹 서버가 여러 개의 웹 사이트 지원을 할 수 있게 해준다
클라이언트가 대상 서버의 호스트 이름을 지정하도록 한다 (최초 SSL handshake 단계)
로드 밸런서에게 요청하는 과정도 서버 이름 지정 과정이다
클라이언트가 접속할 웹사이트를 말했을 때, 서버는 어떤 인증서를 로드해야 하는지 알 수 있다
ALB, NLB, CloudFront에서만 동작한다
어떤 로드 밸런서에 SSL 인증서가 여러 개 있다면 ALB나 NLB 둘 중 하나 (Listener에서 추가 가능)
Connection Draining
Connection Draing - for CLB
Deregistration Delay - for ALB & NLB
인스턴스가 등록 취소, 혹은 비정상인 상태에 있을 때 인스턴스에 어느 정도의 시간을 주어 인-플라이트 요청, 즉 활성 요청을 완료할 수 있도록 하는 기능
연결 드레인이 되면 로드 밸런서는 등록 취소 중인 EC2 인스턴스로 새로운 요청을 보내지 않는다
값이 0이면 드레인은 일어나지 않는다
짧은 요청의 경우 낮은 값으로 설정하는 것이 좋다
Auto Scaling Group
웹 사이트나 애플리케이션의 트래픽이 증가하면서 API를 통해 스케일을 자동화 할 수 있다
scale out / in
로드 밸런서와 페어링 하는 경우 ASG에 속한 모든 EC2 인스턴스가 로드 밸런서와 연결된다
로드 밸런서는 EC2 인스턴스의 health check결과를 ASG로 전달 할 수 있다
Activity history에서 변경 사항 등 기록을 확인 할 수 있다
Auto Scaling Group in AWs
Minimum Capacity - 최소 용량
Desired Capacity - 희망 용량
Maximum Capacity - 최대 용량
최대 용량 내에서 희망 용량을 더 높은 숫자로 설정하면 scale out
Auto Scaling - CloudWatch Alarms & Scaling
CloudWatch 경보를 기반(메트릭 정보)으로 ASG를 scale out / in 할 수 있다
Auto Scaling Groups - Dynamic Scaling Policies
Target Tracking Scaling
모든 EC2 인스턴스에서 ASG의 평균 CPU 사용률을 추적해서 수치가 40% 에 머무르도록 설정
Simple / Stop Scaling
CloudWatch 알람을 기반으로 설정
한번에 추가할 유닛과 삭제할 유닛을 단계별로 설정해야함
Scheduled Actions
나와 있는 사용 패턴을 바탕으로 스케일링을 예상
Auto Scaling Groups - Predictive Scaling (예측 스케일링)
지속적으로 예측을 사용
시간에 걸쳐 과거 로드를 분석하고 예측을 생성한다
해당 예측을 기반으로 사전에 스케일링 작업이 예약된다
Good metrics to scale on
CPU Utilization
RequestCountPerTarget (대상 별 요청 개수 지표)
Average Network In / Out (평균 네트워크 입출력량)
Auto Scaling Groups - Scaling Cooldowns
스케일링 작업이 끝날 때마다 인스턴스의 추가 삭제를 막론하고 5분 혹은 300초의 휴지 기간을 가진다
휴지 기간에는 인스턴스의 추가 또는 삭제를 할 수 없다
새로운 인스턴스가 안정화 기간을 가질 수 있다
인스턴스 구성 시간을 줄여 즉시 적용이 가능하게 하는 것도 좋은 방법이다 (활성화 시간을 단축하는 결과)
JINWOO OH
팔로우
이전 포스트
EC2 Instance Storage
다음 포스트
RDS + Aurora + ElastiCache
1개의 댓글
댓글 작성
happy
2023년 7월 19일
많은 도움이 되었습니다, 감사합니다.
답글 달기
많은 도움이 되었습니다, 감사합니다.