AWS

AWS Route53 Failover를 활용한 고가용성 웹 사이트 구축

Joon0464 2021. 6. 29. 20:45

1. 구성도

  • 평상시: 클라이언트가 ticketing.pw로 접속을 시도하면 CloudFront로 라우팅 되어 서울리전의 ELB을 통해 WEB서버로 접속된다.
  • 서울리전 장애 발생시: Route53 HealthCheck이 서울리전의 비정상을 감지하고 Route53의 Failover 정책에 따라 클라이언트가 ticketing.pw로 접속을 시도하면 버지니아의 ELB로 라우팅 되어 WEB서버로 접속된다.

 

2. Route 53 Hosted Zone 생성

Route53 콘솔 화면에서 다음과 같이 클릭한다.
서비스 할 도메인 이름을 호스팅 영역으로 생성한다.
ticketing.pw가 호스팅 영역으로 생성되었다. 생성된 도메인을 클릭한다.
해당 도메인에 대한 4개의 네임 서버를 볼 수 있다. 이 값들을 도메인을 구매한 사이트에서 네임 서버로 등록해줘야 한다.

3. 네임 서버 변경 (Hosting.kr에서 도메인 구매 했을 때 기준)

자신이 구매한 도메인 판매 사이트에 로그인 하고 도메인 관리 페이지로 들어간다.(다른 도메인 판매 사이트도 비슷)
구매한 도메인에 대하여 DNS 관리 페이지도 들어간다.
네임 서버 변경을 위해 수정 아이콘을 클릭한다.
Route 53에서 확인한 4개의 네임 서버를 등록해준다.

4. 인증서 생성

반드시 버지니아 리전에서 생성해야한다. 버지니아에서 생성한 인증서는 모든 리전에서 사용이 가능하지만 다른 리전에서 생성하면 해당 리전에서만 인증서 사용이 가능하다.

또한, 위에서 진행한 과정인 네임 서버를 반드시 등록한 상태여야 한다.

ACM(Amazon Certificate Manager)에서 인증서 프로비저닝 시작하기를 클릭한다.
공인 인증서 요청을 선택한다.
서비스 할 도메인 명을 적는다. *.ticketing.pw는 www.ticketing.pw, blog.ticketing.pw 등을 모두 포함한다.
DNS 검증이 더 수월하므로 DNS 검증을 선택한다.
원하는 태그를 지정한다.
검토를 마치고 확인 및 요청을 클릭한다.
Route 53 레코드 생성을 클릭하면 CNAME 레코드가 호스팅 영역에 생성되면서 DNS 검증이 자동으로 완료된다.
인증이 완료될 때까지 시간이 최대 30분 소요되며 인증이 완료되면 상태가 발급 완료로 변경된다.

5. 웹 서버의 정적 파일 업로드를 위한 S3 및 CloudFront Distribution 생성

S3 버킷 만들기를 선택한다.
서울 리전에 버킷을 생성한다.
퍼블릭 엑세스 차단을 풀어준다.
버킷 버전 관리를 활성화해야 이후 버킷 복제 규칙을 생성할 수 있다.
생성된 버킷을 확인한다.
CloudFront 메인 콘솔로 넘어가서 Distribution을 생성한다.
 생성한 S3를 선택하고 반드시 ticket-s3-web.ap-northeast-2.amazonaws.com로 Domain Name을 Regional Domain Name으로 바꿔줘야 정상적으로 잘 작동한다.

나머지 모든 설정은 기본값으로 두고 Distribution을 생성한다.

Distribution이 생성된 모습이다.

6. 버킷 복제 규칙 생성

서울 리전이 작동하지 않을 때 버지니아 웹서버에서 연속적으로 웹이 동작하기 위해서 서울 리전 S3내의 파일이 항상 버지니아의 S3로 복제된 상태여야 한다.

버지니아의 버킷 및 CloudFront Distribution 생성 방법은 서울리전과 완전히 동일하다.

복제 규칙을 생성할 서울 리전 버킷을 선택한다.
복제된 개체를 수신할 버킷을 버지니아에 생성한 S3 버킷으로 선택한다.
복제본 수정 동기화를 선택하고 저장을 눌러 생성을 완료한다.
복제 규칙이 생성되었으며 서울 리전 버킷에 존재하는 데이터가 버지니아로 자동으로 복제 및 동기화 된다.

7. 서울 리전 ELB와 WEB 서버에 사용 될 보안 그룹 생성

EC2 콘솔에서 다음과 같이 클릭한다.
HTTP에 대하여 위치에 관계없이 접근 가능하도록 ELB의 보안 그룹을 생성한다.
WEB에 사용될 보안 그룹은 HTTP 프로토콜은 ELB에서 보내는 트래픽만 허용하고 SSH는 10.0.0.0/16의 내부 망에서만 접근 가능하도록 설정한다.
생성이 완료된 모습이다.

 

