- 개요
Yona는 여러명이 사용하는 이슈 트래커이자, 코드 저장소이다.
그런 공간이 만일 서버의 문제나 휴먼 에러로 인하여 장애가 발생한다면,
꽤 많은 유효정보들을 손실하게 될 것이다.
이에 대응할 수 있도록 백업 서비스를 만들어 보자. - 백업대상
(현재 내장형 DB인 h2 DB를 사용중이다.)
yona.h2.db
yona.trace.db
[dir]repos - 코드 저장소 파일
[dir]uploads - 업로드 첨부 파일
[dir]logs - 백업방식
증분 백업 방식 - 최초 1회 백업 수행 후, 변경 된 사항들만 원하는 주기에 맞추어 백업 하는 방식
저장소 : AWS S3 - 백업주기 및 유지 정책
백업주기) 매일(cron 새벽 4시)
백업 유지 정책) 7일간 증분 백업본 및 로그 유지, 이후 삭제 - 과정
1) CentOS의 시간을 맞춰준다.(cron 작업 사전 준비)
2) 스케쥴링 테스트
위의 설명을 제대로 참고하면 아래의 스케쥴링 명령어를 수비게 이해할 수 있다.
각 항목에 들어가는 것들이 분 / 시 / 날 / 월 / 주 등을 의미하기 때문에 자신에게 맞는
명령어를 작성하도록 하자.
리눅스의 경우 yum install vixie-cron으로 cron을 설치해줄 수 있다.
실행은 service crond start - 코드작성
#!/bin/bash
##################### description ###############
# Backup to YONA script
# Create a backup file using the current date in it's name
# Backupfiles = /data/yona/yona-1.10.0/repo&&uploads&&db&&logs
# Backup Cycle = 04:00A.M. Everyday
# Backup Type = Incremental Backups
##################################################
snapdir=/data/yona/yona/backup
awsdir=s3://midasit-dv-s3-backup/yona
yonadir=/data/yona/yona-1.10.0
RM_DATE=$(date -d "-1 week" "+%Y%m%d")
BACKUP_DATE=$(date "+%Y%m%d")
CYCLE_DATE=$(date "+%d")
##################################################
echo "##################################################################"
echo "Backup yona user data files from CentOS to S3 on" `date`
echo "target Dir : ${yonadir}"
echo "log Dir : ${snapdir}/logs"
echo "##################################################################"
# If A day is the first day of its month, then reassign a snapfile
if [ ${CYCLE_DATE} -eq 01 ]
then
tar -g ${snapdir}/backup.snap -zcf ${snapdir}/backupfiles/backup_base_${BACKUP_DATE}.tgz ${yonadir}/ --exclude ${yonadir}/README.md --exclude ${yonadir}/RUNNING_PID --exclude ${yonadir}/bin --exclude ${yonadir}/conf --exclude ${yonadir}/lib --exclude ${yonadir}/share --exclude ${yonadir}/yona.lock.db --exclude ${yonadir}/backup --ignore-failed-read
aws s3 cp ${snapdir}/backup.snap ${awsdir}/backup.snap
aws s3 cp ${snapdir}/backupfiles/backup_base_${BACKUP_DATE}.tgz ${awsdir}/backup_base_${BACKUP_DATE}.tgz
aws s3 rm ${awsdir}/backup_${RM_DATE}.tgz
echo "Cycle refresh has completed."
else
# Makes a copy of the snap file of an original starting point.
cp ${snapdir}/backup.snap ${snapdir}/backup-1.snap
# Creates a chain of changed
tar -g ${snapdir}/backup-1.snap -zcf ${snapdir}/backupfiles/backup_${BACKUP_DATE}.tgz ${yonadir}/ --exclude ${yonadir}/README.md --exclude ${yonadir}/RUNNING_PID --exclude ${yonadir}/bin --exclude ${yonadir}/conf --exclude ${yonadir}/lib --exclude ${yonadir}/share --exclude ${yonadir}/yona.lock.db --exclude ${yonadir}/backup --ignore-failed-read
# If it performs without any error, transfer it to AWS S3
# Delete a file that has made exactly 7 days ago
if [ $? -eq 0 ]
then
aws s3 cp ${snapdir}/backupfiles/backup_${BACKUP_DATE}.tgz ${awsdir}/backup_${BACKUP_DATE}.tgz
echo "Transfer backup files to S3 has completed "
if [ -f "${snapdir}/backupfiles/backup_${RM_DATE}.tgz" ]
then
find ${snapdir}/backupfiles/ -maxdepth 1 -mtime +7 -exec rm -f {} \;
find ${snapdir}/logs/ -maxdepth 1 -mtime +7 -exec rm -f {} \;
aws s3 rm ${awsdir}/backup_${RM_DATE}.tgz
echo "Old backup files has removed succeesful."
else
echo "There is no files to be deleted."
fi
rm -f ${snapdir}/backup-1.snap
echo "Backup performed perfectly"
else
echo "fail : Yona is on processing. Try it later"
rm -f ${snapdir}/backup-1.snap
exit 9
fi
exit 0
fi
- 복원
위와 같이 --incremental이 tar 명령어의 옵션으로 사용되면 자동으로 증분만을 더해가며 압축이 해제된다.
'June > 개발도구' 카테고리의 다른 글
웹솔루션운영이란? 운영팀원으로서의 지침사항(주관적) (0) | 2019.08.29 |
---|---|
Jenkins pipeline으로 Slack notification 받기 (0) | 2019.07.01 |
이슈트래커 YONA 사용하기(1) - 개요 및 설치 (0) | 2019.04.25 |
Java FileNotFoundException 액세스 거부 오류 (5) | 2019.04.25 |
Jenkins와 AWS Codedeploy를 사용한 배포 전략 (0) | 2019.04.01 |