[AWS] ELB(Elastic Load Balancer) - ALB

2020. 3. 19. 10:17AWS/AWS_Service

반응형

안녕하세요, 달콤한달팽이입니다.🐌😁


오늘은 서버로 들어오는 트래픽에 대해 로드밸런싱 기능을 지원하는 ELB 서비스를 사용해보도록 하겠습니다.


ELB(Elastic Load Balancer)란?

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

 

로드 밸런서를 사용해 안정성 향상 및 가용성, 내결함성을 향상 시킬 수 있어

24시간 운영이 필요한 서버라면 반드시 사용이 필요하다고 생각되는 서비스 중 하나입니다.

 

ELB는 사용 용도에 따라 NLB, ALB, GLB, CLB(미사용)이 있으며, 각각의 특징에 따라 사용 용도가 구분됩니다.

 

ALB(Application Load Balancer)의 특징

오늘 다룰 ALB는 HTTP, HTTPS 트래픽에 대한 로드밸런싱 기능을 수행하여 L7 로드밸런서라고도 불리며,

고정IP가 아닌 일정 시간마다 변동되는 변동IP를 가지고 있다는 특징이 있습니다.

 

그럼 이제 본격적으로 ALB를 생성해보도록 하겠습니다.


1) 서버 생성

ELB는 트래픽을 분산시켜주는 역할을 수행합니다.

따라서 트래픽이 정상적으로 분산되는 것을 확인하기 위해선 두 대 이상의 서버가 필요합니다!

 

저는 test-web이라는 두 대의 서버를 생성하고, 각 서버 내부에는 Apache를 설치해 두었습니다.

 

그리고 각 Apache의 html 경로에 대표 페이지를 설정해두어, 각각이 어떤 서버인지 구분할 수 있도록 설정해 둡니다.

   yum install -y httpd

   cd /var/www/html/

   vi index.html

   systemctl start httpd

   systemctl status httpd

 

2) 대상그룹 생성

대상그룹이란 지정한 프로토콜과 포트에 따라 로드 밸런서가 전달한 요청을 처리하기 위한 대상들의 모임입니다.

 

쉽게 말해, 로드 밸런서로 들어온 요청이 어떤 대상, 프로토콜, 포트로 보낼지 정해주는 것을 의미합니다.

 

EC2 서비스 - 로드 밸런싱 탭 - 대상 그룹 - 대상 그룹 생성을 선택합니다.

 

가장 처음으로는 트래픽을 어디로 전달받을지 선택하는 대상 유형 선택란이 보이네요!

이번 실습에서는 가장 보편적으로 선택되는 인스턴스를 선택해보겠습니다.

  (1) 인스턴스: 인스턴스를 직접 선택하거나, AutoScalingGroup을 지정할수도 있습니다.
  (2) IP주소: 특정 IP를 가진 리소스를 지정합니다.
  (3) Lambda 함수: Lambda 함수를 호출하도록 지정합니다.

  (4) Application Load Balancer: LB에 고정 IP가 필요할 경우 NLB > ALB 순서로 구성하는 경우가 존재합니다.

     ( NLB의 경우 고정IP를 지니고 있기 때문이죠!)

 

대상 그룹의 이름과 프로토콜, 대상으로 선택될 서버가 위치한 VPC를 선택합니다.

 

HTTPS, TLS, TCP, UDP 등 여러 프로토콜을 지원하지만,

ALB에서 지원하지 않는 프로토콜로 생성할 경우 이후 생성할 ALB에서 연결 대상 목록으로 보이지 않습니다!

 

이후 상태검사 경로를 지정해줍니다.

저는 기본 경로(/var/www/html)에 index.html 파일을 생성했으므로 이를 지정해두었습니다.

 

고급 상태 검사 설정에서는 ALB가 대상을 검사할 때 정상임을 판별하기 위한 조건을 의미합니다.

 

이번 실습에서는 기본값을 유지했지만, 이를 수정해야할 때도 간혹 발생하므로 가볍게 의미만 알고 넘어가주세요!

 

아래는 지정된 포트(트래픽 포트)로 ALB에서 대상으로 지정 간격(30초)에 한 번씩 상태 체크 트래픽을 전달하며,

정상 임계 값(5번) 연속으로 상태 검사에 성공하면 성공 코드(200)과 Healthy,

비정상 임계 값(2번) 연속으로 상태 검사에 실패하면 Unhealthy를 뱉어내게 됩니다.

 

