Cloud Architect/AWS

Auto Scaling을 통해 고가용성 환경 구축하기

sangwonYoon 2023. 8. 2. 22:55

비용 문제로 낮은 사양의 EC2 인스턴스에 웹 서버를 서빙하다보니, 트래픽이 몰리거나 업데이트를 진행할 때 서버에 장애가 발생하는 문제가 종종 발생했다. 이러한 문제가 발생할 때마다 자동으로 서버의 장애를 파악하고 새로운 인스턴스를 실행시켜 장애가 발생한 서버를 대체할 수 있도록 Auto Scaling을 활용하기로 결정했다.

 

먼저, 장애가 발생한 인스턴스를 교체하기 위해 새롭게 실행되는 인스턴스에 자동으로 웹 서버를 실행시켜야 하기 때문에 웹 서버의 이미지를 생성한다.

여기서 이미지는 도커 이미지와 유사한 개념으로, 웹 서버의 이미지를 사용해 새로운 인스턴스를 실행시키면 기존 웹 서버와 동일한 정보를 가진 인스턴스가 생성된다.

EC2 인스턴스 선택 > 작업 > 이미지 및 템플릿 > 이미지 생성을 클릭한다.

 

생성될 이미지의 이름을 입력한다.

재부팅 안 함을 활성화하면, EC2 인스턴스를 재부팅하지 않지만, 생성된 이미지의 파일 시스템 무결성을 보장할 수 없으므로, 활성화하지 않는 것을 추천한다.

나머지는 모두 기본 값으로 두고, 이미지를 생성했다.

 

좌측 AMI 탭에 들어가 잠시 기다리면 이미지가 생성된 것을 확인할 수 있다.

 

Auto Scaling 그룹을 생성한 뒤 찍은 스크린 샷이다. 처음 Auto Scaling 그룹을 생성한다면 아무것도 없는 것이 정상이다.

웹 서버의 이미지를 생성했으므로, Auto Scaling 그룹을 생성할 차례이다. Auto Scaling은 주로 트래픽이나 CPU 사용량과 같은 지표에 따라 서버의 개수를 적절하게 조절하기 위해 자주 사용되지만, 내가 이번에 Auto Scaling을 사용하는 목적은 웹 서버의 장애를 주기적으로 검사하고, 정상적으로 실행되는 서버의 개수를 일정하게 유지하기 위해 사용했다.

좌측 Auto Scaling 그룹 탭에서 Auto Scaling 그룹 생성 버튼을 눌러 다음 페이지로 이동한다.

 

Auto Scaling 그룹의 이름을 입력한 뒤, 시작 템플릿을 생성해야 한다. 시작 템플릿이란 Auto Scaling 그룹에서 새로운 인스턴스가 추가될 때, 어떤 구성의 인스턴스를 생성할 지 정의하는 템플릿이다.

시작 템플릿 생성 버튼을 눌러 새로운 탭에서 시작 템플릿을 생성한다.

 

시작 템플릿을 생성하는 화면에서 애플리케이션 및 OS 이미지를 선택하는 항목이 존재한다.

여기서 내 AMI를 누른 뒤, 앞서 생성한 이미지를 선택한다.

 

그 외에 EC2 인스턴스를 새롭게 만드는 것처럼 인스턴스 유형, 키 페어, 보안 그룹 등을 설정한다.

 

그 다음, 페이지 가장 밑으로 내려가 고급 세부 정보 탭을 연다.

 

가장 밑으로 내려가보면 사용자 데이터를 입력하는 부분이 있다. 여기서 #!/bin/bash를 첫 줄에 입력한 뒤, bash 명령어를 입력해주면 인스턴스가 시작된 이후 해당 명령어를 수행한다.

나는 인스턴스가 켜지자마자 웹 서버를 자동으로 시작하기 위해 nginx를 실행하는 명령어를 입력해주었다.

나는 이렇게 설정을 완료하고 시작 템플릿을 생성했다.

 

다시 Auto Scaling 그룹을 생성하는 탭으로 돌아와 새로고침 버튼을 누르고, 방금 생성한 시작 템플릿을 선택한다.

 

다음 화면에서는 Auto Scaling 그룹의 인스턴스가 위치할 VPC와 가용 영역 및 서브넷을 선택한다. 서울 리전에서는 2a 2c 가용 영역을 많이 사용한다고 들었기 때문에 두 가용 영역을 선택해 주었다.

 

그 다음, 웹 서버와 연결되어 있던 로드 밸런서와 Auto Scaling 그룹을 연결한다. 이제 Auto Scaling 그룹은 로드 밸런서의 대상 그룹이 된다.

 

웹 서버에 장애가 발생했는지 주기적으로 체크해야 하기 때문에 Elastic Load Balancer의 상태 확인을 활성화한다.

 

그룹 크기 및 크기 조정 정책 구성에서 Auto Scaling 그룹의 크기를 동적으로 조정하기 위한 규칙을 생성할 수 있지만, 나는 정상적으로 동작하는 웹 서버를 2대로 유지하기 위한 목적으로 사용하는 것이므로 원하는 용량최소 용량최대 용량 모두 2로 세팅했다. 이렇게 설정하면 Auto Scaling 그룹의 크기는 항상 2로 유지된다.

알림과 태그는 생략하고 Auto Scaling 그룹 생성을 완료했다.

 

기존에 사용하던 웹 서버의 인스턴스를 종료한 뒤, 웹 서버의 대상 그룹을 확인하면 2대가 정상적으로 실행되고 있음을 확인할 수 있다. 이제 브라우저에서 요청을 보내면, 2대의 웹 서버에 트래픽이 분산되어 전달되고, 웹 서버 인스턴스의 장애를 수동적으로 처리할 필요 없이 자동으로 failover할 수 있는 환경을 구축했다.