Load Balancer와 Auto Scaling을 사용하여 확장성과 가용성을 향상

Load Balancer와 Auto Scaling을 사용하여 웹서버의 확장성과 가용성을 향상시켜 보았습니다.
2022.04.29

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Load Balancer와 Auto Scaling을 사용하여 웹서버의 확장성과 가용성을 향상시켜 보았습니다.

하고 싶은 것

이번 블로그에서는 Load Balancer를 생성해서 트래픽을 분산하고, Auto Scaling을 통해서 EC2 인스턴스를 확장해 나가는 웹 서버를 구축해보고자 합니다.

VPC 생성

먼저 VPC, Subnet 등등을 생성하기 위해, VPC로 들어온 다음「VPC 마법사로 시작」버튼을 클릭합니다.

VPC 마법사로 들어오면 VPC, Subnet, NAT Gateway등등을 간단하게 설정하고 생성할 수 있습니다.

  • 가용영역 : 3
  • 퍼블릭 서브넷 수 : 3
  • 프라이빗 서브넷 수 : 3
  • NAT Gateway : 1개의 AZ에서
  • VPC 엔드포인트 : 없음

으로 설정하고 생성을 끝마칩니다.

Load Balancer 생성

EC2에서 로드 밸런서 카테고리로 들어온 다음「로드 밸런서 생성」버튼을 클릭합니다.

Application Load Balancer를 선택합니다.

  • 로드 밸런서 이름 : test-alb
  • 체계 : 인터넷 경계
  • IP 주소 유형 : IPv4

이전에 생성한 VPC를 선택하고, 서브넷은 Public Subnet을 선택합니다.

보안 그룹은 새로 하나 생성합니다.

HTTPS로 뚫어주고, 다시 로드 밸런서 생성으로 돌아와서 생성한 보안 그룹을 선택해줍니다.

프로토콜을 HTTPS로 변경하고, 대상 그룹 생성을 클릭합니다.

프로토콜은 HTTP로 변경한 다음 타겟 그룹 생성을 끝마칩니다.

다시 로드 밸런서 생성으로 돌아와서, 조금 전 생성한 타겟 그룹을 추가합니다.

그리고 보안 리스너 설정에서는 ACM에 등록된 SSL 인증서를 선택합니다.

인증서 등록 방법은 아래 블로그를 참고해 주세요.

미지막으로 Route53에서 레코드를 생성합니다.

레코드 이름은 alb로 시작하는 이름으로 설정했고, 값/트래픽 라우팅 대상에는 조금 전 생성한 로드 밸런서를 선택합니다.

Auto Scaling 생성

시작 템플릿 생성

EC2 시작 템플릿으로 들어와서「시작 템플릿 생성」버튼을 클릭합니다.

적절하게 이름과 설명을 씁니다.

리눅스용 AMI를 선택합니다.

여기서 주의할 점은 t2.micro의 경우 ap-northeast-2a, ap-northeast-2c의 가용영역 밖에 사용하지 못하기 때문에 ap-northeast-2a, ap-northeast-2b, ap-northeast-2c 3개의 가용영역을 사용하기 위해서는 다른 인스턴스 유형을 선택할 필요가 있습니다.

그리고 키 페어도 선택합니다. (없는 경우 만들어줍니다.)

보안 그룹의 경우 기존에 생성한 보안 그룹이 없다면 새로 하나 만들어줍니다.

보안 그룹의 인바운드 규칙은 다음과 같습니다.

마지막으로 사용자 데이터에 아파치 웹 서버를 설치하는 명령어를 넣습니다.

#!/bin/bash
# Use this for your user data (script from top to bottom)
# install httpd (Linux 2 version)
yum update -y
yum install httpd-2.4.51 -y
systemctl start httpd
systemctl enable httpd
httpd -v
cp /usr/share/httpd/noindex/index.html /var/www/html/index.html

이어서 시작 템플릿에서 작업 -> 템플릿으로 인스턴스 시작 버튼을 클릭합니다.

서브넷은 Private Subnet을 선택합니다.

그 외에, IAM Role을 넣고 싶은 경우 고급 세부 정보에서 IAM 인스턴스 프로파일에서 Role을 선택합니다.

나머지는 디폴트 값으로 인스턴스를 시작합니다.

AMI 생성

이제 AMI를 생성하기 위해서 작업 -> 이미지 및 템플릿 -> 이미지 생성을 클릭합니다.

이미지 이름만 입력하고 나머지는 디폴트 값으로 AMI 생성을 끝마칩니다.

시작 구성 생성

이제 Auto Scaling에서 시작 구성 생성 버튼을 클릭합니다.

AMI에는 조금 전 생성한 AMI를 선택하고, 인스턴스 유형도 환경에 맞게 설정 하면 됩니다.

(여기서 주의할 점은 t2.micro의 경우 ap-northeast-2a, ap-northeast-2c의 가용영역 밖에 사용하지 못하기 때문에 ap-northeast-2a, ap-northeast-2b, ap-northeast-2c 3개의 가용영역을 사용하기 위해서는 다른 인스턴스 유형을 선택할 필요가 있습니다.)

인스턴스 생성시, 설정하고 싶은 IAM Role이 있다면 IAM 인스턴스 프로파일에서 IAM Role을 선택합니다.

기존에 만들어 두었던 인스턴스의 보안 그룹을 선택하고, 키 페어를 선택한 다음 시작 구성 생성을 끝마칩니다.

Auto Scaling 그룹 생성

이제 Auto Scaling 그룹을 생성하기 위해서 작업 -> Auto Scaling 그룹 생성을 클릭합니다.

시작 구성을 선택하고 다음으로 넘어갑니다.

VPC를 선택하고, 3개의 가용영역을 선택합니다.(Private Subnet을 선택합니다.)

기존 로드 밸런서에 연결을 선택하고, 타겟 그룹을 선택합니다.

그룹 크기는, 기본 적으로 생성 될 인스턴스 수를 3으로 하고, 최대를 4로 합니다.

대상 값을 기준으로 EC2 인스턴스의 용량을 줄이거나 늘립니다.

나머지는 디폴트 값으로 Auto Scaling 그룹 생성을 끝마칩니다.

테스트

Auto Scaling 그룹을 확인해 보면, 인스턴스 3대가 각각 3곳의 가용영역에 생성 되어 있는 것을 확인할 수 있고, 상태도 Healthy인 것을 확인할 수 있습니다.

인스턴스에소 확인해 보면, 처음 생성 했었던 AMI용 인스턴스를 제외하고 추가로 3대의 인스턴스가 생성된 것을 확인할 수 있습니다.

  • alb.xxxx.com

마지막으로 Route53에서 설정했던 도메인 값으로 접속해 보면, 성공적으로 아파치 웹 페이지가 표시되는 것을 확인할 수 있습니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !

참고