ELB

LeeKyoungChang·2022년 4월 8일
0
post-thumbnail

AWS 유튜브 강의를 참고하였습니다.

 

📚 9. ELB

ELB(Elastic Load Balancing) : 여러대의 작은 컴퓨터가 힘을 합쳐서 트래픽을 감당할 수 있게 해주는 기술

스크린샷 2022-04-05 오전 10 10 48

 

📖 A. ELB(로드밸런서)가 무엇인가?

로드밸런서(ELB) : 다수의 인스턴스들을 한 곳에 묶어서 트래픽을 분산해주는 서비스
Load : 부하
Balancer : 분배

스크린샷 2022-04-08 오후 12 46 17

✏️ ELB가 없을 때는?
Auto Scaling group에 있는 인스턴스의 정보들을 알아야 접근할 수 있다.

  • 클라이언트 입장에서는 인스턴스 ip 주소를 알아야 접근할 수 있다.
  • 인스턴스가 삭제되었다가 새로 삽입될 때, ip 주소를 추가하거나 별도로 조치 취하지 않으면 접근할 수 없다.
  • 인스턴스가 굉장히 많을 때, 상당히 관리하기 힘들다.

 

✏️ ELB가 있을 때는?

  • 유저 입장에서는 하나의 주소로 접근하면 로드밸런서가 인스턴스를 맞추어 준다.
  • 새로운 인스턴스가 로드밸런서 등록되면 부하에 분산시켜준다.

 

🔔 그래서 Elastic Load Balancing이 무엇인가?

  • Elastic Load Balancing은 들어오는 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수와 같은 여러 대상에 자동으로 분산시킨다.
  • Elastic Load Balancing은 단일 가용 영역 또는 여러 가용 영역에서 다양한 애플리케이션 부하를 처리할 수 있다.
  • Elastic Load Balancing이 제공하는 세 가지 로드 밸런서는 모두 애플리케이션의 내결함성에 필요한 고가용성, 자동 확장/축소, 강력한 보안을 갖추고 있다.

 

📝 ELB 특징

  • 다수의 서비스에 트래픽을 분산 시켜주는 서비스
  • Health Check : 직접 트래픽을 발생시켜 Instance가 살아있는지 체크한다.
  • Autoscaling과 연동 가능하다.
  • 여러 가용영역에 분산 가능하다.
  • 지속적으로 IP 주소가 바뀌며 IP 고정 불가능 : 항상 도메인 기반으로 사용한다.
  • 4가지 종류가 있다.
    • Application Load Balancer
    • Network Load Balancer
    • Classic Load Balancer
    • Gateway Load Balancer

 

✔️ ELB의 4가지 종류

(1) Application Load Balancer

  • 똑똑한 녀석
  • 트래픽을 모니터링 하여 라우팅 가능하다.
    • ex) image.sample.com → 이미지 서버로, web.sample,com → 웹 서버로 트래픽 분산

 

(2) Network Load Balancer

  • 빠른 녀석
  • TCP 기반 빠른 트래픽 분산
  • Elastic IP 할당 가능

 

(3) Classic Load Balancer

  • 옛날에 많이 사용함
  • 예전에 사용되던 타입으로 현재는 잘 사용하지 않는다.

 

(4) Gateway Load Balancer

  • 먼저 트래픽 체크하는 녀석
  • 가상 어플리케이션 배포/확장 관리를 위한 서비스
스크린샷 2022-04-08 오후 12 51 06

 

📖 B. 대상 그룹(Target Group)와 아키텍처

대상 그룹 : ALB가 라우팅 할 대상의 집합

  • 구성 : 3 + 1가지 종류
    • Instance
    • IP (private O, public X)
    • Lambda (서버리스 서비스 : 간단하게 코드 실행시킴)
    • ALB (다른 ALB와 연결) (+1)
  • 프로토콜(HTTP, HTTPS, gRPC 등)
  • 기타설정
    • 트래픽 분산 알고리즘
    • 고정세션 등

 

✔️ 대상 그룹 종류

대상 그룹 : 분산할 때 어디로 분산할 것인지 모은 그룹

스크린샷 2022-04-08 오후 1 02 53

