개인프로젝트

[aws ec2, crontab]자동 재배포 도입 후기

Grapefruitgreentealoe 2025. 2. 10. 15:42
반응형

개요

EC2 서버가 부하로 인해 MySQL과의 연결이 끊어지는 문제를 해결하기 위해 주기적으로 서비스 상태를 확인하고, 필요 시 자동으로 재배포하는 스크립트를 도입하였습니다. 이 과정에서 monitor_deploy.sh를 작성하고, cron을 활용하여 주기적으로 실행하도록 설정하였습니다.


1. monitor_deploy.sh 스크립트 작성

내용

#!/bin/bash

# 설정
URL="http://localhost:5000"                        # 헬스체크할 URL
DEPLOY_SCRIPT="/home/ubuntu/deploy_test/scripts/deploy.sh"  # 실행할 배포 스크립트
LOG_FILE="/home/ubuntu/deploy_test/monitor.log"    # 로그 파일 경로

# 로그 함수
log_message() {
    echo "[$(date)] $1" >> "$LOG_FILE"
}

# 헬스체크
if ! curl -s --connect-timeout 5 "$URL" > /dev/null; then
    log_message "Service is down. Executing deploy script..."
    sh "$DEPLOY_SCRIPT"
else
    log_message "Service is up and running."
fi

 

설명

  • curl을 사용하여 로컬호스트 5000번 포트에서 정상 응답이 반환되는지 확인.
  • 응답이 없을 경우, 배포 스크립트 (deploy.sh) 실행.
  • 서비스 상태를 /home/ubuntu/deploy_test/monitor.log 파일에 기록.

2. 권한 부여

chmod +x /home/ubuntu/monitor_deploy.sh

스크립트 실행을 위해 실행 권한을 부여합니다.


3. cron 설정

cron 편집

crontab -e

1분마다 실행 설정

* * * * * /home/ubuntu/monitor_deploy.sh
  • 1분마다 monitor_deploy.sh가 실행되어 서비스 상태를 점검하고, 필요 시 자동으로 재배포 수행.

4. 서비스 상태 로그 확인

cat /home/ubuntu/deploy_test/monitor.log
  • 서비스 상태 및 배포 기록을 로그 파일에서 확인 가능.

5. 트러블슈팅

문제 상황

  • 서버 부하로 인해 EC2와 MySQL 서버 간의 연결이 끊어지고 서버가 종료
  • 예상 원인: 커넥션 풀 부족 또는 과부하로 인해 DB 연결 종료.

해결 방법

  • 서비스가 정상적으로 실행되고 있는지 주기적으로 확인.
  • 연결이 끊어질 경우, 배포 스크립트를 실행하여 서비스 재시작.
  • 이를 통해 EC2와 MySQL의 연결 문제를 우회적으로 해결함.

결론

자동 재배포를 도입함으로써 서버 부하로 인한 연결 문제를 완화할 수 있었습니다. 그러나 근본적인 해결을 위해 MySQL 커넥션 풀을 조정하거나, 부하 테스트를 통해 서버 리소스 최적화를 검토할 필요가 있습니다. 향후에는 보다 안정적인 서비스 운영을 위해 추가적인 모니터링 도구 도입을 고려할 계획입니다.

반응형