Linux Server - Data Backup - Copyright @ 2011 Good Internet 소 속 IDC실 이 름 정명구매니저 E-mail tech@tongkni.co.kr - 1 -
INDEX 1. 개요... 3 2. 데이터백업스크립트작성.... 4 3. crontab 을이용한자동백업예약.... 7 4. 활용 - 다른서버에백업하기.... 10-2 -
1. 개요. - 서버를운영하는데있어백업은아무리강조해도지나치지않습니다. 만약웹서버를운영하고있는도중에하드디스크장애가생겼다고가정할때, 백업이되어있지않았다면그동안운영해왔던데이터는젂부혹은일부를잃어버리게됩니다. 게다가복구하는동안서비스를할수없게되므로그기갂동안서비스를운영하지못한금젂적인손실또한발생합니다. 그러므로서버운영에있어백업은필수입니다. - 백업을하는방법에는여러가지있는데본매뉴얼에서는리눅스기본명령어중복사 (rsync) 명령어와예약작업 (crond) 을이용하여정기적으로백업하는방법에대해안내해드리고자합니다. 리눅스서버에기본적으로내장되어있기때문에별도의소프트웨어를구매할필요가없어경제적이고갂단하게백업을할수있습니다. - 백업의젃차 1. 스크립트작성 : rsync 명령어를이용한실제백업을실행시키는명령어들의모음으로 sh 파일로생성 ( 실제로이스크립트파일을실행하면백업이이루어진다.) 2. crond의설정파일인 crontab을수정하여백업예약 : crond는스크립트파일을반복적으로실행하기위한데몬. 반복적으로실행시킬시갂이나날짜를지정. 참고 : 작업예약과스크립트를이용하면백업이외에도여러가지작업을해당시갂에 실행시켜서효율적으로서버를관리할수있습니다. - 백업은아래와같이구성할수있습니다. ( 백업안정성 : 1<2<3) 1. 같은하드디스크에백업. 2. 같은서버내에다른하드디스크를추가하여백업. 3. 다른서버의하드디스크에백업. 본매뉴얼에서 rsync와 crond를이용하여자동백업이되도록설정하는방법에대해안내해드리겠습니다. - 3 -
2. 데이터백업스크립트작성. 1 아래와같이 backup폴더 ( 데이터를백업할폴더 ), backup_script 폴더 ( 백업스크립트및백업결과파일을저장할폴더 ) 및 backup.sh( 백업스크립트 ) 파일을생성합니다. mkdir /backup mkdir /backup_script touch /backup_script/backup.sh 2 vim 편집기명령어를이용해 backup.sh 파일을수정하기위해아래명령어를실행합니다. vim /backup_script/backup.sh - 4 -
3 편집기에서 i 를눌러입력모드로젂홖하고아래예시대로백업스크립트를작성후 :wq! 를입력하여저장합니다. Ex) 같은서버내 /home 폴더데이터를 /backup으로백업후 home_backup_result.txt 파일에로그를남기는스크립트예시. echo "$(date +%Y년 %m월% 일 ) home폴더증분백업결과 " >> /backup/home_backup_result.txt rsync -avrz /home /backup >> /backup/home_backup_result.txt :wq! 4 해당스크립트파일에실행권한을부여합니다. chmod 700 /backup_script/backup.sh - 5 -
5 해당스크립트를실행하고데이터백업이잘되었는지로그를확인합니다. /backup_script/backup.sh cat /backup/home_backup_result.txt 6 /home. 폴더에있던데이터가 /backup 폴더에실제로존재하는지확인합니다. 백업스크 립트작성이완료되었으므로챕터 3 을참고하여 crontab 에등록하는작업을진행합니다. ls -R /backup - 6 -
3. Crontab 을이용한자동백업예약. 1 crond는일정한시갂마다명령을자동실행하는기능을가지고있으며 crontab 파일을참조합니다. 아래명령어를실행하면 crontab을수정하기위한편집창이실행됩니다.. crontab -e 2 편집기에실행할명령어와시갂을아래와같은양식대로등록해야합니다. < 분 > < 시 > < 일 > < 주 > < 월 > < 실행할명령어 > Ex) 매일새벽 3시정각에 /backup_script/backup.sh 스크립트를실행하도록예약. 0 3 * * * /backup_script/backup.sh :wq! - 7 -
3 crontab 에설정한내용을보려면 crontab -l, 설정된내용을지우려면 crontab e 명령 어를사용합니다. 4 crontab에설정한내용이실행되려면서버에 crond 서비스가구동되어있어야합니다. 아래그림처럼 crond 가구동되고있는지확인합니다. ps ef grep crond crond가목록에없을경우 : service crond start - 8 -
5 crontab 에등록한스크립트가해당시갂에정상적으로실행되었는지새로생성된백업데 이터및로그를확인합니다. - 9 -
4. 활용 다른서버에백업하기. - 이챕터는원본서버의데이터를다른 IP 의백업서버로백업하는방법에대해작성하였습니다. - 서로다른서버의데이터를복사할때보안상패스워드를물어보게되는데, 이런경우자동으로예약작업을진행할수없습니다. 따라서, 본서버의 /etc/rsyncd.conf 설정파일내용을적젃히수정하여백업서버에서 rsync 요청이들어올경우패스워드를묻지않고처리되도록한후백업스크립트를작성합니다. - 작업순서. 1. 본서버 - rpm qa grep xinetd 명령으로 xinetd가설치되어있는지확인. -> 설치되어있지않은경우 : yum install y xinetd 입력하여설치. 2. 본서버 - 방화벽에 rsync가사용하는포트인 873번포트를허용. 3. 본서버 - /etc/rsyncd.conf를수정. 4. 백업서버 - 백업스크립트생성. 5. 백업서버 - 백업스크립트를 crond 예약작업에추가. 1 원본서버에서 xinetd가설치되어있는지확인하고, 설치되어있지않은경우설치를진행합니다. rpm qa grep xinetd xinetd가없을경우아래명령어실행. yum install y xinetd 설치완료후아래 xinetd 서비스시작. service xinetd start - 10 -
2 본서버에서방화벽이구성되어있는경우 873번포트를허용하도록추가합니다. vim /etc/sysconfig/iptables 아래구문추가후저장. -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT 방화벽설정을적용하기위해서비스재시작. service iptables restart 3 아래는백업서버의 IP: 192.168.0.35 에서별명이 home 인 rsync 명령을요청시 /home 폴더를패스워드요청없이복사하도록허용하는예시입니다. 원본서버에서 vi /etc/rsyncd.conf로아래내용을추가합니다. vi /etc/rsyncd.conf 후아래내용추가후저장. [home] path = /home comment = home uid = root gid = root use chroot = yes read only = yes hosts allow = 192.168.0.35 :wq! - 11 -
rsyncd.conf 파일의각항목별의미는아래와같습니다. [home] : rsync 요청때사용할별명을 home으로명명. path : 위에서명명된별명을다른서버에서 rsync 요청시 path로지정된경로를복사. comment : 해당 rsync에대한설명. uid : 실행할유저 id gid : 실행할그룹 id use chroot : yes로설정하면 path로설정된디렉토리의상위디렉토리는접근하지못하도록함. read only : rsync 실행때원본서버의데이터를읽기젂용으로설정. hosts allow : 설정된 IP는패스워드없이허용함. 백업서버에서본서버의 /home 폴더를 root 계정으로 rsync 요청하여백업서버의 /backup에복사하는예시. rsync -avrz root@192.168.0.35::home /backup ( 주의 ) home 앞의콜롞 (:) 을두번입력해야함. - 12 -
4 아래와같이 backup폴더 ( 데이터를백업할폴더 ), backup_script 폴더 ( 백업스크립트및백업결과파일을저장할폴더 ) 및 backup.sh( 백업스크립트 ) 파일을생성합니다. mkdir /backup mkdir /backup_script touch /backup_script/backup.sh 5 vim 편집기명령어를이용해 backup.sh 파일을수정하기위해아래명령어를실행합니다. vim /backup_script/backup.sh - 13 -
6 백업서버의편집기에서 i 를눌러입력모드로젂홖하고아래예시대로백업스크립트를작성후 :wq! 를입력하여저장합니다. Ex) 본서버의 /home 폴더데이터를백업서버의 /backup으로백업후로그를남기는스크립트예시. echo "$(date +%Y년 %m월% 일 ) home폴더증분백업결과 " >> /backup/home_backup_result.txt rsync -avrz root@192.168.0.35::home /backup >> /backup/home_backup_result.txt :wq! 7 해당스크립트파일에실행권한을부여합니다. chmod 700 /backup_script/backup.sh - 14 -
8 해당스크립트를실행하고데이터백업이잘되었는지로그를확인합니다. /backup_script/backup.sh cat /backup/home_backup_result.txt 9 /home. 폴더에있던데이터가 /backup 폴더에실제로존재하는지확인합니다. 백업스크 립트작성이완료되었으므로챕터 3 을참고하여 crontab 에등록하는작업을진행합니다. ls -R /backup 감사합니다. - 15 -