IT 기초/Infra

Load Balancing

데이터 세상 2021. 12. 27. 11:36

Scale-up

  •  Server가 더 빠르게 동작하기 위해 하드웨어 성능을 올리는 방법

Scale-out

  • 하나의 Server 보다는 여러 대의 Server가 나눠서 일을 하는 방법

Scale-out의 장점

  • 하드웨어 향상하는 비용보다 서버 한대 추가 비용이 더 적습니다.
  • 여러 대의 Server 덕분에 무중단 서비스를 제공할 수 있습니다.

 

Load Balancing

하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스

Load Balancer

  • 여러 대의 server에게 균등하게 traffic을 분산시켜주는 역할을 하는 것

Load Balancing 주요 기능

NAT(Network Address Translation)

  • 사설 IP 주소를 공인 IP 주소로 바꾸는 데 사용하는 통신망의 주소 변조기

DSR(Dynamic Source Routing protocol)

  • 로드 밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지 주소를 스위치의 IP 주소가 아닌 클라이언트의 IP 주소로 전달해서 네트워크 스위치를 거치지 않고 바로 클라이언트를 찾아가는 개념

Tunneling

  • 인터넷상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념
  • 데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있습니다

종류

  • L2
    • Mac주소를 바탕으로 Load Balancing합니다.
  • L3
    • IP주소를 바탕으로 Load Balancing합니다.
  • L4
    • Transport Layer(IP와 Port) Level에서 Load Balancing을 합니다.
    • TCP, UDP
  • L7
    • Application Layer(사용자의 Request) Level에서 Load Balancing을 합니다.

 

AWS Elastic Load Balancing

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/userguide/what-is-load-balancing.html

둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산

등록된 대상의 상태를 모니터링하면서 상태가 양호한 대상으로만 트래픽을 라우팅

Elastic Load Balancing은 수신 트래픽이 시간이 지남에 따라 변경됨에 따라 로드 밸런서를 확장

대다수의 워크로드에 맞게 자동으로 조정

 

Load Balancing의 이점

로드 밸런서는 워크로드를 가상 서버와 같은 다수의 컴퓨팅 리소스로 분산합니다.

로드 밸런서를 사용하면 애플리케이션의 가용성과 내결함성이 높아집니다.

애플리케이션에 대한 요청의 전체적인 흐름을 방해하지 않고 필요에 따라 로드 밸런서에서 컴퓨팅 리소스를 추가 및 제거할 수 있습니다.

로드 밸런서가 정상적인 대상에만 요청을 보내도록 컴퓨팅 리소스의 상태를 모니터링하는 상태 확인을 구성할 수 있습니다.

컴퓨팅 리소스가 주요 작업에 집중할 수 있도록 암호화 및 복호화 작업을 로드 밸런서로 오프로드할 수 있습니다.

 

Elastic Load Balancing의 특징

Elastic Load Balancing은 다음 로드 밸런서를 지원합니다.

 

Application Load Balancer

  • 개방형 시스템 간 상호 연결(OSI) 모델의 일곱 번째 계층인 애플리케이션 계층에서 작동
  • 로드 밸런서는 요청을 받으면 우선 순위에 따라 리스너 규칙을 평가하여 적용할 규칙을 결정한 다음, 규칙 작업의 대상 그룹에서 대상을 선택

로드 밸런서는 클라이언트에 대한 단일 접점 역할을 수행합니다. 로드 밸런서는 여러 가용 영역에서 EC2 인스턴스 같은 여러 대상에 수신 애플리케이션 트래픽을 분산합니다. 이렇게 하면 애플리케이션의 가용성이 향상됩니다. 로드 밸런서에 하나 이상의 리스너를 추가할 수 있습니다.

