AWS 인프라 구축 ‐ (10) ELB - ttasjwi/board-system GitHub Wiki

ELB란

  • Elastic Load Balancer : 탄력적 부하 분산기
  • 트래픽(부하)을 적절하게 분배해주는 장치
  • 서버를 2대 이상 가용할 때 ELB를 필수적으로 도입하게 된다.
  • 여기엔 부가 기능이 더 있는데, SSL/TLS(HTTPS) 적용 기능이 있다. 이는 뒤의 글에서 다룬다. (사실 이게 목적이다.)

ELB 보안그룹 생성

image


EC2 인바운드 규칙 수정

  • EC2의 80번 포트 접근 설정에서, ELB 보안그룹을 허용

ELB 생성

image

  • EC2 -> 로드밸런서 -> 애플리케이션 로드 밸런서
  • HTTP, HTTPS에 대한 특징을 활용하기 위함

image

image

  • 서로 다른 두 AZ 의 Subnet 이 필요하다.

image

  • 보안그룹을 연결해둔다.

image

  • 대상그룹을 새로 만들어야한다.

image

  • 인스턴스 단위로 보안그룹을 생성

image

  • ELB와 EC2 가 어떻게 통신하는지 설정하는 부분이다. EC2의 Nginx 서버는 80번 포트에서 실행되고 있다. 이곳으로 포워딩하도록 한다.

image

  • ELB의 부가 기능으로 상태 검사(= Health Check, 헬스 체크) 기능이 있다.
    • 실제 ELB로 들어온 요청을 대상 그룹에 있는 여러 EC2 인스턴스로 전달하는 역할을 가진다. 그런데 만약 특정 EC2 인스턴스 내에 있는 서버가 예상치 못한 에러로 고장났다고 가정해보자. 그럼 ELB 입장에서 고장난 서버한테 요청(트래픽)을 전달하는 게 비효율적인 행동이다.
    • 이런 상황을 방지하기 위해 ELB는 주기적으로(기본 30초 간격) 대상 그룹에 속해있는 각각의 EC2 인스턴스에 요청을 보내본다. 그 요청에 대한 200번대(HTTP Status Code) 응답이 잘 날라온다면 서버가 정상적으로 잘 작동되고 있다고 판단한다.
    • 만약 요청을 보냈는데 200번대의 응답이 날라오지 않는다면 서버가 고장났다고 판단해서, ELB가 고장났다고 판단한 EC2 인스턴스로는 요청(트래픽)을 보내지 않는다.
    • 이러한 작동 과정을 통해 조금 더 효율적인 요청(트래픽)의 분배가 가능해진다.
  • 헬스체크 api 이다. 우리 서비스에서는 /api/v1/deploy/health-check API 를 별도로 만들어놨고, 이곳을 통해 Health-Check 를 하면 된다.

image

  • 만들어둔 EC2를 선택하고, 대상으로 등록한다.

image

  • 다시 돌아와서, 대상그룹 연결.
  • 다른 옵션은 건들지 않고 생성.

image

  • 로드밸런서가 활성화되는 것을 확인한다.
  • DNS 이름을 확인한다.

image

  • 실제 DNS 80번 포트를 통해 접근하면 API 호출에 성공한다.