로드밸런서(ELB)란?
앞에서 탄력적 IP를 활용하여 고정된 IP 주소를 각 EC2 인스턴스에 부여하는 방법을 알아보았다. 하지만 이러한 방법은 문제점이 있다. 하나의 인스턴스에 하나의 도메인만 연결할 수 있다는 것이다. 그런데 서버에 많은 사람들이 몰려 많은 트래픽이 발생한다면 서버의 사양을 올리는 스케일업, 서버의 개수를 늘리는 스케일아웃을 고려해야한다. 만약 스케일아웃을 한다면 서버가 늘어날 때마다 도메인이 새로 필요하게 된다.
로드밸런서(ELB)는 서비스 중에 EC2의 성능이 부족한 경우 한 곳의 엔드포인트로 들어오는 트래픽을 각 인스턴스에 분산시켜준다. ELB의 특징은 다음과 같다.
💡 트래픽 분산
💡 자동 확장
💡 인스턴스의 상태를 자동 감지해서 오류가 있는 시스템은 배제
💡 사용자 세션을 특정 인스턴스에 고정
💡 SSL 암호화 지원
💡 SSL의 경유지로 ELB를 사용하는 경우에 SSL 처리에 따른 부하를 ELB가 수용하게 된다.
💡 IPv4, IPv6 지원
💡 CloudWatch를 통해서 모니터링
💡 사용한 시간과 통과한 트래픽에 따라서 종량제로 과금
ELB 생성하기
로드밸런서로 들어가서"Load Balancer 생성"을 클릭한다.
가장 먼저 로드 밸런서 유형을 선택해야한다. 유형은 4가지가 존재한다. 그 중 우리는 7계층 애플리케이션 계층에서 동작하는 Application Load Balancer을 선택할 것이다. 클래식 로드 밸런서는 4계층 전송계층에서 동작한다.
아래에서 이제 타겟 그룹을 생성할건데, 타겟 그룹이란 EC2 인스턴스를 오토 스케일링할 수 있는 단위로 사용된다. 클래식 로드 밸런서의 경우 서버의 기본주소가 바뀌면 로드 밸런서를 새로 생성해야하며 하나의 주소에 하나의 타겟 그룹으로 보내게 된다. 또한 4계층에서 동작하여 데이터를 수정, 변경할 수 없기 때문에 포트나 헤더를 변경할 수 없다.
반면에 애플리케이션 로드 밸런서는 PATH나 포트 등에 따라 다른 타겟 그룹으로 매핑할 수 있다. 특히 포트 단위로 연결해줄 수 있는 것은 Docker 컨테이너 환경에서 유용하게 작동될 수 있고, 하나의 타켓 그룹에 더 많은 컨테이너를 넣어 비용을 최적화할 수 있다.
다음으로 넘어가서 로드 밸런서 이름, 스키마, IP 주소 타입 등을 설정한다.
매핑의 경우 A, C 혹은 B, D를 체크해준다.
만약 타켓 그룹이 없다면, create target group을 눌러 타겟 그룹을 새로 생성한다. 타겟그룹은 일반적으로 오토스케일링을 위한 단위이다.
타켓 그룹은 아래와 같이 설정해주었다. 현재 Flask로 테스트를 할 예정이므로 포트번호를 5000으로 설정했다. 포로토콜 버전의 경우 원래 HTTP1은 보안상 좋지 않지만, 일단 테스트용이므로 그대로 두었다.
이제 로드 밸런서를 생성 완료해주면 아래와 같이 '활성' 상태인 ELB가 생성된다.
EC2 수동으로 추가하기
EC2 하나를 더 추가하기 위한 가장 간단한 방법은 이전에 작업했던 것처럼 EC2를 만들어서 추가하는 것이다. 로드 밸런싱>대상그룹으로 들어간다.
원하는 인스턴스를 선택하여 대상 그룹에 추가한다.
EC2 자동으로 추가하기
수동으로 EC2를 추가하는 것도 가능하지만, 언제 트래픽이 많아질지 예상하고 EC2를 수동으로 추가할 수만은 없다. 따라서 EC2가 자동으로 추가될 수 있도록 설정해보자.
EC2를 자동생성 해서 추가되게 만들려면 우리가 EC2 생성할때 지정한 이미지처럼 베이스 이미지가 필요하다. EC2 인스턴스에서 이미지 및 템플릿 > 이미지 생성을 클릭한다. 이미지명을 입력한 후 생성한다.
이미지 명을 입력하고 생성한다. 생성 후 '상태'가 available이 될 때까지 기다려야한다.
Auto Scaling 활용하기
EC2 왼쪽 메뉴 > Auto Scaling > 시작 구성으로 들어간다.
이름과 AMI를 선택한다. 인스턴스 유형은 프리티어로 사용하려면 t2.micro로 선택해야한다.
보안그룹는 '기존 보안 그룹 선택'을 클릭해서 기존의 EC2에서 사용하는 보안그룹을 선택해준다.
키페어도 기존 키페어를 선택한 후 생성을 완료한다.
Auto Scaling 그룹 만들기
EC2 왼쪽 메뉴 > Auto Scaling > Auto Scaling Groups로 들어간다.
Auto Scaling 그룹 이름을 입력하고 '시작 구성으로 전환'을 클릭한다. 그러면 앞에서 생성했던 이미지를 선택할 수 있다.
설정 구성을 설정해준다.
고급 옵션 구성의 경우 '기존 로드 밸런서에 연결'을 선택한다.
그룹 크기 및 조정 정책 구성까지 선택하고 "다음" 버튼을 누르면 생성이 완료된다.
처음에는 상태에 "용량 업데이트 중"이라고 뜰 것이다. 업데이트가 완료될 때까지 시간이 좀 걸릴 수도 있으니 기다려야한다.
https://velog.io/@mingtorr/AWS-ELB-%EB%9E%80
'AWS > 실습 기록' 카테고리의 다른 글
AWS RDS 데이터베이스 생성과 설정 방법 (0) | 2021.09.23 |
---|---|
ElasticBeanstalk를 활용하여 서버 구성 자동화하기 (0) | 2021.09.18 |
AWS EC2 탄력적 IP 사용하기 (EC2 IP주소 고정하기) (0) | 2021.09.17 |
AWS CloudFront과 S3 연동 방법 알아보기 (0) | 2021.09.17 |
Boto3를 활용한 AWS S3 파이썬 연동 및 S3 정적호스팅 기능을 활용해 외부에 공개하기(feat. S3 비용 계산) (0) | 2021.09.17 |