AWS ELB 트래픽 분산

5tr1ker·2023년 6월 8일
1

aws

목록 보기
1/3
post-thumbnail

개요

우선 활용하기전에 LB ( Load Balance ) 에 대해서 간략하게 정리를 하겠습니다. 로드 밸런서는 서버 트래픽을 여러 서버 ( 여기서 AWS EC2 로 생각하면 여러 인스턴스 ) 로 분산시키는 장치입니다. 로드 밸런서로 네트워크 부하 분산을 잘 활용하면 서버의 성능 , 가용성 , 확장성을 향상시킬 수 있습니다. 뿐만 아니라 단일 서버에 집중된 트래픽을 분산하기에 서버의 부하를 줄이고 응답속도를 향상시킬 수 있습니다.

여기서 로드 밸런서는 가용성을 향상시키기 위해 분산된 트래픽을 받는 서버마다 헬스 체크 ( health check ) 라는 메커니즘을 통해 장애가 발생한 서버를 감지합니다. 헬스 체크는 로드 밸런서가 일정한 간격으로 해당 서버에 요청을 보내고, 그에 대한 응답을 확인하여 서버가 정상적으로 응답하는지 판단합니다.

만약 헬스 체크에 실패한 서버는 자동으로 제외시키며, 장애가 발생한 서버에 대한 요청은 회피합니다.

구현 목표

HTTPS 으로 들어오는 모든 요청을 받아 클라이언트 ( 3000 포트 ) 에 전달합니다. 이때 OAuth2.0 요청은 백엔드 서버의 ( 8080 포트 ) OAuth2.0 서버와 직접 연결해야 합니다.

위와 같은 그림을 보면 HTTPS ( 443 포트 ) 로 오는 모든 요청을 받아 이를 로드 밸런서에게 전달합니다.

우선 가장 먼저 /oauth2/authorization/*/login/oauth2/code/* 로 오는 모든 요청은 백엔드와 직접 연결되어야 하기 때문에 port 8080의 백엔드 서버 로 전달합니다.

그 외에 나머지 Path 로 오는 요청은 port 3000의 클라이언트 서버 로 전달됩니다.

이렇게 로드 밸런서의 트래픽 분산 기능을 활용하여 Path 마다 트래픽을 분산할 서버를 선택합니다. 여기서 Path 마다 트래픽을 분산시키기 위해 로드 밸런서 안에서 주소 기반 포트포워딩을 설정해주어야 합니다.

자세한 설정 방법은 아래에서 나타납니다.

주소 기반 포트포워딩

위와 같은 설정은 제 로드 밸런서의 Listeners -> Listeners Rules 입니다.
Route 53 과 연결된 로드 밸런서는 해당 주소의 HTTPS : 433 으로 들어오는 모든 요청을 해당 로드 밸런서가 받고 있으며 그 내부에서 각각의 우선순위에 따라 트래픽을 분산하고 있습니다.

첫번째로 Rule 1 을 보면 HTTP Path 가 /oauth2/authorization/** 로 오는 모든 요청과 두번째 Rule 2/login/oauth2/code/** 로 오는 모든 요청은 백엔드 서버로 넘겨주고 , 그 외에 요청을 클라이언트 서버로 넘겨줍니다.

이렇게 하면 OAuth2.0 서버와 연결하기 위해 위의 두 URL은 직접 백엔드에 연결해주고 나머지 요청은 클라이언트에 넘겨줍니다.

또한 백엔드와 클라이언트 각각의 인스턴스와 도메인을 구축할 필요 없이 하나의 도메인으로 백엔드 , 프론트엔드 서버에 접근할 수 있습니다.
물론 모든 API에 접근할 수 없지만 외부에서 접근해야 하는 요청이 있다면 위와 같이 설정을 할 수 있습니다.

구현 순서

  1. 먼저 Route 53 에서 도메인이 준비되어 있어야 합니다.
  2. 발급받은 도메인에 대한 인증서를 발급합니다.
  3. 로드 밸런서의 타겟 그룹을 생성합니다.
    • 여기서 타겟 그룹은 로드 밸런서로 부터 오는 요청을 받는 역할을 수행합니다.
    • 타겟 그룹의 포트는 실제 해당 인스턴스의 포트에 접속할 수 있어야 합니다.
  4. 로드 밸런서를 생성하고 3번에서 만든 타겟 그룹을 추가합니다.
    • 주소 기반의 포워딩은 여기서 생성이 안됩니다.
  5. 로드 밸런서의 주소 기반 포워딩 규칙을 생성합니다.
  6. Route 53에서 해당 도메인을 해당 로드 밸런서와 연결합니다 ( 레코드 연결 ).

해당 장면을 사진과 함께 올리기엔 양이 너무 많아서 관련 사이트로 안내합니다.
5번을 제외한 3 ~ 6번의 과정은 해당 블로그 를 참조해 주세요.

3 ~ 6 번의 과정을 모두 포함한 과정은 해당 블로그1 해당 블로그2 를 참조해 주세요.

참고

참고 블로그 1 : https://velog.io/@server30sopt/EC2-HTTPS%EB%A1%9C-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0
참고 블로그 2 : https://woojin.tistory.com/94
참고 블로그 3 : https://yoo11052.tistory.com/m/177

profile
https://github.com/5tr1ker

0개의 댓글