마지막으로 대상그룹에 포함될 인스턴스 목록을 선택하고, ALB에서 타겟으로 전달할때 사용할 포트를 지정해주세요!

저는 앞서 생성해둔 test-web1과 test-web2를 등록하고, 포트는 그대로 80번 포트를 사용해주었습니다.

(아래에 보류 중인 것으로 포함을 선택해 줘야 대상으로 정상적으로 등록됩니다!!)

 

3) ALB 생성

이제 로드 밸런서를 생성하겠습니다.

 

ALB를 생성하면 가장 처음으로 이름과 체계를 선택할 수 있습니다.

 

인터넷 경계는 퍼블릭 IP를 통해 트래픽을 대상으로 전달하고,

내부는 프라이빗 IP를 통해 트래픽을 대상으로 전달한다는 특징이 있습니다.

 

이번 실습은 인터넷 경계를 선택해주었습니다.

 

이제 ALB가 위치할 VPC와 서브넷을 선택합니다.

앞서 이번 ALB는 인터넷 경계로 생성되도록 선택했기 때문에, Internet Gateway가 연결되어 있는 Public Subnet을 선택해 주었습니다.

또한, ALB 역시 로드밸런서 역할을 하는 서버의 일종이기 때문에 이중화가 가능합니다!

 

이제 보안그룹과, 리스너 그리고 타켓그룹을 선택합니다.

  (1) 보안그룹: ALB는 다른 LB들과는 달리 자체 보안그룹을 가지고 있습니다.

     (저는 80, 443 포트가 ALL: OPEN 되어있는 보안그룹을 사용했습니다)

  (2) 리스너: 외부에서 ALB로 들어올 때 들어오는 포트와 프로토콜을 의미합니다.

  (3) 타겟그룹: ALB에서 타겟으로 전달할 대상, 포트 그리고 프로토콜을 의미합니다.

 

4) 생성 및 결과 확인

ALB가 정상적으로 생성되었다면, 아래와 같이 상세 정보를 확인할 수 있습니다.

여기서 주요하게 확인할 부분은 DNS 이름, 리스너 및 규칙 입니다.

 

DNS 이름을 통해 뒷단에 연결된 대상 그룹(test-web1,2)에 접근할 수 있고,

리스너 및 규칙을 통해 어떠한 사용되는 포트와 연결된 대상을 확인할 수 있기 떄문입니다.

 

이제 DNS 이름:(포트) 로 직접 서버에 설치된 아파치에 접근해보도록 하겠습니다.

(홈페이지를 계속 새로고침 해주어, AZ-a와 AZ-c가 번갈아가며 출력되는지도 확인해보세요!)

 

5) 추가 설정

이렇듯 ALB는 ALB로 들어오는 포트를 지정한 대상 그룹으로 전달해주며,

이 과정에서 로드밸런싱이 진행되는 것을 확인할 수 있었습니다.

 

ALB의 더 다양한 기능을 제대로 사용하기 위해선 추가 설정이 필수적인데요!

 

그중 하나는 리스너, 대상그룹을 추가하는 것입니다.

이를 통해 특정 포트로 들어오는 요청을 다른 대상그룹으로 전달, 리다이렉션, 고정 응답 반환 등의 기능을 사용할 수 있습니다.

만약 HTTP로 들어오는 요청을 HTTPS로 리다이렉션하여 트래픽을 조절하는 방법도 고려할 수 있겠습니다!

 

 

또 다른 하나는 ALB의 설정값을 변경하는 방법입니다.

예를 들어, 속성탭에서 ALB의 대상 선택 구성을 수정함으로써 Sticky Session으로 설정할 수 있습니다.

이를 통해 클라이언트의 요청이 지정된 서버로만 전달되도록 수정할 수 있습니다.

만약 서버 내부에서 세션을 파일로 저장하는 방식이라면 유용할 것으로 보이네요 :)

 


지금까지 로드밸런서, 그 중에서도 ALB를 생성하는 방법에 대하여 알아보았습니다.

 

이렇게 생성된 로드밸런서의 DNS는 AWS의 CloudFront라는 CDN 서비스와, Route53이라는 도메인 서비스를

조합하여 외부로 노출되는 서비스 인프라를 구성할 수 있습니다.

 

이러한 방식은 이후의 글에서 추가적으로 다뤄보겠습니다 :)

 

감사합니다.

반응형