본문 바로가기

자격증/SAA

[SAA] Load Balancer

확장성

  • 시스템이 부하에 맞춰 적절히 조절됨 (확장 혹은 축소)
  • 수평적 확장: 인스턴스의 개수를 확장. 탄력적
  • 수직적 확장: 인스턴스의 성능을 확장. 간단함

가용성

  • 서비스를 오래 유지해서 운영하는 것
  • 서비스 가용시간과 밀접한 관계

고가용성

  • 일반적으로 수평적 확장과 밀접한 연관
  • 애플리케이션이 2개 이상의 데이터 센터 또는 가용영역에서 운영되는 것을 의미

서비스 별 고가용성

  • EC2
    • 성능을 높여서 수직적 확장
    • Auto Scaling group을 멀티 AZ로 적용하여 수평적 확장 (로드 밸런서가 멀티 AZ)
  • RDS
    • 이중화로 멀티 AZ 지원

로드 밸런서

  • 서버에 트래픽 분산
  • 공개된 접근 포인트를 노출
  • 장애, 부하 핸들링
  • 헬스 체크
  • 고가용성
  • pubilc 트래픽을 private으로 분할하는 역할 (라우터처럼)

헬스 체크

  • 인스턴스가 요청을 받을 수 있는 상태인지 확인
  • 포트 번호 + 루트로 구성 (domain.com:[port]/[root])
  • HTTP 상태 코드를 기준으로 판단 (ex. 201 created를 반환하면 일반적으로 정상값이지만, 헬스 체크를 200 ok로 받으면 201도 실패라고 판단)

Elastic Load Balancer

  • AWS에서 제공하는 관리형 로드 밸런서
  • 유연성은 떨어지지만 가격과 관리 효율이 좋다.
  • Security Group을 기반으로 요청 허용 여부 핸들링

Classic Load Balancer

  • deprecated
  • TCP, HTTP, HTTPS 지원 (4, 7 계층)
  • 고정된 호스트 이름

Application Load Balancer

  • HTTP, HTTPS, Web Socket 지원 (7계층)
  • 여러 머신(Target group)에 대해 부하를 분산시킴
  • 한개 머신의 여러 인스턴스에 부하를 분산시킴 (컨테이너 등에 사용, 1개의 노드 내의 n개의 파드)
  • HTTP/2, Web socket 지원
  • 리다이렉트 지원
  • 호스트 명 고정
  • 타겟 그룹 IP는 외부 공개 X
  • IP 대신 호스트 기준이라 유연함
  • 인스턴스는 헤더의 X-Forwarded-[]를 사용하여 클라이언트(ALB)의 IP, 포트를 알 수 있다.

ALB 라우팅

  • CLB와 다르게 ALB는 로드 밸런싱 + 라우팅 기능을 제공
  • 타겟 그룹은 라우팅 테이블 별로 구성
  • 타겟 그룹들은 url 기반, host명 기반, 쿼리 스트링 / 헤더 기반으로 라우팅 구분 가능

ALB - Target Group

  • EC2 인스턴스 - HTTP 기반 타겟 그룹
  • EC2 태스크
  • 람다 함수
  • IP 주소 (private)
  • 하나의 ALB가 여러 타겟 그룹과 엮일 수 있다. (라우팅)
  • 헬스 체크는 타겟 그룹 단위로 진행 (타겟 그룹 내부의 하나 인스턴스에 대해 체크)

ALB 사용

  • Container 기반 애플리케이션
  • 마이크로 서비스
  • ECS의 다이나믹 포트에 대응하기 위해 포트 매핑 지원 (포트포워딩)
  • 1 ALB per 1 인스턴스가 필요 없음 (그룹을 통해)
  • 즉, 하나의 ALB가 있으면 알맞게 요청을 흘려 보냄

Network Load Balancer

  • TCP, TLS, UDP 지원 (4계층)
  • ALB보다 빠른 지연시간 (layer가 낮으므로. C가 python보다 빠른 것과 같다)
  • 고성능 워크로드를 설계할 때 사용함. (게임을 C로 짜는 것처럼)
  • 프리 티어로는 사용 불가
  • target group과 TCP 또는 HTTP로 통신
  • 클라이언트와는 TCP 기반으로 통신
  • 여러 개의 target troup과 상호작용 가능