먼저 User가 ALB를 통해 통신을 한다. (ALB를 통해 분산할 수 있다.)

  • 대시보드 대상 그룹으로 트래픽을 전송한다.
  • 웹 서버 대상 그룹으로 트래픽을 전송한다.
    • 웹 서버 대상 그룹을 Auto Scaling으로 등록할 시, 장애 내부성 등을 확보할 수 있다.
  • 이미지서버 대상 그룹으로 트래픽을 전송한다.
  • 람다 함수 대상 그룹으로 트래픽을 전송한다.

 

✔️ 아키텍처

스크린샷 2022-04-08 오후 1 09 27
  • Auto Scaling group을 통해 EC2를 분산시켜놓았다.
  • 이와 같이 EC2로 구성된 어플리케이션은 고가용성, 장애 내부성까지 확보할 수 있다.

 

📖 C. 실습

1. AutoScaling 때 만들었던 템플릿 수정

스크린샷 2022-04-08 오후 1 58 26

고급 세부 정보에 추가
사용자 데이터에 추가 : EC2 인스턴스가 올라갈 때 자동으로 화면으로 띄우겠다.

#!/bin/bash
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
yum  install httpd -y
echo ""$INSTANCE_ID"" >> /var/www/html/index.html
service httpd start
  • INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
    INSTANCE : 각각의 인스턴스 id (meta 정보)를 가져올 수 있다.

  • yum install httpd -y : 웹 서버 설치

  • echo ""$INSTANCE_ID"" >> /var/www/html/index.html : index.html 에 받아온 인스턴스 id를 는다.

  • service httpd start : 웹서버를 실행시킨다.

 

✔️ AutoScaling 수정

스크린샷 2022-04-08 오후 2 02 41
  • 시작 템플릿에서 편집 클릭

 

스크린샷 2022-04-08 오후 2 03 17
  • 버전은 템플릿 수정 후, 발급 받은 버전으로 변경한다.

➡️ 새로 올린 템플릿을 적용하기 위해 편집하였다.

 

스크린샷 2022-04-08 오후 2 02 48 스크린샷 2022-04-08 오후 2 07 39
  • 원하는 용량 : 2, 최소용량 : 2로 변경

 

➡️ Auto Scaling만 적용했을 때, 인스턴스는 빈 인스턴스만 등록되었다.
➡️ ELB를 적용한 후, Auto Scaling을 적용했기 때문에, (사용자 데이터에 추가한 것) 미리 정해진 스크립트을 실행한 버전에 올라가게 된다. (접속했을 때 볼 수 있게 만든 것이다.)

 

스크린샷 2022-04-08 오후 2 32 42

 

웹에서 주소 입력시 인스턴스 ID가 나온다.

스크린샷 2022-04-08 오후 3 08 32스크린샷 2022-04-08 오후 3 09 52

 

2. 로드 밸런싱

(2-1) 대상 그룹 생성

먼저 대상 그룹을 생성한다.
스크린샷 2022-04-08 오후 4 24 13

 

타겟 그룹 이름만 설정한다.
스크린샷 2022-04-08 오후 4 24 53

 

이용할 수 있는 인스턴스들을 검토하기 위해 포함한다.
스크린샷 2022-04-08 오후 4 25 56

 

대상 그룹이 생성되었다.

스크린샷 2022-04-08 오후 4 26 25

 

(2-2) 로드 밸런서 생성

Application Load Balancer 선택
스크린샷 2022-04-08 오후 4 30 43

 

스크린샷 2022-04-08 오후 4 31 43
  • balancer name : MyWebALB

 

스크린샷 2022-04-08 오후 4 32 06
  • Network mapping에서 Mapping에 ap-northeast 추가(선택)

 

스크린샷 2022-04-08 오후 4 32 30

리스너 및 라우팅

  • 미리 만들었던 대상 그룹을 지정한다.
  • HTTP 80번으로 통신할 시 MyWebTargetGroup으로 연결시키겠다. (조건에 따라 연결시키겠다.)

 

스크린샷 2022-04-08 오후 4 34 28

생성 완료!

 

스크린샷 2022-04-08 오후 4 40 02

DNS 이름을 웹 주소에 입력할 시

 

스크린샷 2022-04-08 오후 4 41 01스크린샷 2022-04-08 오후 4 41 04

  • f5를 실행할 때마다, 다른 결과가 출력된다.
  • 두 개의 인스턴스를 번갈아가며 트래픽을 분산해준다.
  • 하나의 target 그룹에 있지만 새로고침을 할 때마다, 다른 인스턴스가 로딩된다. (다른 index.html이 실행됨)

 

