강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

rsync 미러링을 통한 백업기법
작성자 : 13 김영철
등록날짜 : 2009.01.29 16:26
3,804

rsync 공식사이트명 http://rsync.samba.org/index.html

원글주소 : http://linux-sarang.net/board2/bbs_read.php?bbs=study&page=1&nownum=105&num=778
rsync 미러링을 통한 백업기법


쬐끄만 회사에서 몇대 안되는 서버를 관리하면서 효율적인 백업을 연구하다가
rsync 를 만나게 되었습니다.
5개월 정도 사용한 결과 별 문제없이 잘 작동하네요.
아래 내용은 제 홈페이지에 그동안 작업한 내용들을 정리하려고 적어놓은 겁니다.
허저비가 적은 내용이지만 참고할 분들도 가끔 있을거 같아서 올려봅니다.
아래부터 반말 나가니까 미리 사과드립니다. 꾸벅~

/***************************************************************
작성자 : 질주본능
작성일 : 2003년 12월 23일
Mail : webmaster@nyxy.com
HOME : http://nyxy.com/
****************************************************************/

지난 5월달에 작업한 rsync 백업 서버 구축에 대해서 이제서야 정리를...ㅠㅠ

rsync 는 원격에서 미러링 서버를 구축할때 사용되는 유틸이다.
옵션에 따라 파일의 수정 날짜를 비교해서 수정된 파일만 업데이트 할 수있기 때문에 처음 한 번만 풀 백업 해두면 그 다음 부턴 아주 빠른 속도로 업데이트 할 수있다.

서버에는 REDHAT 8.0 또는 REDHAT 7.x, REDHAT 9 가 설치되어있고,
백업 서버 역시 REDHAT8.0 이 설치되어있다.

우선 백업 계획은 서버들로부터 새벽 4시경에 1차 백업서버로 매일 백업을 받고,
1주 단위로 1차 백업 서버의 데이터를 일요일 새벽 5시에 2차 백업 서버로 전송받는다.

일단 백업 대상이 되는 서버들에 rsync 가 설치되어 있는지 확인해보고 없으면 rpm 바이너리를 받아서 설치한다.

]#rpm -qa rsync
rsync-2.5.7-0.8

참고로 rsync 에 최근 보안 결함이 발견 되었으니 반드시 최근 버전을 받아서 설치하도록...

http://updates.redhat.com/8.0/en/os/i386/rsync-2.5.7-0.8.i386.rpm

]#rpm -Uvh rsync-2.5.7-0.8.i386.rpm

rsync 는 ssh 를 이용한 방법과 873포트를 이용한 접속 방법이 있다.
나는 873 포트를 이용해서 xinetd 데몬으로 동작하도록 설정한다.
초기에는 default 로 xinetd 에서 rsync 가 disable 로 설정되어있으므로
아래와 같이 열어준다.
]#vi /etc/xinetd.d/

# default: off
# description: The rsync server is a good addition to am ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = yes => (요부분을 no 로...)
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}


rsync 의 설정파일은 /etc/rsyncd.conf 인데 rsync 설치후에도 존재하지 않는다. 긴장하지 말고 생성해주면 된다.
백업할 대상은 /home 파티션과 /usr/local/mysql/data 디렉토리, 그리고 메일,proftp 등의 설정이 들어있는 /etc 전체로 했다.

]#vi /etc/rsyncd.conf
[www] =>rsync 에서 사용할 alias name
path = /home =>실제 디렉토리 절대 경로
comment = webservice-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = ***.***.***.*** =>접근을 허용할 백업 서버 ip
max connections = 1
timeout = 300

[mysql]
path = /usr/local/mysql/data
comment = mysqldata-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = ***.***.***.***
max connections = 1
timeout = 300

[etc]
path = /etc
comment = config-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = ***.***.***.***
max connections = 1
timeout = 300

이렇게 해서 저장하면 설정은 끝났다.

슈퍼 데몬을 재시작하고
]#/etc/rc.d/init.d/xinetd restart

포트가 열려있는지 netstat 이나 telnet 명령으로 873포트를 확인해본다.
]#telnet localhost 873
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
@RSYNCD: 26


]#netstat -na | grep LISTEN
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 1285 /tmp/mysql.sock

873 포트가 보인다면 설정은 OK

이제 백업 당할 서버들의 설정은 끝났고, 1차 백업 서버를 세팅할 차례다.

백업할 서버 역시 rsync 가 설치 되어있는지 확인해보고 없으면 설치한다.

1차 백업 서버에 접속한 상태로 아까 세팅해 놓은 백업 당할 서버에 rsync

포트로 접속이 가능한지 테스트 해본다.
]#telnet ***.***.***.*** 873
Trying 127.0.0.1...
Connected to ***.***.***.***.
Escape character is '^]'.
@RSYNCD: 26

이렇게 대기 상태면 OK

만약 connect refuse 가 나오면 백업당할 서버의 세팅을 처음부터 다시 살펴본다.


이제 백업 과정을 기록할 로그 파일을 수동으로 만들것이다.

