✱ 생활코딩님 Elastic Load Balancer 강의
인스턴스 하나로 서비스를 하다, 트래픽이 증가하며 부하가 걸릴 때 로드밸런서를 앞단에 둬서 부하를 분산시킬 수 있다. 로드밸런서도 일종의 웹서버인데 아무리 많은 트래픽에도 살아있다. 사용자로부터 온 요청을 로드밸런서가 받아 각각의 인스턴스에 요청을 보낸다. 이 작업을 위해선 같은 속성을 가지고 있는 인스턴스를 그룹핑하는 타겟그룹을 만들어 타겟그룹을 로드밸런서에 등록해야한다. 이렇게 하면 로드밸런서는 타겟그룹에 등록된 인스턴스들을 대상으로 하여 트래픽을 보내준다. 로드밸런서를 만들기 전에 대상그룹을 먼저 만든다. 대상그룹에서 설정하는 프로토콜과 포트는, 로드밸런서에서 대상그룹 내 인스턴스들의 포트를 설정하는 것으로, 이 설정포트로 로드밸런서에서 트래픽을 보내겠다, 를 지정하는 것이다. 타겟 그룹을 로드밸런서에 등록하기 위해선 로드밸런서를 생성한다. 이때 가용영역이란 것은 사용자들이 접속했을 때, 그 트래픽을 이 지역의 어떤 건물의 컴퓨터들로 전송(분산)할것인가를 지정하는 것이다. 그 다음 보안설정을 하는데, 이것은 인스턴스의 방화벽이 아닌 ELB의 방화벽을 설정하는 것이다. 즉, 여기서 정하는 포트범위는 인스턴스의 포트가 아닌 로드밸런서의 포트번호를 넣어야 한다. 다음으로 라우팅 구성을 진행한다. 라우팅이란 것은 ELB로 들어온 트래픽을 인스턴스들로 어떻게 분산할 것인가를 지정하는 것으로, 우리가 만든 대상그룹(타겟그룹)을 선택하고 다음대상 등록을 선택하면 등록된 대상에 이런 인스턴스가 포함돼 있음을 보여주는 화면이 나온다. 그리고 검토후 생성 버튼을 누르면 로드밸런서가 생성이 시작된다. 이제, ELB로 접속을 해보자. DNS이름의 주소를 복사한 뒤 로드밸런서의 포트번호를 :포트번호 와 같이 붙여 접속할 수 있다. 하지만 이렇게 하면 1대의 인스턴스에 1대의 로드밸런서가 존재하는 것이기에 의미가 없다. 복수개의 인스턴스를 로드밸런서에 붙여보자. 현재 인스턴스를 이미지로 생성 한다. 이미지 카테고리의 AMI 에 들어오면 생성한 이미지를 볼 수 있다. 이 이미지를 이용해 인스턴스를 하나 더 생성한다. 이미지를 선택하고 시작하기를 누른 뒤 인스턴스를 생성할 수 있다. 인스턴스 생성이 완료되면, 우리가 생성한 로드밸런서에 연결된 타겟그룹에 대상등록으로 포함시킨다. 이렇게 로드밸런서를 통해 서비스가 느려지면 컴퓨터를 추가하고, 트래픽이 줄어들면 컴퓨터를 빼서 효율적으로 트래픽을 관리하고 비용을 절감할 수 있다.

