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
| ⓧ |
지나가다 |
빼꼼 좋은 내용입니다. 저도 적용해보고 싶군요. 그런데 만약 문제가 생겨서 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 |
|