8. ami 생성

웹 개발자가 EC2에 웹 서버를 구축해두었다는 시나리오로 이 과정을 진행한다.

직접 구축한 웹 서버를 선택하고 이미지 생성을 클릭한다.
원하는 이미지 이름과 설명 및 태그를 추가하고 이미지를 생성한다.
이미지 생성이 완료되면 상태가 available로 바뀌게 된다.

9. 시작 템플릿 생성

시작 템플릿을 AutoScaling Group이 참조하여 WEB서버용 EC2를 생성하게 된다.

시작 템플릿을 생성하기전에 웹 개발자가 EC2에 웹서버를 구축하고 해당 EC2를 ami로 만들어둔 상태에서 시작 템플릿을 생성할 수 있다.

AMI는 직접 생성한 이미지를 선택한다.
생성한 웹 서버용 보안 그룹을 선택하고 생성을 완료한다.
시작 템플릿이 생성된 모습이다.

10. Target Group 생성

ELB가 트래픽을 보내줄 대상을 지정하기 위한 Target Group을 생성한다.

Target Group을 생성하고 ELB를 생성한다. 이후 AutoScaling Group으로 생성되는 WEB 서버들이 Target group에 속하게 되면 ELB가 해당 WEB서버에게 트래픽을 분산해서 보내게 된다.

ELB와 WEB은 굳이 HTTPS로 통신할 필요가 없으므로 HTTP로 프로토콜을 설정한다.
상태검사는 HTTP로 설정한다.
아직 등록할 대상이 없으므로 등록하지 않고 Target group을 생성한다.

11. ELB 생성

Target Group을 생성하고 나면 바로 ELB를 생성한다.

 

7계층에서 동작하는 ELB인 Application Load Balancer를 생성한다.
서울 리전 ELB는 CloudFront와 HTTP 통신할 것이기 때문에 리스너는 HTTP로 설정한다. 체계는 인터넷 경계로 설정하고 가용 영역은 반드시 Public 서브넷으로 선택한다.

웹 서버가 Private Subnet에 존재하더라도 ELB의 가용영역은 반드시 Public Subnet으로 지정해야 정상적으로 작동하게 된다.

리스너가 HTTP로 설정되었기 때문에 나타나는 경고창이다. 신경쓸 필요 없이 다음으로 넘어간다.
미리 생성했던 ELB의 보안 그룹을 선택하고 다음으로 넘어간다.
미리 생성했던 대상그룹을 선택하고 다음으로 넘어간다.
검토를 마치고 ELB를 생성한다.

12. AutoScaling Group 생성

템플릿을 참조하여 EC2를 생성하기 때문에 기존에 생성한 템플릿을 지정하고 다음으로 넘어간다.
EC2들이 생성될 서브넷을 지정한다.
미리 생성했던 Target Group에 생성되는 WEB서버들이 포함되도록 설정한다.
원하는 인스턴스 용량을 지정한다. 조정 정책은 지금은 없음으로 지정하고 이후에 단순 조정 정책을 따로 지정할 것이다.
태그릴 지정할 때 새 인스턴스에 태그 지정을 선택하면 새로 생성되는 EC2 인스턴스에도 똑같은 태그가 붙는다.
모든 설정을 검토하고 AutoScaling Group을 생성한다.

13. CloudWatch Alarm 생

단순 조정 정책 작동 원리
CloudWatch 콘솔로 넘어가서 경보를 생성한다.
데이터를 받아올 지표를 선택해야 한다.
AutoScaling Group의 EC2의 CPUUtilization을 선택하고 지표 선택을 완료한다.
CPU 평균 사용률이 80퍼 이상일 때 알람이 울리도록 설정한다.
경보 상태 트리거는 생성하지 않으므로 제거한다.
경보 이름과 설명을 지정한다.
설정을 검토를 하고 경보를 생성한다.
경보를 1개 더 추가 생성하여 지표를 똑같이 선택하고 조건만 CPU 평균 사용률이 10퍼센트 이하일 때 알람이 울리도록 설정한다.
이름과 설명을 지정하고 경보를 생성한다.

14. 단순 조정 정책 생성

EC2 콘솔에서 생성했던 AutoScaling Group을 선택한다.
조정 정책 생성 페이지로 들어간다.
위와 같이 설정하면 CPUHIGH 알람이 울리면 인스턴스 1개를 추가하게 된다.
위와 같이 설정하면 CPULOW 알람이 울리면 인스턴스 1개를 제거하게 된다.
단순 조정 정책이 생성된 모습이다.

 

15. AutoScaling Group 예약된 작업 생성

예약된 작업은 특정시간에 사용자가 몰릴것이 예상될 때 사용한다.

원하는 시간에 사용할 정책을 설정한다. 시작 시작은 UTC 기준이므로 (서울시간 - 9h)로 설정하면 된다.

