이번 글에서는 ASG를 더 잘 다루기 위해서 필요한 설정들에 대해서 알아보도록 하겠다.
AWS 콘솔에서는 해도 그만, 안해도 그만인 옵션같은 모양새로 보이지만 생각보다 매우 중요한 설정들이다.
바~로 드가자 🔥
ASG를 생성하면서 마주치는 옵션 중엔, Health check grace period
라는 것이 있다.
직역하면 "상태 확인 유예 기간"이고, 새롭게 생성되는 서버 인스턴스에 대해서 이 시간동안 Unhealthy
한 상태여도 Unhealthy
하다고 판단하지 않고 기다려주는 시간을 의미한다.
즉, Health check grace period
는 서버 인스턴스가 생성되는 시간과 서버 애플리케이션이 구동되는 시간의 합보다 높은 값으로 설정되면 된다.
예를 들어서 서버 인스턴스가 1분동안 생성이되고, 서버 애플리케이션은 20초동안의 빌드 과정을 거쳐서 실행이 된다면, Health check grace period
는 1분 20초 이상으로 설정해야 정상적으로 서버 인스턴스를 등록할 수 있는 것이다.
단, Health check grace period는 혹시 모를 상황에 대비해서 서버에게 유예기간을 얼만큼 줄 것인지에 대한 값이므로, 서버 애플리케이션이 실행되기 까지의 시간보다 훨씬 넉넉히 설정해두는 것이 바람직하다.
여러 글을 찾아보니 평균 서버 구동 시간의 2배정도로 설정하는 것을 권장하는 것 같았다.
Default cooldown
은 ASG를 생성한 후, 설정을 변경하는 곳에서 확인할 수 있다. Cooldown 타임
은 자동으로 스케일링이 이루어질 때, 사용되는 값인데 쉬운 이해를 위해서 예시를 들어보도록 하겠다.
CPU사용량이 50%이상이 되면 서버를 자동으로 늘리는 스케일링 정책의 ASG가 있다고 가정해보겠다. 이 ASG에서 2대의 서버가 구동되다가 평균 CPU 사용량이 50%가 넘게 되면 1대의 서버가 추가가 될 것이고, 트래픽이 새로운 인스턴스에도 적절히 분배되면서 평균 CPU사용량이 천천히 내려가게 될 것이다.
여기서 Cooldown 타임
은 새로운 서버 인스턴스가 추가된 후, CPU사용량이나 메모리 사용량이 충분히 진정(?)될때까지 기다려주는 시간을 의미한다.
Cooldown 타임
이 0
으로 설정이 되어 있다면 어떤 일이 일어날까?만약 Cooldown 타임이 0으로 설정이 되어 있다면, 새로운 인스턴스가 추가된 직후에 기다리지 않고, 바로 CPU 사용량을 다시 측정해서 서버 인스턴스 추가 여부를 판단하게 될것이다.
새로운 서버가 추가 됐다고 해서 CPU사용량이 즉각적으로 떨어질 것은 아니기 때문에 여전히 CPU사용량이 50%가 넘는다고 측정이 될 것이다.
즉, 아주 짧은 시간동안 서버 인스턴스가 무분별하게 많이 추가 될 수 있는 것이다.
새롭게 생성된 서버 인스턴스는 Instance warmup
시간이 지나면, 트래픽을 받을 수 있다고 간주된다. 즉, 서버 인스턴스가 생성되는 시간 + 서버 애플리케이션 구동에 걸리는 시간이 안전하게 확보가 될 수 있는 값으로 Instance warmup
시간을 설정하면 된다.
이번 글에서는 중요하게 생기지 않았지만 실제로는 매우 중요한 ASG 설정들을 알아보았다.
실제로 ASG를 구축할 때, warmup시간을 넉넉히 주지 않아서, 서버가 ASG에 잘 등록이 안되고 계속 제거되고 재생성되는 상황을 겪었던 적도 있다 ㅎㅎ
그러니, ASG를 사용하는 사람이 있다면 위의 설정들에 유의하길 바라겠다.
그럼 이만 아디오스 🙏