NLB - Target Group

  • EC2
  • IP 주소 (private)
  • ALB

Gateway Load Balancer

  • IP 지원 (3계층)
  • 가상 어플라이언스를 위한 로드밸런서
  • 배포, 확장, 관리 용이성을 위해 설계
  • 단일 인입 / 반환 지점
  • GENEVE 프로토콜(port 6081) 사용

GWLB - Target Group

  • EC2
  • IP 주소 (private)

Sticky Session

  • 동일한 클라이언트가 동일한 인스턴스에서 이어서 처리하도록 유도
  • 세션 유지 시간 설정 가능
  • 사용 시 트래픽 분할이 분균등할 수 있음 -> 세션 유지 시간 적절히 조정할 것.
  • CLB / ALB에서는 쿠키를 기반으로 동일 클라이언트에 대한 요청 확인

Sticky Session - 쿠키

  • 애플리케이션 별로 커스텀 쿠키 세팅 가능 (다양한 용도에 맞게)
  • 타겟 그룹 내에서는 독립적인 이름 필요
  • AWSALBAPP은 자동으로 생성되는 쿠키이름
  • AWSALB는 자동으로 생성되는 기간단위 쿠키 이름

Cross-Zone Load Balancing

  • 가용 영역 간 로드 밸런싱이 가능한가?

ALB

  • 기본적으로 사용 설정이 켜져 있음
  • 대상 그룹 단위로 껐다 킬 수 있음
  • AZ 간 데이터 전달에 추가 비용이 발생하지 않음.

NLB, GWLB

  • 기본으로 사용 설정 꺼짐
  • 켜면 추가 비용 발생

CLB

  • 기본으로 꺼짐
  • 켜도 비용 없음

SSL, TLS

SSL

  • 클라이언트와 LB 간의 통신을 암호화
  • 연결을 암호화하기 위한 용도
  • CA를 통해 발급
  • 만료일자가 지나면 주기적으로 업뎃
  • 보통 레거시에서 사용

TLS

  • SSL보다 최신임. 이걸 씁시다.

HTTPS 리스너

  • 기본 인증서 설정 필요
  • 도메인 별로 추가적인 인증서 등록 가능. (ALB의 경우 여러 도메인이 적용될 수 있으므로 전부 따로 셋팅 가능)
  • 클라이언트는 SNI를 통해 도착지 호스트명 식별 가능
  • 레거시 인증서에 대한 지우너

SNI

  • 여러개의 SSL 인증서가 하나의 웹서버에서 동작할 때 적절한 인증서를 로딩하기 위해 사용
  • ex. ALB가 하나인데, 서로 다른 두 도메인으로 라우팅하고, 별도의 인증서가 필요한 경우
  • SSL 핸드쉐이크 초기화 과정에서 진행함.
  • ALB / NLB / Cloudfront에서 사용 가능.
  • CLB에서는 동작하지 않음. 어차피 호스팅 없으므로

LB에서의 SSL 인증

  • AWS에서 관리하는 AWS Certified Manager를 통해 인증 관리 가능
  • 회사에서 갖고 있는 인증이 있으면 그거 사용 가능
  • 로드 밸런서에 HTTPS 리스너를 장착하게 됨

CLB에서의 SSL 인증

  • SSL 인증만 지원
  • 호스트네임이 다르면 인증서도 여러개 필요함 ㅋㅋ

ALB, NLB에서의 SSL 인증

  • SNI를 통해 여러개의 리스너와 인증서 등록 가능

Connection Draining

  • 요청을 처리하는 과정 중에 인스턴스가 내려간 경우, 즉 인스턴스가 unhealthy한 상태에서 연결된 요청을 종료하는 방식
  • unhealthy한 인스턴스에 대해 요청 중단 (de-register)
  • [0, 3600]초만큼 요청 완료되기까지 대기 (설정하면 기본적으로 30초, 0초면 설정 안하는 것)
  • 적절한 값을 셋팅하자.

'자격증 > SAA' 카테고리의 다른 글

[SAA] S3  (0) 2024.11.21
[SAA] Route53  (0) 2024.11.20
[SAA] Elasticache  (0) 2024.11.20
[SAA] RDS  (0) 2024.11.15
[SAA] ENI (탄력적 네트워크 인터페이스)  (0) 2024.10.06