16. ELB와 연결할 CloudFront Distribution 생성 

여기서 생성될 CloudFront Distribution은 정적 파일 캐싱의 역할이 아닌 동적 컨텐츠 고속 전송 역할이다.

 

- CloudFront를 사용하여 컨텐츠를 고속으로 전송가능한 이유

CloudFront는 AWS의 Edge location에 위치하여 모든 지역에 골고루 위치하게 된다. 따라서 전 세계의 클라이언트는 CloudFront에 빠르게 접근이 가능하고 또한 CloudFront를 통해 서울의 ELB로 접근하게 되면 AWS의 백본망을 통해 고속으로 접근할 수 있기 때문이다.

CloudFront 콘솔 화면에서 다음과 같이 클릭한다.

 

Origin을 서울의 ELB로 선택한다. Origin Protocol Policy는 오리진과 통신할 프로토콜을 선택하는 항목으로 HTTP 프로토콜로 통신하도록 설정한다.
클라이언트가 HTTP로 접근해도 HTTPS로 리다이렉트 되도록 Redirect HTTP to HTTPS 를 선택한다. 또한 동적 컨텐츠를 주고 받아야 하므로 모든 매서드를 허용하도록 설정한다.
동적 컨텐츠 전송을 위해 캐싱하지 않도록 설정해야한다. 따라서 TTL은 모두 0으로 설정한다. Compress Object Automatically를 설정하여 컨텐츠를 압축하도록 설정한다.
Alternate Domain Names에 입력한 도메인만 Route53에서 레코드값으로 생성하여 CloudFront로 라우팅할 수 있다. SSL Certificate는 ACM에서 생성한 인증서를 넣어주도록 설정한다.

위와 같이 설정하고 CloudFront Distribution을 생성한다.

18. Route53 상태검사 생성 및 장애조치 기본 유형 레코드 생성

상태 검사 및 Failover 작동 원리
Route 53 콘솔에서 상태 검사 생성을 시작한다.
검사 대상을 ELB와 연결되어 있는 CloudFront Distribution으로 지정하고 상태검사 프로토콜은 HTTPS로 지정하여 상태 검사를 진행한다.
장애 조치를 빠르게 하기 위해서 요청 간격을 빠름으로 지정한다.
상태검사가 생성된 모습이다.
호스팅 영역에 생성했던 ticketing.pw를 선택한다.
레코드 생성을 클릭한다.
ticketing.pw 레코드에 대하여 CloudFront로 라우팅 되도록 장애조치 기본 유형을 생성한다. 해당 레코드는 기본 유형으로서 서울 리전이 정상상태로 감지될 때 기본 유형 레코드를 참조하여 라우팅하도록 설정된다. 상태검사 항목은 직접 생성한 상태검사를 선택한다.
마찬가지로 www.ticketing.pw에 대해서 동일한 설정으로 레코드를 생성한다.
장애 조치 레코드를 생성한 모습이다.

19. 버지니아리전 ELB 생성

ELB의 보안그룹은 HTTP와 HTTPS를 모두 허용해야 HTTP로 접근하는 클라이언트를  HTTPS로 리다이렉트 할 수 있다.
이와 같이 인바운드 규칙이 443번 포트와 80번 포트가 열려 있어야한다.
대상 그룹을 생성하며 ELB내부는 HTTP로 통신하는 것이 더 빠르게 통신할 수 있으므로 프로토콜을 HTTP로 선택한다.
상태검사도 마찬가지로 HTTP로 선택한다.
다음과 같이 대상 그룹이 생성된다.
7계층 서비스이므로 ALB를 선택한다.
리스너를 443번 포트와 80번 포트 모두 열어주어야 443포트로 리다이렉트가 가능하다.
생성해둔 인증서를 넣어준다.
기존에 생성해둔 ELB의 보안그룹을 선택한다.
미리 생성해둔 대상 그룹을 선택하고 다음으로 넘어간다.
80번 포트를 리다이렉트 설정하기 위해 위와 같은 경로로 클릭한다.
기존 작업을 삭제하고 작업 추가를 선택한다.
리디렉션 대상을 선택한다.
443번 포트로 리디렉션 되도록 설정한다.

20 Route53 Failover 라우팅 보조 영역 추가

ticketing.pw 호스팅 영역을 클릭한다.
레코드를 생성한다.
ticketing.pw 레코드에 대하여 버지니아의 ELB를 보조 장애 조치 레코드 유형으로 설정하여 생성한다.
www,.ticketing.pw 레코드에 대하여 버지니아의 ELB를 보조 장애 조치 레코드 유형으로 설정하여 생성한다.

이와 같이 Route53 Failover를 설정했을 때 기본 영역인 서울리전이 Fail상태가 감지되면 보조 유형인 버지니아의 ELB로 라우팅 되어 서비스가 연속적으로 가능해진다. 이를 교차 리전 장애 조치라고 한다.