리스너는 구성한 프로토콜 및 포트를 사용하여 클라이언트의 연결 요청을 확인합니다. 리스너에 대해 정의한 규칙에 따라 로드 밸런서가 등록된 대상으로 요청을 라우팅하는 방법이 결정됩니다. 각 규칙은 우선 순위, 하나 이상의 작업, 하나 이상의 조건으로 구성됩니다. 규칙에 대한 조건이 충족되면 작업이 수행됩니다. 각 리스너에 대한 기본 규칙을 정의해야 하며, 필요에 따라 추가 규칙을 정의할 수 있습니다.

 대상 그룹은 지정한 프로토콜과 포트 번호를 사용하여 EC2 인스턴스 같은 하나 이상의 등록된 대상으로 요청을 라우팅합니다. 여러 대상 그룹에 대상을 등록할 수 있습니다. 대상 그룹 기준으로 상태 확인을 구성할 수 있습니다. 로드 밸런서의 리스너 규칙에서 지정한 대상 그룹에 등록된 모든 대상에서 상태 검사가 수행됩니다.

 

Classic Load Balancer에서 마이그레이션할 때의 이점

Classic Load Balancer 대신 Application Load Balancer를 사용하면 다음과 같은 이점이 있습니다.

  • 경로 조건에 대한 지원. 요청의 URL을 기반으로 요청을 전달하는 리스너에 대한 규칙을 구성할 수 있습니다. 이를 통해 애플리케이션을 규모가 더욱 작은 서비스로 구성하고, URL 콘텐츠를 기반으로 요청을 올바른 서비스로 라우팅할 수 있습니다.
  • 호스트 조건에 대한 지원. HTTP 헤더의 호스트 필드를 기반으로 요청을 전달하는 리스너에 대한 규칙을 구성할 수 있습니다. 따라서 단일 로드 밸런서를 사용하여 여러 개의 도메인에 요청을 라우팅할 수 있습니다.
  • HTTP 헤더 조건 및 메서드, 쿼리 파라미터, 소스 IP 주소 등 요청의 필드를 기반으로 하는 라우팅을 지원합니다.
  • 단일 EC2 인스턴스의 여러 애플리케이션으로 요청을 라우팅하는 것을 지원합니다. 인스턴스 또는 IP 주소를 각각 다른 포트에 있는 여러 대상 그룹에 등록할 수 있습니다.
  • 한 URL에서 다른 URL로 요청을 리디렉션하는 작업을 지원합니다.
  • 사용자 지정 HTTP 응답 회신을 지원합니다.
  • 로드 밸런서의 VPC 외부 대상을 포함하여 IP 주소로 대상을 등록하는 것을 지원합니다.
  • Lambda 함수를 대상으로 등록하는 작업을 지원합니다.
  • 요청을 라우팅하기 전에 기업 또는 소셜 자격 증명을 통해 애플리케이션의 사용자를 인증할 수 있도록 로드 밸런서를 지원합니다.
  • 컨테이너화된 애플리케이션을 지원합니다. Amazon Elastic Container Service(Amazon ECS)는 태스크를 예약할 때 사용되지 않는 포트를 선택하고 이 포트를 사용하여 대상 그룹에 태스크를 등록할 수 있습니다. 이를 통해 클러스터를 효율적으로 사용할 수 있습니다.
  • 상태 확인은 대상 그룹 수준에서 정의되고 많은 CloudWatch 지표가 대상 그룹 수준에서 보고되므로 각 서비스의 상태를 독립적으로 모니터링할 수 있습니다. Auto Scaling 그룹에 대상 그룹을 연결하면 필요에 따라 동적으로 각 서비스를 확장할 수 있습니다.
  • 액세스 로그는 추가 정보를 포함하며 압축된 형식으로 저장됩니다.
  • 로드 밸런서 성능을 개선합니다.

 

Network Load Balancer

  • 오픈 시스템 상호 연결(OSI) 모델의 네 번째 계층에서 작동
  • 초당 수백만 개의 요청을 처리
  • 로드 밸런서가 연결 요청을 받으면 기본 규칙의 대상 그룹에서 대상을 선택
  • 리스너 구성에 지정된 포트에서 선택한 대상에 대한 TCP 연결을 열려고 시도

로드 밸런서는 클라이언트에 대한 단일 접점 역할을 수행합니다. 로드 밸런서는 수신 트래픽을 Amazon EC2 인스턴스와 같은 여러 대상에 분산합니다. 이렇게 하면 애플리케이션의 가용성이 향상됩니다. 로드 밸런서에 하나 이상의 리스너를 추가할 수 있습니다.