리전별로 가격이 다르고 ALB와 LUC라는 두가지 가격정책이 합산돼서 나온다. ALB는 로드밸런서를 켠 순간부터 부과되는 요금이고 LCU는 사용량에 따른 비용으로 ' 얼마나 많이 연결됐나, 얼마나 오래 연결했나, 얼마나 많이 데이터를 전송했나, 규칙 ' 이렇게 4가지 요소로 다 평가했을 때 가장 비싼 가격을 채택해서 그 가격과 ALB 가격을 더한것이 그 가격이 된다.
* Auto Scaling을 이용하면 시스템 상태에 따라 자동으로 인스턴스를 타겟그룹에 추가했다 뺐다 관리를 해준다. (예 : 연결된 컴퓨터들의 CPU 점유율이 얼마 이상으로 몇분간 지속되면 자동으로 이미지를 바탕으로 인스턴스를 생성해 타겟그룹에 추가한다, 를 설정한다)
로드밸런서 (Load Balancer)
로드밸런서는 클라이언트에서 들어오는 요청을 여러서버(인스턴스)에 고르게 분배한다. 이렇게하면 개별서버에 부하가 집중되지 않아 시스템이 효율적으로 작동한다. 단일서버에 부하가 몰리면 과부하가 발생해 서비스 중단이 일어날 수 있기에 로드밸런서를 통해 트래픽을 여러서버에 분산시켜 이를 방지한다.
▶︎ 로드밸런서의 종류 : 유형 Type
Application Load Balancer (ALB)
7계층(HTTP, HTTPS 계층) 에서 작동하며, URL 경로, 헤더정보 등을 기반으로 트래픽을 라우팅할 수 있다. 웹 애플리케이션의 HTTP/HTTPS 트래픽을 라우팅하거나 복잡한 라우팅규칙이 필요한 경우 사용된다.
Network Load Balancer (NLB)
4계층(TCP, UDP계층) 에서 작동하며, TCP, UDP 트래픽을 처리하고 낮은 지연시간과 높은 처리량을 제공한다. TCP 또는 UDP 기반의 애플리케이션 (VoIP, 게임서버, 고성능 실시간 통신이 필요한 경우) 에서 사용된다.
Classic Load Balancer (CLB)
4계층 및 7계층에서 작동할 수 있으나, ALB나 NLB와 비교해 기능이 상대적으로 제한적이다. AWS의 초기로드밸런서로 기존에 CLB를 사용하던 시스템이나 단순한 로드밸런싱이 필요한 경우 사용된다.
* 4계층과 7계층
OSI (Open Systems Interconnection) 모델에서의 계층을 나타내며 OSI 모델은 네트워크에서 일어나는 연산을 7새의 계층으로 나눠설명한다. 4계층(Transport Layer) 에서는 데이터의 전송을 관리하며 TCP, UDP 와 같은 프로토콜이 이 계층에서 작동하고, 데이터의 신뢰성있는 전송, 오류복구 등을 담당한다. 7계층(Application Layer)에서는 사용자와 가장 가까운 계층으로 HTTP, FTP와 같은 애플리케이션 수준의 프로토콜이 작동한다. 사용자와 직접상호작용하며, 사용자에게 제공되는 서비스와 직접관련이 있다.
*트래픽 라우팅
네트워크 트래픽을 목적지로 전달하는 과정으로 클라이언트 요청을 적절한 서버로 전송해 처리한다. 예를들어 웹애플리케이션에 사용자가 많아져 한대의 서버로 모든 요청을 처리하기 어려울 때, 로드 밸런서가 트래픽을 라우팅하면 들어오는 요청을 여러서버에 고르게 분배해 각 서버의 부하를 줄이고 전체 시스템의 성능과 안정성을 향상시킨다.
*트래픽
컴퓨터 네트워크에서 데이터가 어떻게 이동하는지 설명하는 용어로, 네트워크상에서 데이터패킷의 흐름을 나타내며, 패킷들은 서로 다른 컴퓨터나 기기, 애플리케이션간 정보를 교환하기 위해 전송된다. 예를 들어 웹브라우저를 사용해 웹사이트에 접속하면 컴퓨터와 웹서버간 데이터 패킷이 교환되는데, 이런 데이터패킷의 교환과정을 트래픽이라고 하며 이 트래픽에는 웹페이지의 HTML, 이미지, 스크립트 등이 포함될 수 있다. 트래픽은 네트워크 성능과 용량을 평가하는데 중요한 지표가 될 수 있으며, 과도한 트래픽은 네트워크 지연시간을 증가시키거나 서비스 거부(DoS) 와 같은 문제를 초래할 수 있다.
* 데이터패킷
네트워크를 통해 전송되는 데이터의 기본단위로, 정보 전송시 그 정보는 하나이상의 패킷으로 분할되며 각 패킷은 목적지로 독립적으로 전송된다. '헤더' 는 패킷의 시작부분에 위치하고 패킷의 전송에 필요한 메타데이터(출발지와 목적지의 IP 주소, 패킷크기, 프로토콜 타입 등)를 포함한다. '페이로드' 는 패킷이 실제로 운반하는 데이터 부분으로 전송하려는 파일, 메시지, 이미지 등이 될 수 있으며, 패킷의 주 내용을 구성한다. '트레일러' 일부패킷에는 끝부분에 오류 검사와 관련된 정보가 포함될 수 있다. 이를 통해 패킷이 손상되지 않고 올바르게 전송됐는지 확인할 수 있다.
* 데이터패킷의 전송
패킷기반 통신은 데이터를 효율적으로 전송하고 네트워크 혼잡상황에서도 유연한 대응을 가능하게 한다. TCP/IP와 같은 대부분의 네트워크 프로토콜은 패킷전송방식을 사용하며 이것은 현대 인터넷의 기본구조를 형성하고 있다.
1. 원본컴퓨터는 전송하려는 데이터를 패킷으로 분할한다.
2. 각 패킷은 네트워크를 통해 독립적으로 전송된다.
3.목적지 컴퓨터는 도착한 패킷을 다시 조립해 원래데이터를 복원한다.
* 네트워크 프로토콜
네트워크 프로토콜은 컴퓨터나 기기들이 네트워크상에서 서로 통신하기 위한 규칙이나 표준이다. 이 규칙은 데이터의 형식, 신호의 전송, 오류의 처리, 데이터의 전송순서 등을 정의한다. 프로토콜의 규칙을 따르면, 서로 다른 기기나 시스템 간에도 원활한 통신이 가능하다. 인터넷 통신의 대부분은 패킷통신을 기본으로 하는데, 패킷통신 규약 중 하나인 TCP / IP는 '전송제어 프로토콜 TCP'과 '인터넷 프로토콜 IP' 를 아울러 지칭하는 용어다.
예를들어 사진 등을 작게 나누지 않고 큰 상태 그대로 보내게 되면 그 데이터가 네트워크의 대역폭을 너무 많이 차지해서 다른 패킷의 흐름을 막을 위험이 있다. 그래서 용량이 큰 데이터는 작게 분할된 데이터 조각으로 전송하고, 전송이 완료되면 원래 모습대로 되돌리는 작업이 필요하다. IP는 데이터 조각들을 정확한 목적지로 보내는 역할을 하며 조각의 순서가 뒤바뀌거나 누락되더라도 크게 상관치않고 보내는데 집중한다. TCP는 IP보다 느리지만 꼼꼼한 사용방식을 사용한다. 도착한 조각들을 점검해 줄을 세우고 망가지거나 빠진 부분을 다시 요청한다. 이렇게 두가지 방식을 조합해서 인터넷 데이터 통신을 하는 것을 TCP / IP 라고 부른다.
- IP (Internet Protocol)
컴퓨터의 IP 주소는 말그대로 Adress(주소)를 의미하고, 인터넷 프로토콜인 IP는 메시지가 목표로 하는 컴퓨터에 잘 도착하도록 해주는 역할을 한다.
- TCP(Transmission Control Protocol)
TCP는 인터넷 프로토콜 스위트 중 하나로 (IP의 상위 프로토콜) , 데이터를 패킷으로 나눠 안정적으로 전송하기 위한 프로토콜이다. 즉, 네트워크 통신시에 메시지를 그대로 전송하기 보단 작은 단위로 쪼개 전송하는데, TCP는 이런 패킷들을 재조립하고 손상되거나 손실된 패킷들이 있다면 재요청 한다. TCP는 연결지향 프로토콜로 알려져 있으며, 통신을 시작하기 전 송신자와 수신자 사이의 연결을 확립한다.
TCP는 신뢰성있고 무결성을 보장하는 연결을 통해 데이터를 안전히 전송하는 전송프로토콜이고 IP는 패킷들이 가장 효율적인 방법으로 최종목적지로 갈수있도록 해주는 프로토콜이다. 오늘날 인터넷 통신의 대부분은 패킷통신을 기본으로 하는데, 패킷통신 규약 중 하나인 TCP / IP는 TCP와 IP를 아울러 지칭하는 용어이다.
▶︎ 로드밸런서의 체계 : Scheme
로드밸런서가 인터넷 앞단(부하분산)에서 작동할 것인지 (인터넷연결) , 내부 VPC내에서만 작동할 것인지 (내부) 를 지정한다. 인터넷 연결 옵션은 공개적으로 접근가능한 서비스에 적합하며 내부 옵션은 VPC 내에서만 로드밸런서에 접근가능하기에 외부의 불필요한 접근을 차단하고 보안을 강화할 수 있다.
Internet-Facing 인터넷 연결 설정
로드밸런서가 인터넷에서 직접 접근 가능하도록 구성한다. 즉, 외부 사용자가 인터넷을 통해 로드밸런서에 접근할 수 있고, 로드밸런서는 이 트래픽을 내부의 적절한 서버로 분배한다. 공개 웹사이트나 API게이트웨이(외부 개발자나 서드파티 애플리케이션들이 인터넷을 통해 접근할 수 있는 API) 같은 서비스에서 사용되는 일반적인 설정이다.
Internal 내부 설정
로드밸런서가 내부 네트워크, 특히 Virtual Private Cloud(VPC) 내에서만 작동하도록 구성하여 인터넷에서 이 로드밸런서에 직접 접근할 수 없고 오로지 VPC 내의 다른 리소스나 서비스에서만 접근이 가능하기에 내부 애플리케이션 또는 시스템간의 통신에 사용될 수 있다. 회사나 조직의 직원들만 접근할 수 있는 내부 웹사이트나 애플리케이션(인사관리시스템, 내부문서 공유플랫폼 등)인 인트라넷이나 애플리케이션서버와 내부 데이터베이스 간의 연결을 로드밸런싱하기 위한 데이터베이스 연결에서 사용된다.
▶︎ 로드밸런서의 상태 : State
로드 밸런서의 현재 상태를 나타내며 활성상태, 비활성 상태 등이 있다. 로드밸런서는 하나의 서버가 실패해도 다른 서버가 트래픽을 처리할 수 있게 하기에 시스템의 전체 가용성을 향상시키고, 트래픽이 증가하면 추가 서버를 통해 부하를 분산시키기에 확장성을 향상시킨다. 그리고 유지보수, 업데이트시에 특정 서버를 점검상태로 만들고 다른 서버가 트래픽을 처리하게 할 수 있다는 장점이 있다.
하지만 단점으로, 로드밸런서를 관리하고 구성하는데 일정한 복잡성과 기술적 지식이 필요하고 로드밸런서 자체의 비용과 관리비용이 추가 발생할 수 있다. 만약 트래픽이 매우낮고 한대의 서버만으로 충분히 처리가 가능한 저 트래픽 상태일 경우나, 복잡한 가용성 및 확장성 요구사항이 없는 간단한 애플리케이션 또는 개발/테스트 환경인 단순한 배포일 경우 로드밸런서를 설정하지 않아도 된다. 이후 성장하거나 복잡성이 증가함에 따라 나중에 로드밸런서를 도입하면 된다.
▶︎ 로드밸런서가 호스팅 되는 영역 : Hosting Zone
호스팅이란 일반적으로 특정 서비스나 애플리케이션이 실행되고 관리되는 물질적 또는 가상의 환경을 의미한다. 호스팅 서비스는 사용자가 서버 컴퓨터를 빌려쓸 수 있는 서비스로 1998년 도메인 붐이 일어나면서 서버를 빌려주는 호스팅 서비스가 일반화되기 시작했다.
로드밸런서의 호스팅 영역은 로드밸런서가 위치하고 운영되는 특정 영역 또는 환경을 나타낸다. 호스팅 영역은 로드밸런서가 어떤 네트워크 구조와 위치에 있는지를 설명하며 이것은 로드밸런서의 접근성, 성능, 보안 등에 영향을 미칠 수 있다. 쉽게말해 로드밸런서 생성시 호스팅 영역을 지정하는데, 이 호스팅 영역은 로드밸런서가 트래픽을 분산할 서버그룹을 정의하는데 사용되고 호스트이름, IP주소 또는 둘 다로 지정할 수 있다. 예를 들어 로드밸런서 생성 후, 호스팅 영역을 www.example.com 으로 지정하면 로드밸런서는 www.example.com 으로 들어오는 트래픽을 타겟그룹에 분산한다. 타겟그룹은 로드밸런서가 트래픽을 보내는 서버 그룹이다. 즉, 호스팅 영역을 지정하지 않으면 로드밸런서는 트래픽을 분산할 서버 그룹을 정의할 수 없다.
▶︎ 로드밸런서가 위치하는 가상의 사설 네트워크 : VPC (Virtual Private Cloud)


