만자의 개발일지

[AWS] 로드 밸런서란? 본문

AWS

[AWS] 로드 밸런서란?

박만자 2021. 9. 15. 21:07

ELB 와 ALB에 대해 들어가기 앞서 로드밸런서에 대해 짚고 넘어가 봅시다.

로드 밸런서(Load Balancer)

서버에 가해지는 트래픽을 여러대의 서버에게 균등하게 분산시켜주는 역할을 하는 것이 로드 밸런서입니다.

서버가 하나일 때 트래픽이 적으면 서버는 무사히 응답을 해줄 것입니다. 하지만 트래픽이 서버 한개로는 감당할 수 없는 양이 되는 순간 서버는 다운될 것이고, 서비스 또한 작동을 멈출 것입니다.

이러한 문제를 해결하기 위해서는 크게 두 가지 방법이 있는데요.

서버의 인스턴스 성능을 올리는 스케일-업(Scale-up)서버를 여러대로 나눠서 트래픽을 처리하는 스케일-아웃(Scale-out) 방식이 있습니다. 오늘 포스팅하는 이 로드 밸런서는 바로 스케일-아웃 방식입니다.

그리고 로드 밸런서는 지속적으로  IP주소가 바뀌기 떄문에 도메인 기반으로 사용해야 한다는 특징이 있습니다.

 

로드 밸런싱을 하면 무슨 장점이 있을까요?

  • 비용 절감
  • 무중단 서비스 제공

 

주요 기능

  • NAT
  • 터널링(Tunneling)
    • 인터넷상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 해주는 개념
    • 데이터를 캡슐화해 연결된 상호간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있음
  • DSR(Dynamic Source Routing protocol)
    • 로드 밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지 주소를 스위치의 IP 주소가 아닌 클라이언트의 IP 주소로 전달해서 네트워크 스위치를 거치지 않고 바로 클라이언트를 찾아가는 개념입니다.

 

로드 밸런싱 알고리즘

  • 라운드 로빈(Round Robin)
    • 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식 서버와의 연결이 오래 지속되지 않을 경우 적합하다.
  • 가중 라운드 로빈 
    • 각 서버에 가중치를 매기고 가중치가 높은 서버에 요청을 우선적으로 배정하는 방식
    • 서버의 트래픽 처리 능력이 다를 경우 사용
  • 최소 연결 방식(Least Connections)
    • 요청이 들어온 시점에 가장 적은 연결 상태를 보이는 서버에 트래픽을 배정하는 방식
    • 서버에 들어온 트래픽들이 일정하지 않은 경우에 적합하다.
  • IP 해시 방식(Source)
    • 클라이언트의 IP주소를 특정 서버로 매핑하여 요청을 처리하는 방식
    • 사용자가 항상 동일한 서버로 연결된다.

 

로드 밸런싱 종류

L2

  • Mac주소를 바탕으로 Load Balancing합니다.

L3

  • IP주소를 바탕으로 Load balancing합니다.

L4

  • Transport 계층(전송 계층) 에서 Load Balancing 합니다. (IP와 Port)
  • 데이터를 변경/수정 할 수 없습니다.
  • 패킷 레벨에서만 트래픽을 분산하기 때문에 속도가 빠르고 효울이 높습니다.
  • 섬세한 라우팅이 불가능하지만 L7로드 밸런서보다 가격이 저렴합니다.
  • TCP,UDP

L7

  • Application 계층(응용 계층) 에서 Load Balancing 합니다.
  • 포트나 헤더등의 정보를 수정 할 수 있습니다.
  • 패킷 내용을 확인하고 그 내용에 따라 트래픽을 특정 서버에 분산하는 것이 가능합니다.
  • 섬세한 라우팅이 가능하고, 비정상적인 트래픽을 필터링 할 수 있습니다.
  • 패킷의 내용을 복호화 하기 때문에 더 많은 비용이 듭니다.
  • HTTP(80), HTTPS(443), FTP(21), WebSocket

 

타겟 그룹(Target Group)

타겟그룹이란 EC2인스턴스를 오토스케일링 할 수 있는 단위로 사용됩니다.

각각의 타겟그룹에 있는 인스턴스들은 정의된 Health Checks(상태 확인)를 수행하게됩니다. 

 

Auto Scailing

오토 스케일링은 미리 정의한 용량 정책에 따라 EC2 인스턴스의 용량을 확대하거나 축소할 수 있습니다. EC2와 오토 스케일링을 결합해 고가용성 아키텍처를 구현할 수 있으며, 언제든 원하는 수만큼의 인스턴스를 운용할 수 있습니다.

서버의 과부하, 장애 등과 같이 서비스 불능 상황 발생시 자동으로 서버를 복제하여 서버 대수를 늘려주는 작업을 해주는 AWS 서비스라고 생각하시면 됩니다.

 

** 고가용성: 서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질, 보통 고가용성을 위해 2개의 서버를 연결하는 방식을 사용 **

 

Health Checks(상태 확인)

로드밸런서에는 Health Checks를 할 수 있습니다. Health Checks는 타겟그룹에 원하는 경로와 포트를 설정하여 HTTP 응답이 정상적으로 오는지 확인하고, 오지 않는다면 비정상 상태의 인스턴스를 제외한 다른 인스턴스로만 트래픽을 분산합니다.

  • InService (정상적으로 응답)
  • OurOfService (응답 실패)

 

 

