[AWS] 고가용성 워드프레스

지난번에 게시한 글 에서 언급한 내용처럼 주말동안 블로그 서버 이중화 구성을 해보았다.
단일 가용영역(AZ)로 구성할 시 해당 AZ 장애시 전체 서비스가 마비되지만, 고가용성(HA)아키텍처로 구성하면 한 AZ가 장애가 발생하여도 서비스 이용에는 큰 지장이 없다.

문제는 EBS로는 각 인스턴스가 개별 저장공간을 가지게 되어 자료가 인스턴스별로 다르게 표시되는 현상이 발생한다.
이 문제를 해결하기위해 인스턴스 여러개가 동시에 접근, 공유 가능한 EFS로 워드프레스를 옮겼다.

구성도

기존 EC2 + EBS , RDS 구성에서 Application Load Balancer와 다른 가용영역에 EC2 인스턴스를 하나 더 추가해서 구성했다.

프리티어를 사용하기 위해 t2.micro로 인스턴스를 구성했더니, 저번과 동일하게 메모리가 부족해서 에러가 종종 발생했다.
또 기존 워드프레스가 있던 위치에 EFS를 마운트 시켜서 사용했는데, EBS를 사용하는 것 보다 로딩 속도가 느려졌다.
컨텐츠를 전부 S3에 업로드하고 cloudfront CDN적용 시켜서 하면 좀 더 빨라질 것 같긴하다.
이번에 이렇게 구성한 이유는 EFS와 로드밸런서 설정을 해보기 위해서 였기 때문에, 다시 원래 단일 인스턴스로 바꾸려고한다.

배운점

EFS를 설정할 때 주의할 점은 보안그룹 설정을 통해 EC2인스턴스가 EFS에 접근할 수 있도록 해주어야 한다.
또 리눅스에서 자동마운트를 위해서는 /etc/fstab 파일을 설정 해주어야 한다.

또 ALB 설정시 HealthCheck 관련해서 모니터링이 정확히 되어야 ALB에서 제대로 트래픽을 보내주니까 SSL이 적용된 웹 페이지 같은 경우 Health check시 프로토콜을 HTTPS로 설정해주어야 한다.
ALB설정하는데도 꽤 애먹었다.

AWS의 ACM을 이용해서 도메인 인증할 때 가비아를 쓴다면 조심해야할 부분이다.
AWS에서는 CNAME 호스트에 보면 이렇게 입력하라고 알려준다.
_8859c41a3aff7a80c3384f3e9bf15da6.peterabbit.com.
하지만 가비아에서는 뒤에 .com.을 뺀 _8859c41a3aff7a80c3384f3e9bf15da6.peterabbit. 까지 입력해야한다.
CNAME 값은 그대로 입력하면 된다.

ALB작동 모습

ALB를 설정하고 인스턴스 1개는 testpage, 1개는 워드프레스를 띄워봤다.
원래라면 테스트페이지의 경우는 에러페이지 이기 때문에 ALB health check 에서 unhealthy라고 표시된다.
이러면 ALB에서 해당 인스턴스로 로드를 보내지 않는다. 이때 healthcheck 옵션이 잘못 되어있어서 두 인스턴스 모두 unhealthy 여서 그냥 번갈아 가면서 인스턴스로 보낸 것으로 보인다.
번갈아가면서 로드하는 이유는 로드밸런싱 알고리즘 Round robin 을 적용한 상태이기 때문이다.

추후

다음에는 ECS와 EKS를 이용해보려고 한다.
아마 다음 주말?이 될 것 같다.
도커는 개발하면서 자주 사용해서 익숙한데, 아직 쿠버네티스는 들어보기만 했지 잘모른다.
terraform 이나 ansible도 공부를 해야할텐데, 일단 ECS, EKS 구성에 Prometheus + Grafana 모니터링을 해보고 더 학습을 해봐야겠다.