Auto Scaling Group을 통한 서버 확장 및 축소
CloudWatch를 통해 사용자의 트래픽과 EC2 인스턴스의 리소스 사용량을 주시하고, 이에 따라 EC2 인스턴스의 확장이 필요하게 된 시기에 AMI를 사용하여 EC2 인스턴스를 추가하고, 추가된 인스턴스를 ELB의 인스턴스 리스트에 추가해주면 해당 서비스는 더 많은 트래픽을 받을 수 있게 됩니다. 하지만 이 과정을 수동으로 하게 되면 그만큼 관리자의 피로도도 증가하게될 것입니다. AWS에서는 이를 위해 Cloud Watch를 활용하여 트래픽이 증가하거나 감소하는 경우를 인지할 수 있도록 설정한 후 이에 따라 서버를 확장 또는 축소를 자동으로 수행해주는 Auto Scaling Group이라는 기능을 제공합니다.
Auto ScalingGroup을 설정하면 아래와 같이 그룹 내의 EC2 인스턴스들의 평균 리소스 사용률 또는 네트워크 트래픽에 따라 CloudWatch에서 알람을 발생하여 Email이나 다른 전송 수단을 통해 관리자에게 알리거나 Auto Scaling Group과 연계하여 미리 생성해 둔 AMI를기반으로 서버를 자동으로 확장/축소 할 수가 있습니다. 서버가 확장되면 ELB의 대상 그룹에 해당 EC2 인스턴스가 등록되어 추가된 EC2 인스턴스로도 로드 밸런싱이 가능해짐으로써 부하를 줄이고, 이후 트래픽이 감소하면 서버를 축소하여 자동으로 ELB의 대상그룹에서 제외시킴으로써 불필요한 비용을 지불하지않도록 구성할 수가 있게 됩니다.
Auto Scaling Group을 적용하려면먼저 어떠한 AMI를 사용할지와 인스턴스 유형, 스토리지, 보안그룹 등의 설정을 해야 합니다. 이 때, 인스턴스 구매 옵션으로 스팟 인스턴스를 사용하게 되면 비용을 크게 절약할 수가 있습니다. 스팟 인스턴스는 경매와 비슷하게 EC2 인스턴스를 사용하는 방식인데 지정한 스팟 가격 내에 사용 가능한 EC2 인스턴스가 존재하는 경우 저렴한 가격으로 이용 가능하지만 지정한 스팟 가격 금액이 입찰 가격 아래로 하락하게 되면 EC2 인스턴스가 종료될 수 있기 때문에 지속적인 서비스에 이용하기 보다는 이벤트 성으로 서비스를 제공하는 경우에 사용하는 것이 좋습니다. 저는 부하테스트 시에 이 스팟인스턴스를 사용하였습니다. 부하 테스트에 대한 내용은 추후 포스팅에서 다루도록 하겠습니다. CloudWatch가 EC2 인스턴스로부터 데이터를 수집하는 주기가 기본적으로 5분이지만 Cloud Watch 세부 모니터링 활성화를 하는 경우 1분 간격으로 데이터를 수집할 수 있으므로 더 빠르게 트래픽에 대응할 수도 있습니다.
모니터링 서비스 설정
서비스를 원활하게 유지시키기 위해서는 각 서비스들에 대해 모니터링이 필요합니다. AWS에서 제공하는 CloudWatch를 통해 다양한 통계치를 확인할 수가 있습니다. 통계치를 얻기 위해서는 각 서비스에서CloudWatch Logs를 활성화 시켜 CloudWatch에 로그가 쌓일 수 있도록 설정을 해야 합니다.
로그 데이터를 통한 각종 메트릭 데이터를 통해 알람을 설정하여 그에 따른 처리를 수행할 수도 있습니다. 예를 들어 EC2 인스턴스의 머신 리소스 데이터를 수집하여 CPU나 메모리 사용량에 따라 알람을 발생 시키도록 설정한 후 그에 따른 대응을할 수가 있습니다. Amazon Simple Notification Service와 연동하면 이메일이나 SMS, Push를 통해 즉각적으로 관리자에게 알람을 전달할 수가 있습니다.
SMS의 경우에는 현재 한국에서는 AWS를 통해 전달이 불가능하므로 외부 업체의 SMS API와 연계해야만 전송이 가능합니다. 사내에 항상 구동되어 있는 서버를 활용하여 SMS 이벤트 발생 시 해당 서버로 Callback을 받을 수 있도록 구성하여 SMS API를 호출하여 관리자에게 전달하도록 구성하였습니다. 알람 이벤트에 따라 메시지 형식이 달라서 이에 대한 부분을 하나씩 확인하고 파싱하여 문자 메시지로 전달하도록 해야해서 조금 번거로운 부분이 있었습니다.
참고
같이 보면 좋은 포스팅
하이브 런칭기 #6 - 부하테스트
하이브 런칭기 #7 - 로그 관리 및 지표/통계
'Work > 개발 노트' 카테고리의 다른 글
[양재동코드랩] 자바스크립트 강의 1일차 - 수업소개, var, let, const (0) | 2018.09.01 |
---|---|
하이브 런칭기 #5 - 웹서버 관리는 Beanstalk에게 (0) | 2018.08.15 |
하이브 런칭기 #3 - 데이터베이스 구성 (0) | 2018.08.15 |
하이브 런칭기 #2 - AWS 기본 구성 (0) | 2018.08.15 |
하이브 런칭기 #1 - 사내 환경 구성 (0) | 2018.08.15 |
댓글