[ rsync 와 cron 을이용한원격네트워크백업서버구축실무 ] [01] 원격네트워크백업개론 [02] rsync? [03] rsync 특징 [04] 다운로드및설치 [05] 환경설정 [06] 백업수행 [07] Trouble Shooting [08] Mirroring 서버구축 [01] 원격네트워크백업개론서버관리자는백업으로부터시작하지않을까라고생각한다. 한대의서버만을관리한다면백업에그다지큰어려움이없지만, 여러대의서버를관리하고있거나고객의데이터를보호해야하는의무가있는관리자라면백업은말그대로장난이아닌것이다. 리눅스뿐만아니라거의모든서버에서백업은필수라할수있을것이다. 우리는각파트너끼리 백업서버 를정하고다른파트너가클라이언트가주기적 으로백업하도록설정 (cron) 하고각각의서버에서백업된데이터들을백업서버 로지정된시간에네트워크로자동백업되게하는방법을공부하자. +---------------+ +---------------+ +---------------+ 로컬서버1 --> 백업서버 <-- 로컬서버2 +---------------+ +---------------+ +---------------+ 유저1 유저2 유저3 rsync 로네트워크백업을설정하는방법에는 873 포트를이용하는방법과 rcp 나 ssh 를이용하는방법으로나뉘며이두가지설정에는조금의차이가있다. 그리고 873 포트를이용하는방법은 xinted 를이용하는방법이고, rsh 나 ssh 를 이용하면 xinted 를이용하지않고 rsync 의 e 옵션을이용한다.
[02] rsync? rsync 는많은기능을가지고있는 rcp 의대체이다. rsync 는 rsync algorithm 을사용하고원격파일을동기화시키는매우빠른방법을제공한다. sync는링크파일사이에서양쪽일련의파일들이미리링크의끝의하나인것을요구하지않고단지차이점만보낸다. 첫째로파일을힐끔보는것은불가능한데, 왜냐하면두파일사이의차이점을계산하는것은양쪽파일의지역억세스 (local access) 가일반적으로필요하기때문이다. rsync algorithm을기술하는기술적인문서는이패키지에포함되어있다. [03] rsync 특징 1 rsync 는전체디렉토리트리와파일시스템을업데이트할수있다. 2 선택적으로심볼릭링크, 하드링크, 파일소유권, 권한, 장치와시간을유지할수있다. 3 설치하기위해서특별한권한을요구하지않는다. 4 국제적인정보루트로다양한파일들의대기시간을단축한다. 5 rsh, ssh 또는전송 (transport) 과같은직접소켓 (direct sockets) 을사용할수있다. 6 이상적인미러링 (mirroring) 을위한익명의 (anonymous) rsync 를지원한다. [04] 다운로드및설치 http://rsync.samba.org/ [root@localhost ~]# mkdir /rsync [root@localhost ~]# cd /rsync/ [root@localhost rsync]# wget http://rsync.samba.org/ftp/rsync/rsync-3.0.5.tar.gz
--04:25:33-- http://rsync.samba.org/ftp/rsync/rsync-3.0.5.tar.gz Resolving rsync.samba.org... 66.70.73.150 Connecting to rsync.samba.org 66.70.73.150 :80... connected. HTTP request sent, awaiting response... 200 OK Length: 776613 (758K) [application/x-tar] Saving to: `rsync-3.0.5.tar.gz' 100%[===================================>] 776,613 203K/s in 3.7s 04:25:46 (203 KB/s) - `rsync-3.0.5.tar.gz' saved [776613/776613] [root@localhost rsync]# ls rsync-3.0.5.tar.gz [root@localhost rsync]# tar zxvf rsync-3.0.5.tar.gz [root@localhost rsync]# cd rsync-3.0.5 [root@localhost rsync-3.0.5]#./configure --prefix=/usr --sysconfdir=/etc -- localstatedir=/var --mandir=/usr/share/man --disable-ipv6 rsync 3.0.5 configuration successful [root@localhost rsync-3.0.5]# make && make install mkdir -p /usr/local/bin /* 설치된장소 */ /usr/bin/install -c -m 755 rsync /usr/local/bin mkdir -p /usr/local/share/man/man1 mkdir -p /usr/local/share/man/man5 [ 참고 ] 네트워크백업서버를구축하기위해서는 rsync가백업서버와백업대상서버모두설치가되어있어야한다. [03] 환경설정 873 포트를통한 rsync 네트워크백업개론 rsync는원래데이터동기화에사용되는것이지만활용여하에따라서네트워크백업을수행하기위한훌륭한도구가될수있다. rsync는몇대의웹서버에부하를분한하기위해 remote sync 작업을수행하기위한용도로만들어진것이다. 서버관리자가이런 rsync를어떻게이용하느냐에따라서웹서버데이터동기화라든가, 네트워크백업이라든가하는작업들을원하는대로수행할수있다.
네트워크흐름도 < 인터넷 > < 라우터 > < 스위치 / 허브 > +---------------+ +---------------+ +---------------+ 로컬서버1 --> 백업서버 <-- 로컬서버2 +---------------+ +---------------+ +---------------+ 유저1 유저2 유저3 - 백업대상서버들 : 서버 1, 서버 2 = 백업대상들 ( 백업할데이터가있는서버들 ) - 백업서버 : 백업데이터를가져와보관할백업서버 1 클라이언트서버들자체적으로 cron 에의한백업을수행하여각각의디렉토리 에저장되어있다. 이작업은각각의로컬서버에주기적으로자동백업되어특 정한디렉토리 (backup) 에저장이된다.( 로컬서버백업 ) 2 백업서버 에서 서버 1,2 에백업되어있는데이터들을네트워크를통해가 져오게된다. 이작업은 백업서버 의 cron 에의해수행되며주기적인작업이 수행이가능하며여기서는매일새벽 5 시에데이터를가져오도록설정하겠다. crontab l 확인 */30 * * * * /usr/bin/rdate -s time.bora.net && /sbin/clock w 로컬서버1, 로컬서버2( 로컬서버 ) 설정 1 /etc/services 파일에 rsync 873 포트확인 [root@localhost ~]# cat /etc/services grep 873 rsync 873/tcp # rsync rsync 873/udp # rsync 2 /etc/hosts.allow 파일의백업대상서버접근가능확인 [root@localhost rsync-3.0.5]# cat /etc/hosts.allow # # hosts.allow This file describes the names of the hosts which are # allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # rsync : 192.168.30.100 /* 백업서버 IP 추가 */
위반드시 백업서버 IP 를설정해줘야한다. 왜냐하면 백업서버 가서버 1, 서버 2( 로컬서버 ) 로 873 포트를통해 rsync 로 접근을해야하기때문이다. 3 xinetd 설정 [root@localhost rsync-3.0.5]# vi /etc/xinetd.d/rsync # default: off # description: The rsync server is a good addition to an 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 } disable = yes ---> disable = no [root@localhost rsync-3.0.5]# service xinetd restart xinetd 를정지중 : [ OK ] xinetd ( 을 ) 를시작중 : [ OK ] 4 /etc/rsyncd.conf 파일설정이파일은어떤내용을백업대상으로할것인가? 그리고 rsync로접근을허용하는서버등에대한설정을한다. [ 주의 ] 반드시 rsyncd.conf 파일이어야한다. [root@localhost ~]# vi /etc/rsyncd.conf [server1] path = /rsynctest comment = server1 uid = nobody gid = nobody use chroot = yes read only = yes hosts allow = 192.168.30.100
max connections = 35 timeout = 600 위파일은없으므로 /etc/rsyncd.conf 만들어서위내용으로설정하자! 설정항목 설명 비고 [server1] 서비스이름. 일반적으로서버의이름 로컬서버1,2 모두 path = /rsynctest 백업대상데이터가저장된절대경로 다르게설정해야한 comment = server1 설명문. 서버이름이나컨텐츠의이름입력 다. uid = nobody 데이터를전송할 user 명 gid = nobody 데이터를전송할 group 명 use chroot = yes path 에서설정한경로를루트경로로사용함. 보안을위해꼭 yes로설정할것을권함 꼭동일해야할필요 read only = yes 백업대상서버에 write 할경우에는 no로설정. 성은없으나백업을즉백업서버에서백업대상서버 (server1,2) 로데이수행하는서버가동터를가져가기만하므로일반적으로 read only만일한서버이므로가설정하게됨능한 로컬서버 hosts allow = 접근허용할서버의 IP. 백업서버의 IP 입력 1,2... 모두동일하 192.168.30.100 게한다. max connections = 동시에접속할수있는동시접속자수. 35 무제한으로설정하려면 0 을설정함 timeout = 600 기본값은 60초이며백업서버에서접근하여타임 아웃될시간을설정함 [ 주의 ] 위표에서 [server1] 부분은백업대상서버들에따라모드다르게되며, path 부분은다를수도있고, 동일할수도있다. 즉, 로컬서버1은 [server1이되어야하고로컬서버2는 [server2] 가되어야하고로컬서버3는 [server3] 와같은형식으로되면된다. 그리고 path 부분에는백업대상이되는내용이들어있는디렉토리이다. 또한이디렉토리에는백업대상서버들이자체적으로 cron에의해수행되어백업수행되고있는디렉토리임에유의하기바란다. 5 로컬에백업할디렉토리만들기및실습을위한파일복사 [root@localhost ~]# mkdir /rsynctest [root@localhost ~]# cd /rsynctest/ [root@localhost rsynctest]# cp -r /usr/local/ /rsynctest/ [root@localhost rsynctest]# du -sh 185M.
백업서버 설정 1 /etc/services 파일에 rsync 873 포트확인 [root@localhost ~]# cat /etc/services grep 873 rsync 873/tcp # rsync rsync 873/udp # rsync 2 백업서버 에서로컬서버로부터파일복사가되는지테스트 [root@localhost rsync_server]# rsync -avz 192.168.30.99::server1 /rsync_server/ /* 위 192.168.30.99는로컬서버1의 IP 이다 */... 중간생략... local/share/man/man9x/ local/share/man/mann/ local/src/ sent 103042 bytes received 47798888 bytes 818836.41 bytes/sec total size is 174946132 speedup is 3.65 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1506) [generator=3.0.5] 위테스트는로컬서버1(server1) 의서버에존재하는 /etc/rsyncd.conf 파일내의 server1 이라는항목에설정된경로의데이타를가져와서 백업서버 의 /rsync_server 이라는디렉토리에보관하라는의미이다. [ 옵션설명 ] -a : achive mode로서기존의속성및퍼미션, 소유권등의설정내용을그대로유지한다. -v : verbose mode로서작업내용을상세하게보여준다. -z : 전송속도를높이기위해압축수행후전송을한다. 3 주기적은자동백업수행을위해서 cron을이용해보자! [root@localhost rsync_server]# mkdir /backup 이제 백업서버 에서스크립트를만들어서각각의서버 ( 로컬서버1, 로컬서버2) 로부터백업을 /backup 위치에받을것이다.
스크립트생성 [root@localhost rsync_server]# cd /backup/ [root@localhost backup]# vi backup.sh #!/bin/bash # server1 backup rsync -avz 192.168.30.99::server1/ /backup/server1 # server2 backup rsync -avz 192.168.30.98::server2/ /backup/server2 # server3 backup rsync -avz 192.168.30.97::server3/ /backup/server3 cron 등록 [root@localhost backup]# crontab -e */30 * * * * /usr/bin/rdate -s time.bora.net && /sbin/clock -w 55 06 * * * su - root -c '/backup/backup.sh' 위시간설정을 5분후로잡아주자! 실행권한설정 [root@localhost backup]# chmod 700 backup.sh 직접테스트및확인 [root@localhost backup]#./backup.sh local/share/man/man9x/ local/share/man/mann/ local/src/ sent 103042 bytes received 47798888 bytes 912417.71 bytes/sec total size is 174946132 speedup is 3.65 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1506) [generator=3.0.5] rsync: failed to connect to 192.168.30.98: No route to host (113) rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5] rsync: failed to connect to 192.168.30.97: No route to host (113) rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]
[root@localhost backup]# ls -alf 합계 20 drwxr-xr-x 3 root root 4096 4월 14 06:53./ drwxr-xr-x 34 root root 4096 4월 14 06:44../ -rwx------ 1 root root 219 4월 14 06:49 backup.sh* drwxr-xr-x 3 root root 4096 4월 14 06:28 server1/ [root@localhost backup]# cd server1/ [root@localhost server1]# ls -alf 합계 12 drwxr-xr-x 3 root root 4096 4월 14 06:28./ drwxr-xr-x 3 root root 4096 4월 14 06:53../ drwxr-xr-x 14 root root 4096 4월 14 06:28 local/ 정상으로백업이잘이루어지는것을알수있을것이다. [07] Trouble Shooting (01) 압축파일상태에러 (inflate returned-3) 이에러는백업대상이되는파일이 gzip 으로압축되어있을경우에 rsync의실행옵션중 z 라는옵션을사용했기때문에발생하는에러이다. 압축된파일을다시압축해서정송하려고하는도중에발생하는에러로서자주발생하는에러중하나이다. [ 해결방법 ] 이미압축이되어있는파일이므로 rsync 실행옵션에서 z 옵션을뺀후에실행하면에러해결을할수있다. 즉 rsync의실행옵션에서 z 옵션을빼고 av 옵션만을사용하여실행하면에러가발생하지않는다. (02) time out...error 이에러는백업대상서버에있는 /etc/rsyncd.conf 파일내의 timeout 값이너무작게서정되어있어서발생하는에러이다. [ 해결방법 ] /etc/rsyncd.conf 파일내의 timeout 값을조금높게설정해주면된다. 주석처리도가능하다. (03) Max Connection 관련에러 Max Connections 에러는백업대상서버에있는 /etc/rsyncd.conf 파일내의 max connections에설정된값이상의연결이시도되었기때문이다. [ 해결방법 ] /etc/rsyncd.conf 파일내의 max connections 항목값을적당하게높여주거나조절해주면된다. 주석처리도가능하다.
(04) 전송대상파일크기에러 (out of memory) memory에관련된에러로서해결방법이꽤까다로운에러중하나이다. 전송대상파일크기가너무커서 rsync에서전송해야할파일의체크섬 (checksum) 에서발생하는에러이다. [ 해결방법 ] 백업대상서버에있는전송대상파일들의크기를점검해보라. 너무클경우에는파일을 2~3개로쪼개어서다시실행해보면해결할수있다. [08] Mirroring 서버구축우린바로앞에서 rsync를이용한원격백업서버를구축해보았다. 원래 rsync는미러링을구축하기위한동기화에사용되었는데여기서미러링 (mirroring) 서버란동일한내용을보관하도록제공하는서버를의미한다. 흔히 mysql 이나 apache 같은대중적으로사용되는솔루션같은경우에는거의 모든국가에서미러링서버를별도로구축하여두고있다. 즉, 빠른다운로드서비스를제공하기위해서이다. 구분원본소스서버 (A) 미러링서버 (B) IP 주소 192.168.5.5 192.168.5.6 역할원본소스가보관된서버이며 /var/ftp/pub 디렉토리에 FTP 서비스 다운로드파일들이존재하고있음 주기적으로원본소스서버의 /var/ftp/pub 디렉토리내의소스파일들을가져와서미러링서버의 /var/ftp/pub 디렉토리에저장하게됨 데이터흐름방향 A 서버의데이터가계속바뀌어도, B 서버에서주기적으로자동동기화되므로 A 와 B 가모두동일한데이터를갖게됨 http://cafe.naver.com/linuxlog krintiz@naver.com