리스너는 사용자가 구성한 프로토콜과 포트를 사용하여 클라이언트의 연결 요청을 확인하고, 요청을 대상 그룹으로 전달합니다.

 대상 그룹은 지정한 TCP 프로토콜과 포트 번호를 사용하여 EC2 인스턴스 같은 하나 이상의 등록된 대상으로 요청을 라우팅합니다. 여러 대상 그룹에 대상을 등록할 수 있습니다. 대상 그룹 기준으로 상태 확인을 구성할 수 있습니다. 로드 밸런서의 리스너 규칙에서 지정한 대상 그룹에 등록된 모든 대상에서 상태 검사가 수행됩니다.

 

Classic Load Balancer에서 마이그레이션할 때의 이점

Classic Load Balancer 대신 Network Load Balancer를 사용하면 다음과 같은 이점이 있습니다.

  • 일시적 워크로드를 처리하고 초당 수백만 개의 요청으로 확장할 수 있습니다.
  • 로드 밸런서에 고정 IP 주소를 지원합니다. 또한 로드 밸런서에 대해 활성화된 서브넷당 하나의 탄력적 IP 주소를 할당할 수 있습니다.
  • 로드 밸런서의 VPC 외부 대상을 포함하여 IP 주소로 대상을 등록하는 것을 지원합니다.
  • 단일 EC2 인스턴스의 여러 애플리케이션으로 요청을 라우팅하는 것을 지원합니다. 여러 포트를 사용하여 각 인스턴스 또는 IP 주소를 동일한 대상 그룹에 등록할 수 있습니다.
  • 컨테이너화된 애플리케이션을 지원합니다. Amazon Elastic Container Service(Amazon ECS)는 태스크를 예약할 때 사용되지 않는 포트를 선택하고 이 포트를 사용하여 대상 그룹에 태스크를 등록할 수 있습니다. 이를 통해 클러스터를 효율적으로 사용할 수 있습니다.
  • 상태 확인은 대상 그룹 수준에서 정의되고 많은 Amazon CloudWatch 지표가 대상 그룹 수준에서 보고되므로 각 서비스의 상태를 독립적으로 모니터링할 수 있습니다. Auto Scaling 그룹에 대상 그룹을 연결하면 필요에 따라 동적으로 각 서비스를 확장할 수 있습니다.

 

Gateway Load Balancer

  • 방화벽, 침입 탐지 및 방지 시스템, 심층 패킷 검사 시스템 같은 가상 어플라이언스를 배포, 확장 및 관리
  • 투명한 네트워크 게이트웨이(즉, 모든 트래픽에 대한 단일 진입점과 종료점)를 결합하고 트래픽을 분산하는 동시에 가상 어플라이언스를 수요에 따라 조정
  • 개방형 시스템 간 상호 연결(OSI) 모델의 세 번째 계층인 네트워크 계층에서 작동
  • 모든 포트에서 모든 IP 패킷을 수신하고 리스너 규칙에 지정된 대상 그룹에 트래픽을 전달합니다.
  • 5-tuple (for TCP/UDP flows) or 3-tuple (for non-TCP/UDP flows) 사용하여 특정 대상 어플라이언스에 대한 흐름 고정성을 유지
  • Gateway Load Balancer 및 등록된 가상 어플라이언스 인스턴스는 포트 6081에서 GENGEVE 프로토콜을 사용하여 애플리케이션 트래픽을 교환
  • 8500바이트의 최대 전송 단위(MTU) 크기를 지원

게이트웨이 로드 밸런서는 게이트웨이 로드 Load Balancer 서 엔드포인트를 사용하여 VPC 경계 간에 트래픽을 안전하게 교환합니다. 게이트웨이 로드 Load Balancer 서 엔드포인트는 서비스 공급자 VPC의 가상 어플라이언스와 서비스 소비자 VPC의 애플리케이션 서버 간에 프라이빗 연결을 제공하는 VPC 엔드포인트입니다. 게이트웨이 로드 Load Balancer 서를 가상 어플라이언스와 동일한 VPC에 배포합니다. 게이트웨이 로드 Load Balancer 서의 대상 그룹에 가상 어플라이언스를 등록합니다.