적당한 디렉토리( 예를 들면 /home/rsync-log)를 생성하고 파일을 기록할 수 있도록 권한을 조정한다.(좀 나은 방법이 있을텐데....허접한 관계로...)

cron 에 등록해서 하루에 1번 새벽 네시에 백업하기로 했으므로 우선
/etc/crontab 을 수정한다.

]#vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
01 4 * * * root run-parts /etc/cron.daily
00 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

/etc/cron.daily 디렉토리에 있는 놈들을 매일 새벽 4시1분에 실행 하도록 되었다.

이제 /etc/cron.daily 에 백업 스크립트만 생성하면 된다.

]#vi /etc/cron.daily/backup.sh
#!/bin/bash
startbackup=`date +%Y%m%d%H%M%S`
touch /home/rsync-log/$startbackup.start

rsync -avz ***.***.***.***::www /home/svr_92/www/
rsync -avz ***.***.***.***::mysql /home/svr_92/mysql/
rsync -avz ***.***.***.***::etc /home/svr_92/etc/

endbackup=`date +%Y%m%d%H%M%S`
touch /home/rsync-log/$endbackup.end

위의 설정은 백업을 시작할때 날짜를 이름으로 가지는 빈파일을 /home/rsync-log/ 에 생성하고 백업이 끝난후에 다시 같은 위치에 시간이 기록된 파일을 생성시켜서 나중에 백업에 걸린 시간을 비교할 수 있게 되어 있다.

-a는 아카이브 모드. 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v 전송 상태를 보여줌
-z 전송시 압축을 함.

rsync 에는 이 외에도 옵션이 많으므로 자세히 살펴볼 필요가 있다..!!


여기까지 해서 1차 백업 서버의 세팅이 끝났고, 이제 2차 백업 서버를 세팅할텐데........ 똑같으니까 생략한다.

참고로 내가 관리하는 20대의 서버에 40 GByte 정도의 데이터를 전송받는데

초기에 8시간 정도가 걸렸고, 그 이후 매일 실시되는 백업은 업데이트 과정이라서 매 5분 정도에 백업이 끝나는 것을 아까 백업하면서 기록한 rsync-log 로 확인 했다. 아마도 rsync 가 압축전송을 해서 이런 속도가 나오는것 같음..

5분만에 20대의 백업이 완료되다니....!!

/***********************************************************************/

여기까집니다.

잘못된 부분 냉정히 지적해주시고 조언 해주시면 감사히 듣습죠...



질주본능님의 글입니다.
원본글 : http://www.phpschool.com/bbs2/inc_view.html?id=9985&code=tnt2&start=0&mode=search&field=title&search_name=&operator=and&period=all&category_id=&s_que=rsync



download.asp?FileID=13759605
지나가다
빼꼼 좋은 내용입니다. 저도 적용해보고 싶군요. 그런데 만약 문제가 생겨서 backup data restore는 어떻게 하는지도 알려주시면 더욱 감사하겠습니다. 12/12 15:36:10

... 로드밸런싱 같은걸 하기 위해 같은서버 여러대 만들때는 좋겠지만,
날짜별로 백업할 수 없으니 백업용으로 쓰긴 좀 위험할 것 같네요. 12/12 15:41:40

카르마 맞씀미다 마꼬요~~
백업을 하면서 새로운 화일이나 바뀐 화일은 무조건 복사하기 때문에 마지막 백업한 이전의 상황으로 복구하기는 불가능합니다. 12/12 16:45:57

질주본능 카르마//
당근입죠.... 저희 회사에서는 하루전 그리고 가장 최근의 일요일 데이터 밖에 가지고 있지 않습니다.
날짜 별로 백업이 필요하다면 cpbk 를 이용하는 방법이 있습니다. 물론 알고 계시겠지만....
1차 백업 서버에 cpbk 를 설치해서 하드 디스크 두개 정도 추가한 다음(backup1, backup2), 첫번째 하드 디스크에 2일전, 두번째 하드 디스크에 3일전 데이터 를 저장하는 정도면 될거 같네요.
cpbk 에 관해서는 좋은 문서가 있군요.

http://www.linuxlab.co.kr/docs/01-01-6.htm 12/12 17:09:16

질주본능 빼꼼//
서버를 후딱 한대 새로 세팅한 다음 백업해놓은 데이터를 원위치 시키면 되는데요.... /etc 디렉토리를 백업 해놨으니까 사용자 계정, 이메일 세팅 등..... 도 원래대로 복구 가능하죠.
너무 허탈한 대답인가요...? 12/12 17:14:33

유니 rsync 가 압축전송을 해서 속도가 빠른게 아니구요..(물론 압출도 하긴 합니다만..) rsync는 변경된 파일의 변경된 부분만 전송을 하기 때문에 속도가 빠르답니다. 12/15 19:04:12