VPC를 사용하면 AWS 클라우드 내에서 격리된 환경을 생성할 수 있고 네트워크 구성과 보안을 자체적으로 제어할 수 있다. 즉, AWS 클라우드 내에서 사용자가 정의한 가장 네트워크로, 사용자의 AWS 계정내에서 격리돼 실행되며 사용자가 선택한 IP 주소 범위에 따라 구성된다. EC2 인스턴스 생성시 VPC 설정은 필수적으로, EC2 는 항상 어떤 VPC내에 있어야 하며 VPC는 EC2인스턴스와 다른 AWS 리소스가 통신하는 방법을 정의한다.
▶︎ 로드밸런서가 트래픽을 분산할 대상이 위치하는 가용영역
AWS에서 가용영역은 지리적으로 분리된 데이터센터를 나타내며 고가용성과 내구성을 위해 중요한 개념이다.
▶︎ 로드밸런서 ARN : Amazon Resource Name
로드 밸런서의 고유 식별자로 ARN은 AWS에서 리소스를 고유하게 식별하는데 사용되며 특정 로드밸런서를 참조할 때 이용된다.
▶︎ DNS 이름 : DNS Name
로드밸런서의 DNS 호스트 이름으로, 이 이름을 사용하면 클라이언트가 로드밸런서에 연결할 수 있고 IP주소가 변경되더라도 동일한 DNS이름으로 접속이 계속 가능하다.
대상그룹 (Target Group)
대상그룹은 로드밸런서가 트래픽을 분산시킬 서버(인스턴스) 또는 대상(로드밸런서가 트래픽을 전송할 수 있는 목적지 : 인스턴스, 컨테이너, IP등)의 모음이다. 로드밸런서는 대상그룹(대상들의 집합으로 로드밸런서이, 동작방식을 정의함)에 설정된 대상들에게 요청을 분배하며, 각 대상의 상태를 계속 모니터링한다.

즉, 대상그룹은 대상들의 모음으로 로드밸런서가 트래픽을 전송할 대상의 집합을 정확히 지정하고 사용할 수 있으며 특정규칙(URL 경로, HTTP헤더 등) 에 따라 다른 대상 그룹으로 트래픽을 라우팅하는 등의 복잡한 로직을 구현할 수도 있다. 대상그룹을 통해 어느 서버에 트래픽을 보낼지 정확하게 제어하고 관리할 수 있다.
종합

로드밸런서는 시스템의 트래픽을 관리하고 분산시키는 역할을 한다.
대상그룹은 이런 분산이 어떻게 이뤄질지 정의하고 관리한다.
두 구성요소가 함께 작동하며 시스템의 확장성,가용성,유연성을 높인다.
'AWS' 카테고리의 다른 글
| RDS 에서 20만원이 과금됐다. (feat. AWS 프리티어 요금) (2) | 2024.01.03 |
|---|