게이트웨이 로드 Load Balancer 서 엔드포인트와의 트래픽은 라우팅 테이블을 사용하여 구성됩니다. 서비스 소비자 VPC에서 Gateway Load Balancer 엔드포인트를 거쳐 서비스 공급자 VPC의 Gateway Load Balancer 로 트래픽 흐름을 수행한 다음 서비스 소비자 VPC로 돌아갑니다. 다른 서브넷에서 Gateway Load Balancer 엔드포인트와 애플리케이션 서버를 생성해야 합니다. 이를 통해 Gateway Load Balancer 엔드포인트를 애플리케이션 서브넷에 대한 라우팅 테이블의 다음 홉으로 구성할 수 있습니다.

 

Classic Load Balancer

  • 로드 밸런서는 들어오는 애플리케이션 트래픽을 여러 가용 영역의 여러 EC2 인스턴스에 분산
  • 애플리케이션의 내결함성을 증가
  • 비정상 인스턴스를 감지하고 정상 인스턴스로만 트래픽을 라우팅

로드 밸런서는 클라이언트에 대한 단일 연락 창구 역할을 합니다. 이렇게 하면 애플리케이션의 가용성이 높아집니다. 애플리케이션에 대한 전체 요청 흐름을 방해하지 않고 요구 사항이 변경되면 로드 밸런서에서 인스턴스를 추가 및 제거할 수 있습니다. Elastic Load Balancing은 시간이 지남에 따라 애플리케이션에 대한 트래픽이 변경됨에 따라 로드 밸런서를 확장합니다. Elastic Load Balancing은 대부분의 워크로드로 자동으로 확장할 수 있습니다.

리스너는 구성한 프로토콜과 포트를 사용하여 클라이언트의 연결 요청을 확인하고 구성한 프로토콜과 포트 번호를 사용하여 하나 이상의 등록된 인스턴스에 요청을 전달합니다. 로드 밸런서에 하나 이상의 리스너를 추가합니다.

로드 밸런서가 정상 인스턴스에만 요청을 보내도록 등록된 인스턴스의 상태를 모니터링하는 데 사용되는 상태 확인을 구성할 수 있습니다.

로드 밸런서는 클라이언트에서 EC2 인스턴스로 트래픽을 라우팅합니다.
                
등록된 인스턴스가 각 가용 영역에서 요청 로드를 처리할 수 있도록 하려면 로드 밸런서에 등록된 각 가용 영역에서 거의 동일한 수의 인스턴스를 유지하는 것이 중요합니다. 예를 들어 가용 영역 us-west-2a에 10개의 인스턴스가 있고 us-west-2b에 2개의 인스턴스가 있는 경우 요청은 두 가용 영역 간에 균등하게 분산됩니다. 결과적으로 us-west-2b의 2개 인스턴스는 us-west-2a의 10개 인스턴스와 동일한 양의 트래픽을 처리합니다. 대신 각 가용 영역에 6개의 인스턴스가 있어야 합니다.

기본적으로 로드 밸런서는 로드 밸런서에 대해 활성화한 가용 영역에 트래픽을 고르게 분산합니다. 활성화된 모든 가용 영역의 등록된 모든 인스턴스에 트래픽을 고르게 분산하려면 로드 밸런서에서 교차 영역 로드 밸런싱을 활성화하십시오. 그러나 더 나은 내결함성을 위해 각 가용 영역에서 대략 동일한 수의 인스턴스를 유지하는 것이 좋습니다.

 

Elastic Load Balancing 액세스

