일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 코딩국비지원
- REACT
- 블로그와 친해지기
- 인공지능모델학습
- pymupdf
- 엘리스AI트랙
- fabricjs
- tempfile
- after_this_request
- Python
- reactStrictMode
- 엘리스
- 프로젝트마무리
- 코딩 국비지원
- devmode
- aws_s3
- 부트캠프프로젝트발표
- 코딩부트캠프
- 개발자 채용설명회
- 엘리스 AI 트랙
- 팀프로젝트
- 이미지처리프로젝트
- FLASK
- 코딩교육
- 웹개발포트폴리오
- 프레임워크vs라이브러리
- 코딩배우기
- 웹개발프로젝트
- 와탭랩스
- 엘리스AI트랙데모데이
Archives
- Today
- Total
자몽이 조아
[aws ec2, crontab]자동 재배포 도입 후기 본문
반응형
개요
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 커넥션 풀을 조정하거나, 부하 테스트를 통해 서버 리소스 최적화를 검토할 필요가 있습니다. 향후에는 보다 안정적인 서비스 운영을 위해 추가적인 모니터링 도구 도입을 고려할 계획입니다.
반응형
'개인프로젝트' 카테고리의 다른 글
[diykitten] 사용하고 있는 파이썬 라이브러리 정리 (0) | 2025.02.10 |
---|---|
[fabricjs]"Trying to initialize a canvas that has already been initialized" (0) | 2025.02.08 |
Comments