흰콧수염 rsync가 plain 모드에서는 아시는 것처럼 가장 빠른 전송률을 보입니다. 그러나 encrypted 모드로 동작할 때는
scp가 조금 더 빠릅니다.
제 경우 scp 를 이용해서,
일별 점층 백업, 주별 및 월별 풀백업을 이용하며, 이를 리모트 백업서버로 자동 전송합니다.
참고자료를 원하신다면
http://cafe.daum.net/klinux 의 자료실에서 찾으실 수 있습니다.(백업 클라이언트와 백업 리모트 서버의 세팅이 서로 다르고, ssh 인증하는 과정 등 내용이 많아 부득이 URL을 적었습니다.
12/23 11:11:56

WOWpc 근데..
disable = no => (요부분을 yes 로...)
이렇게 하면 xinetd 에서는 사용 안하는것으로 될텐데.....
disable = no 해야.. disable 을 하지 않겠다 라는 의미가 되지 않나요? 12/24 15:33:08

허걱 rsync의 사용이유는 백업이 아니라 미러링입니다.
그렇기 때문에 백업으로 사용하는 것은 올지 않습니다.

다만, rsync를 사용하여 미러링을 해둔다면 응급상황에서 조속한 조치를 취할 수 있다는 장점이 있습니다. 그러나 백업은 백업이기때문에 태입이건 HDD건 CD건간에 백업이 이루어져야 합니다. rsync 가 백업을 대신할 수는 없습니다.

또, 하나의 서버박스에서 rsync를 사용하는것 보다는 래이드를 이용하는 것이 더 효율적입니다. 하드에 가해지는 부하를 줄여줄 수도 있으니까요. 12/24 21:16:50

질주본능 WOWpc//수정했습니다. 잘못 써놨었네요..^^
흰콧수염//카페 가입했는데 scp 에 관한 내용을 못찾겠네요.
못들어가는데가 많습니다. 12/29 11:47:22

함동훈 백업은 ncftp 를 이용한 백업도 좋습니다. 백업서버가 넉넉하다면 rsync와 tar 를 결합하면 아주 좋을 것 같습니다. 01/02 21:50:13

박상훈 하드가 2개이고 용량이 좋을때 로컬하드에 3일분 정도의
파일백업본을 저장하고 다른 하드에 rsync 로 받음
하드가 3개일때는 따로따로 하면... 제가 이렇게 하고 있거든요 ;;; 03/14 0:43:50

출처 : Tong - ddakzzi님의 SERVER통

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
3165 TextArea 박스 내부에 밑줄이미지 삽입 99 단국강토 02.16 3870
3164 unix grep 명령어 사용법2번째 13 김영철 01.29 3864
3163 윈도우XP 풍선도움말 없애기 13 김영철 01.29 3858
3162 스타일이 적용된 selectbox 컨트롤 99 단국강토 12.30 3856
3161 [컴퓨터 키보드, 특수문자 정식 명칭들] M 최고의하루 12.18 3854
3160 MS outlook 2007 백업 프로그램입니다. 2 coruscate 09.14 3850
3159 알아두면 좋은 포토샵 단축키 총모음 M 최고의하루 12.19 3830
3158 history.back() 시 폼데이터 유지하기 13 김영철 01.15 3822
3157 원격데스크톱 연결 (원격제어) M 최고의하루 12.19 3816
3156 swf파일을 fla 파일로 변환하기 M 최고의하루 02.04 3814
3155 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-1 M 최고의하루 12.23 3806
열람중 rsync 미러링을 통한 백업기법 13 김영철 01.29 3805
3153 체크박스 배열을 edit 수정페이지로 불러오기 M 최고의하루 01.12 3804
3152 이것은 AI파일 미리보기입니다. 댓글2 M 최고의하루 01.15 3804
3151 미디어 컨트롤 소스 M 최고의하루 12.24 3790
3150 [MSSQL] 그룹별 상위 n명 가져오기 예제 13 김영철 01.23 3790
3149 체크박스 트리메뉴 99 단국강토 02.03 3789
3148 ps 명령어 사용법 13 김영철 01.29 3782
3147 제약조건(1) M 최고의하루 12.20 3776
3146 자신의 아이큐 알아보기 댓글1 17 미니 04.27 3775
3145 웹프로그래밍 언어별 데이터베이스연결 (ASP편) 13 김영철 01.23 3770
3144 pcre 문법, preg | 13 김영철 01.13 3765
3143 PUTTY Telnet , SSH 접속 프로그램 99 단국강토 01.06 3760
3142 [Gmail] CSV 파일 Outlook에 적용하기 M 최고의하루 12.20 3758
3141 PDF 암호를 깨버리자 (APDFPRP) M 최고의하루 12.04 3745
3140 출력물로 판단하는 토너 카트리지 이상 증상 2 coruscate 09.14 3743
3139 contentEditable 속성 99 단국강토 02.09 3736
3138 DBA라면 이 정도는 알고 있어야 하지 않을까요 !!! 13 김영철 01.23 3728
3137 ServerXMLHTTP의 인코딩 문제 13 김영철 01.29 3726
3136 MSSQL에서 문자로 된 날짜 시간 차이값 얻기 13 김영철 01.24 3708
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취