로드 밸런싱이란?
> 로드 밸런서에는 동일한 서비스를 하는 다수의 서버가 등록되고 사용자로부터 서비스 요청이 오면 로드 밸런서가 받아 사용자별로 다수의 서버에 서비스 요청을 분산시켜 부하를 분산
> 이와 같은 방식의 서비스를 AWS에서도 제공. 이를 Elastic Load Balancing이라고 함
ELB란?
> Elastic Load Balancing은 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산
> 등록된 대상의 상태를 모니터링 하면서 상태가 양호한 대상으로만 트래픽을 라우팅
ELB의 장점
> 고가용성
: 다수의 EC2 인스턴스, 컨테이너 등에 트래픽을 분산 시키며 다수의 AZ에 배포된 EC2 인스턴스에 애플리케이션을 배포, 트래픽을 여러 AZ로 분산
: 하나의 AZ가 모두 다운 돼도 사용자의 애플리케이션은 문제 없이 실행 상태를 유지
> 탄력성
: ELB의 최대 장점은 자동적 확장성
: 인스턴스 추가 또는 삭제를 위한 어떤 수작업도 할 필요가 없으며, 수동으로 뭔가를 할 여지도 없음
> 안전성
: 통합 인증관리, SSL 복호화, 포트 포워딩 등 다수의 보안 기능을 제공
> 높은 처리량
: ELB는 트래픽 증가를 처리할 수 있도록 설계되었으며 초당 수백만 개의 요청을 로드 밸런싱할 수 있음
작동 방식
> 로드 밸런서는 클라이언트에 대한 단일 접점으로, 클라이언트에서 오는 트래픽을 허용하고, 하나 이상의 가용 영역에서 등록된 대상(EC2 인스턴스)으로 요청을 라우팅
> 로드 밸런서는 등록된 타겟의 상태를 모니터링하고 정상 타겟으로만 트래픽이 라우팅 되도록 함
> 로드 밸런서가 비정상 타겟을 감지하면, 해당 타겟으로 트래픽 라우팅을 중단
> 리스너는 구성한 프로토콜 및 포트를 사용하여 클라이언트의 연결 요청을 확인
> 리스너에 대해 정의한 규칙에 따라 로드 밸런서가 등록된 타겟으로 요청을 라우팅하는 방법이 결정
> 각 규칙은 우선 순위, 하나 이상의 작업, 하나 이상의 조건으로 구성
> 규칙에 대한 조건이 충족되면 작업이 수행
> 각 리스너에 대한 기본 규칙을 정의해야 하며, 필요에 따라 추가 규칙을 정의
> 각 타겟 그룹은 지정한 프로토콜과 포트 번호를 사용하여 EC2 인스턴스 같은 하나 이상의 등록된 타겟으로 요청을 라우팅
> 여러 대상 그룹에 타겟을 등록할 수 있음
> 타겟 그룹 기준으로 상태 확인을 구성. 로드 밸런서의 리스너 규칙에서 지정한 타겟 그룹에 등록된 모든 타겟에서 헬스 체크를 수행
ELB의 다양한 유형
Application Load Balancer
> OSI 모델의 레이어 7에 해당하며, HTTP와 HTTPS를 지원
> 로드 밸런서는 요청을 받으면 우선 순위에 따라 리스너 규칙을 평가하여, 적용할 규칙을 결정한 다음 규칙 작업의 타겟 그룹에서 타겟을 선택
> ALB에서는 헤더 수정이 가능, X-Forwarded-For 헤더에 클라이언트 IP주소를 넣듯 필요한 정보를 헤더로 삽입
> ALB의 호스트 기반 라우팅을 통해 HTTP 헤더의 Host 필드에 따라 클라이언트 요청을 라우팅 할 수 있고,
> 경로 기반 라우팅을 통해 HTTP 헤더의 URL 경로에 따라 클라이언트 요청을 라우팅
Network Load Balancer
> TCP 로드 밸런서라고 부르며, OSI 모델의 레이어 4에서 작동
> 로드 밸런서가 연결 요청을 받으면 기본 규칙의 타겟 그룹에서 대상을 선택
> 리스너 구성에 지정된 포트에서 선택한 타겟에 대한 TCP 연결을 열려고 시도
> TCP 트래픽의 경우, 로드 밸런서는 프로토콜, 원본 IP 주소, 원본 포트, 타겟 IP 주소, 타겟 포트, TCP 시퀀스 번호에 따라 흐름 해시 알고리즘을 사용하여 타겟을 선택
> 클라이언트로부터의 TCP 연결은 소스 포트와 시퀀스 번호가 서로 다르므로 다른 타겟에 라우팅될 수 있음. 각 TCP 연결은 연결 수명 동안 하나의 타겟에 라우팅
> UDP 트래픽의 경우, 로드 밸런서는 프로토콜, 원본 IP 주소, 원본 포트, 타겟 IP 주소, 타겟 포트에 따라 흐름 해시 알고리즘을 사용하여 타겟을 선택
> UDP 흐름은 소스와 목적지가 동일하기 때문에 수명이 다할 때까지 일관되게 단일 타겟으로 라우트
> 서로 다른 UDP 흐름에는 서로 다른 소스 IP 주소와 포트가 있으므로 다른 타겟으로 라우팅
다중 AZ의 활용
> Auto Scaling과 ELB를 활용해 애플리케이션을 구현할 때는 가능한 다중 AZ를 기반으로 할 것을 권장
> AZ가 고가용성을 구현하기 위한 기본 구조이기 때문
> ELB가 트래픽을 AZ간에 균등하게 배분할 수 있으므로, AWS 생태계를 기반으로 서비스를 구현할 때 다중 AZ 구조의 활용
1. Cross Zone Load Balancing 문제
> 다중 AZ에서 로드 밸런서를 사용하여 트래픽을 분산하는 경우, 가용 영역 간에 트래픽이 불균형하게 분배될 수 있음
> 특정 가용 영역에 부하가 몰려 해당 영역의 리소스가 고갈되는 경우, 다른 가용 영역에 여유 리소스가 있더라도 해당 가용 영역으로 트래
픽이 분배되지 않아 서비스의 가용성과 성능에 문제가 발생
2. Sticky Session 문제
> 같은 클라이언트가 항상 같은 가용 영역에 연결되도록 로드 밸런서가 세션을 유지하는 방식
> 그러나 이로 인해 특정 가용 영역에 부하가 몰리게 되어 다른 가용 영역에 여유 리소스가 있더라도 해당 영역으로 트래픽이 분배되지 않을 수 있음
'DevOps BootCamp > AWS' 카테고리의 다른 글
Route 53 (0) | 2023.04.18 |
---|---|
CloudFront (0) | 2023.04.18 |
Auto Scaling Group (0) | 2023.04.18 |
RDS (0) | 2023.04.14 |
Storage - EFS (0) | 2023.04.14 |