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