AWS 인프라 구축 ‐ (10) ELB - ttasjwi/board-system GitHub Wiki
ELB란
Elastic Load Balancer : 탄력적 부하 분산기
트래픽(부하)을 적절하게 분배해주는 장치
서버를 2대 이상 가용할 때 ELB를 필수적으로 도입하게 된다.
여기엔 부가 기능이 더 있는데, SSL/TLS(HTTPS) 적용 기능이 있다. 이는 뒤의 글에서 다룬다. (사실 이게 목적이다.)
ELB 보안그룹 생성
EC2 인바운드 규칙 수정
EC2의 80번 포트 접근 설정에서, ELB 보안그룹을 허용
ELB 생성
EC2 -> 로드밸런서 -> 애플리케이션 로드 밸런서
HTTP, HTTPS에 대한 특징을 활용하기 위함
서로 다른 두 AZ 의 Subnet 이 필요하다.
보안그룹을 연결해둔다.
대상그룹을 새로 만들어야한다.
인스턴스 단위로 보안그룹을 생성
ELB와 EC2 가 어떻게 통신하는지 설정하는 부분이다. EC2의 Nginx 서버는 80번 포트에서 실행되고 있다. 이곳으로 포워딩하도록 한다.
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 를 하면 된다.