자몽이 조아

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

개인프로젝트

[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 커넥션 풀을 조정하거나, 부하 테스트를 통해 서버 리소스 최적화를 검토할 필요가 있습니다. 향후에는 보다 안정적인 서비스 운영을 위해 추가적인 모니터링 도구 도입을 고려할 계획입니다.

반응형
Comments