다음 인터페이스 중 하나를 사용하여 로드 밸런서를 생성하고, 액세스하고, 관리할 수 있습니다.

  • AWS Management Console: Elastic Load Balancing에 액세스할 때 사용할 수 있는 웹 인터페이스를 제공합니다.
  • AWS 명령줄 인터페이스(AWS CLI): Elastic Load Balancing을 비롯한 다양한 AWS 서비스에 대한 명령을 제공합니다. AWS CLI는 Windows, macOS, Linux에서 지원됩니다. 자세한 내용은 AWS Command Line Interface 섹션을 참조하세요.
  • AWS SDK: 언어별 API를 제공하고, 서명 계산, 요청 재시도 처리 및 오류 처리와 같은 많은 연결 세부 정보를 관리합니다. 자세한 정보는 AWS SDK를 참조하세요.
  • 쿼리 API: HTTPS 요청을 사용하여 호출하는 하위 수준의 API 작업을 제공합니다. 쿼리 API 사용은 Elastic Load Balancing에 액세스하는 가장 직접적인 방법입니다. 하지만 쿼리 API를 사용하려면 애플리케이션에서 요청에 서명할 해시 생성 및 오류 처리와 같은 하위 수준의 세부 정보를 처리해야 합니다. 

 

Related Services

Elastic Load Balancing은 다음 서비스를 통해 애플리케이션의 가용성 및 확장성을 개선합니다.

  • Amazon EC2 — 클라우드에서 애플리케이션을 실행할 수 있는 가상 서버입니다. 로드 밸런서를 구성하여 EC2 인스턴스에 트래픽을 라우팅할 수 있습니다. 
  • Amazon EC2 Auto Scaling — 인스턴스에 장애가 발생하더라도 원하는 수의 인스턴스가 실행되도록 보장합니다. 또한 Amazon EC2 Auto Scaling을 사용하면 인스턴스 수요가 변경될 때 인스턴스 수를 자동으로 늘리거나 줄일 수 있습니다. Elastic Load Balancing에서 Auto Scaling을 활성화하면 Auto Scaling에 의해 시작된 인스턴스가 로드 밸런서에 자동으로 등록됩니다. 마찬가지로 Auto Scaling에 의해 종료된 인스턴스는 로드 밸런서에서 자동으로 등록 취소됩니다. 
  • AWS Certificate Manager — HTTPS 리스너를 생성할 때 ACM에서 제공한 인증서를 지정할 수 있습니다. 로드 밸런서는 인증서를 사용하여 연결을 종료하고 클라이언트의 요청을 암호화 해제합니다.
  • Amazon CloudWatch — 로드 밸런서를 모니터링하고 필요에 따라 조치를 취할 수 있게 해줍니다. 
  • Amazon ECS — EC2 인스턴스 클러스터에서 Docker 컨테이너를 실행, 중단 및 관리할 수 있게 해줍니다. 로드 밸런서를 구성하여 컨테이너에 트래픽을 라우팅할 수 있습니다. 
  • AWS Global Accelerator - 애플리케이션의 가용성과 성능을 향상시킵니다. 액셀러레이터를 사용하여 하나 이상의 AWS 리전에 있는 여러 로드 밸런서에 트래픽을 분산합니다. 
  • Route 53 — 도메인 이름을 컴퓨터를 사용하여 서로 연결해주는 숫자로 된 IP 주소로 변환하여 방문자를 안정적이며 비용 효율적으로 웹 사이트로 라우팅하도록 합니다. 예를 들어 www.example.com을 숫자 IP 주소 192.0.2.1(으)로 변환합니다. AWS에서는 리소스에 URL을 지정합니다(예: 로드 밸런서). 그러나 기억하기 쉬운 URL이 필요한 경우도 있습니다. 예를 들어 도메인 이름을 로드 밸런서로 매핑할 수 있습니다. 
  • AWS WAF - Application Load Balancer와 함께 AWS WAF를 사용하여 웹 ACL(웹 액세스 제어 목록)의 규칙에 따라 요청을 허용하거나 차단할 수 있습니다.

 


References

반응형

'IT 기초 > Infra' 카테고리의 다른 글

SAN/NAS/DAS  (0) 2021.12.27
DB availability  (0) 2021.12.27
git vs svn  (0) 2021.12.27
Hadoop  (0) 2021.12.27
RDBMS vs NoSQL  (0) 2021.12.27