ioerror

RSYNC로 대용량 파일 백업하기 본문

OS

RSYNC로 대용량 파일 백업하기...

반응형

상황

원격 서버의 데이터베이스를 백업받아야 하는데 30G가 넘는다.

그리고 백업본은 3일간 보관해야 한다.

처음에는 일반적인 방법으로 rsync를 했는데 간혹 완료가 안 되는 현상이 있었다.

원본은 30G인데 20G에서 멈춘다던가 아예 실행이 안된다던가 프로세스는 돌아가는데 더 이상 파일 받아지지 않는 것이다.

그래서 구글링에서 첫번째로 찾은 해결 방법이 임시 저장 디렉터리를 설정하는 것이다.

--temp-dir=/backup/temp

이 설정값을 넣고 한동안은 잘 되더니 원본 용량이 커져서인지 다시 동일 현상이 발생했다.

두 번째로 찾은 방법은 대역폭을 설정하는 것이다.

--bwlimit=[MbPS] 대역폭 값은 초당 받을 용량(Kbytes)을 설정한다.

rsync는 기본적으로 네트워크의 최대 대역폭을 사용한다고 하는데 아마도 대용량이다 보니 중간에 네트워크 손실이 있으면 프로세스만 남아 있고 파일은 중간에 끊어져 버리는 듯하다.

또 최대 대역폭을 사용하면 서버의 다른 서비스에 영향을 주기 때문에 안정적으로 전송하기 위해서는 대역폭을 설정하는 것이 좋다고 한다.

원격지 서버(원본서버) 작업 내용

우선 원격지 서버의 rsync에 백업 서버로의 rsync를 허용할 수 있도록 IP 등을 설정한다.

vi /etc/rsync.conf

uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.1.2, 192.168.1.3 [허용할 IP 목록 콤마(,)로 구분하여 입력]
max connections = 10

[home]
         path = /home
         comment = home
         exclude = DUMP

[home] 값은 백업 서버에서 rsync를 돌릴때 원격지 원본 파일 위치에 해당하는 별칭(alias)이다.

백업서버에서 원본 파일 위치를 그대로 입력하면 보안상 문제가 발생할 수 있기에 별칭을 사용하는 거 같다.

[원본(원격지) 서버 주소]::home/data 식으로 사용한다.

백업 서버 작업 내용

백업 스케줄 조건

매일 새벽 1시에 백업을 하되 3일 전 백업 파일은 삭제를 하고 백업 파일의 사용자, 그룹을 변경해야 한다.

원격지 서버의 백업 파일명은 "backup_2021_01_01..... bak" 형식이다.

이 조건으로 쉘 스크립트를 작성하고 저장한다.

#!/bin/sh

# 백업파일 저장 경로
dirBack='/backup/'

# 오늘 날짜
strDate=`date '+%Y_%m_%d'`

# 백업 파일명 일시
strDatetime=`date '+%Y_%m_%d %H:%i:%s'`

# 3일 전 날짜의 파일명
delDate=`date --date '3 days ago' +"%Y_%m_%d"`

# 삭제 대상인 3일전 파일명
delfilename='backup_'$delDate'*'

# 3일전 파일 삭제
rm -rf $dirBack$delfilename

# 원격지 파일명
orgfilename='backup_'$strDate'*'

#rsync 실행
rsync -azrt --temp-dir=/backup2t/tmp --bwlimit=2500 --log-file="[로그파일 경로]"  --delete [원격지주소]::[원격지파일경로]/$orgfilename $dirBack;

# 백업 받은 파일의 소유자,사용자그룹을 설정한다.
chown -R [사용자].[사용자그룹] [백업파일 로컬 경로]

# 로그 저장시 실행 완료 일시
endDatetime=`date '+%Y_%m_%d %H:%i:%s'`
echo $endDatetime
exit

백업 스케줄 등록

매일 새벽 1시에 백업되도록 crontab에 백업 스크립트를 등록하여 스케줄링한다.

vi /etc/crontab

# 백업 스크립트 스케쥴링 매일 01시에 실행
# crontab의 시간은 초,분,시,일,월로 설정한다. 
#    /----- 분 (0~59)
#   / /---- 시 (0~23) 
#  / / /--- 일 (1~31)
# / / / /-- 월 (1~12)  
#/ / / / /- 요일(0|7:일, 1:월, 2:화~6:금)
0 1 * * * [백업스크립트 경로] > [백업 실행 로그파일 경로]

 

 

 

 

 

 

 

반응형
Comments