(2-3) 로드 밸런서를 Auto Scaling에 붙여보기

AutoScaling을 통해 대상 그룹에 들어가게 된다.

스크린샷 2022-04-08 오후 4 46 41

 

스크린샷 2022-04-08 오후 4 47 51
  • Auto Scaling에서 로드 밸런싱 편집

 

스크린샷 2022-04-08 오후 4 48 17
  • 이전에 생성한 대상 그룹을 선택한다.

 

스크린샷 2022-04-08 오후 4 48 32
  • 이제부터 생성되는 MyASG(Auto Scaling)에서 생성되는 인스턴스들은 위에서 생성한 대상 그룹(MyWebTargetGroup)에 들어가게 된다.

  • 대상 그룹 들어갔다는 의미 : 지정한 로드 밸런서가 트래픽을 분산하는 대상이 된다.

➡️ Auto Scaling에서 생성되는 인스턴스들은 대상 그룹에 들어가게 되고, 대상 그룹에 들어오는 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수와 같은 여러 대상에 자동으로 분산시킨다.

 

✔️ 인스턴스 용량 변경 테스트

스크린샷 2022-04-08 오후 4 52 20
  • 용량을 3으로 변경하였다.
  • 이제 ALB가 트래픽을 분산하는 대상이 되었다.

 

Auto Scaling에서 용량을 3으로 변경하였을 때,

스크린샷 2022-04-08 오후 5 00 38
  • 인스턴스 3개가 생성되었다.

 

스크린샷 2022-04-08 오후 5 01 59
  • 대상 그룹에서 보니 생성된 인스턴스가 3개가 포함된 것을 확인할 수 있다.

 

스크린샷 2022-04-08 오후 5 07 10 스크린샷 2022-04-08 오후 5 07 17 스크린샷 2022-04-08 오후 5 07 22
  • 로드 밸런서에서 발급받은 DNS 주소로 확인해본 결과, 새로 고침할 때마다 다른 화면이 나오며 총 3개의 다른 화면이 나온다.

 

(2-4) AutoScaling에서는 정상적이지만, ELB에서는 비정상적일 때

  • EC2 올라갔지만, 웹 서버는 죽게 되었을 때
  • 로드 밸런서 입장에서는 웹 서버 죽으면 보여줄께 없어 비정상적이다.
  • AutoScaling에서는 웹 서버 상태와는 관계가 없고, EC2가 정상적으로 올라가면 된다. (올라가다 → 실행되다)

 

✔️ 테스트 하기 위해 인스턴스 하나 정지시키기

인스턴스 연결은 한 후,
sudo -s
service httpd stop

이럴 경우 외부로 아무것도 보여주지 않겠다!

스크린샷 2022-04-08 오후 5 22 06

로드 밸런서가 트래픽 분산해주기 위해 요청을 했지만 인스턴스가 아무런 트래픽을 주지 않았다. 그래서 어떤 걸 해야할지 모를 때 502에러 발생

 

이럴 경우, 서버는 올라가있지만 웹 서버가 올라가 있지 않으므로 트래픽도 주지 못하므로 재부팅을 시켜야 한다.
Auto Scaling이 이를 해준다.

상태 확인에서 편집

스크린샷 2022-04-08 오후 5 26 33

 

ELB 선택

스크린샷 2022-04-08 오후 5 28 12 스크린샷 2022-04-08 오후 5 48 03
  • EC2ELB 상태 확인을 공유한다. (볼 수 있다.)
  • ELB가 알아서 상태 확인한 후, 오류가 발생한 인스턴스는 멈추거나 없앤다. (없애고 새로운 인스턴스 생성한다.)

➡️ 적용시, Auto Scaling 그룹에서 인스턴스 활동을 자동으로 체크하고 필요없는 것들은 없애준다. (AutoScaling 특성상 인스턴스를 없애면, 인스턴스 최저 개수에 맞추어 인스턴스들을 다시 만들어 준다.)

 

💡 참고
✔️ ELB를 생성하기 전
이전에 인스턴스 하나 생성한다.
생성 후, Ubuntu에서 sudo apt update, sudo apt install apache2 php 을 한다.

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글