ELB(Elastic Load Balancer)

AWS에 정의되있는 ELB입니다.

Elastic Load Balancing은 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산합니다. 등록된 대상의 상태를 모니터링하면서 상태가 양호한 대상으로만 트래픽을 라우팅합니다. Elastic Load Balancing은 수신 트래픽이 시간이 지남에 따라로드 밸런서를 확장합니다.

로드 밸런서는 클라이언트에서 오는 트래픽을 허용하고, 하나 이상의 가용 영역에서 등록된 대상(예: EC2 인스턴스)으로 요청을 라우팅합니다. 또한, 로드 밸런서는 등록된 대상의 상태를 모니터링하고 정상 대상으로만 트래픽이 라우팅되도록 합니다. 로드 밸런서가 비정상 대상을 감지하면, 해당 대상으로 트래픽 라우팅을 중단합니다. 그런 다음 대상이 다시 정상으로 감지되면 트래픽을 해당 대상으로 다시 라우팅합니다.

하나 이상의 리스너를 지정하여 들어오는 트래픽을 허용하도록 로드 밸런서를 구성합니다. 리스너는 연결 요청을 확인하는 프로세스입니다. 클라이언트와 로드 밸런서 간의 연결을 위한 프로토콜 및 포트 번호로 구성됩니다. 마찬가지로 로드 밸런서와 대상 간의 연결을 위한 프로토콜 및 포트 번호로 구성됩니다.

- AWS 사용 설명서 -

ELB의 경우 네트워크 레이어 4와 네트워크 레이어7에 대한 부하를 제어할 수 있습니다. 그리고 서버의 기본주소가 바뀌면 로드밸런서를 새로 생성해야하며 하나의 주소에 하나의 타겟그룹으로 보내게 됩니다. 따라서 타겟그룹이 많아질수록 더 많은 수의 로드밸런서가 필요하고 비용도 그만큼 더 들아가게 됩니다.

 

ALB(Application Load Balancer)

AWS에 정의되있는 ALB입니다.

Application Load Balancer는 개방형 시스템 간 상호 연결(OSI) 모델의 일곱 번째 계층인 애플리케이션 계층에서 작동합니다. 로드 밸런서는 요청을 받으면 우선 순위에 따라 리스너 규칙을 평가하여 적용할 규칙을 결정한 다음, 규칙 작업의 대상 그룹에서 대상을 선택합니다. 애플리케이션 트래픽의 콘텐츠를 기반으로 다른 대상 그룹에 요청을 라우팅하도록 리스너 규칙을 구성할 수 있습니다. 대상이 여러 개의 대상 그룹에 등록이 된 경우에도 각 대상 그룹에 대해 독립적으로 라우팅이 수행됩니다. 대상 그룹 레벨에서 사용되는 라우팅 알고리즘을 구성할 수 있습니다. 기본 라우팅 알고리즘은 라운드 로빈입니다. 그 대신 최소 미해결 요청 라우팅 알고리즘을 지정할 수 있습니다

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

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

 

- AWS 사용 설명서 -

ALB의 경우는 네트워크 레이어7의 프로토콜에 대한 부하만 처리할 수 있습니다. ELB와 다르게 경로나 포트등에 따라 다른 타겟그룹으로 맵핑할 수 있습니다. 포트 단위로 연결해줄 수 있기 떄문에 도커에서 유용하게 작동할 수 있고 하나의 대상그룹에 더 많은 컨테이너를 넣을 수 있어 비용을 최적화할 수 있습니다. EC2 인스턴스, AWS 람다, IP로도 연결이 가능하고 특정한 요청에 대해서는 서버없이 응답메세지를 작성할 수 있습니다. 

 

ALB에는 리스너를 포트와 프로토콜별로 분기처리할 수 있습니다. 하단에 있는 룰은 패스별 혹은 AWS_ARN별로 다른 분기를 처리할 수 있습니다.

하지만 ALB는 IP가 끊임없이 변화하기 때문에 ALB의 Public IP를 목적지로 삼아 접근 제어(ACL)를 실시하는 네트워크 장비에겐 매우 난감할 수도 있습니다.

 

NLB(Network Load Balancer)

AWS에 정이되있는 NLB입니다.

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

- AWS 사용 설명서 -

NLB는 L4 로드 밸런싱을 하는 로드 밸런서 입니다. L4 로드 밸런싱이기 떄문에 TCP와 UDP에 대한 트래픽을 처리할 수 있고, TLS(SSL Offload)까지 가능한 로드밸런서입니다. NLB는 사용자와 인스턴스간의 논리적인 연결이 생성될 수 있도록 돕습니다. 부하분산을 함과 동시에 사용자와 인스턴스의 커넥션을 생성하도록 돕고 자신 또한 커넥션을 가지며 관리합니다. 무엇보다 NLB의 가장 큰 특징은 ALB와 다르게 고정 IP를 갖는다는 것입니다. Private IP뿐만 아니라 Public IP까지 고정된 IP로 제공합니다. 

 

 

 

출처

Comments