커뮤니티 정보

제목 rsync 명령의 소개와 사용법.
등록자 관리자 등록일 2010.09.16 12:14:28 검색 2125
rsync의 소개와 사용법 http://community.365managed.com/7572008.12.23 13:17:13 1636873포트를 사용한다면 /etc/inetd.conf(redhat7.0이전일경우)나 /etc/xinetd.d/rsync(redhat 7.0이후일경우)의 내용을 수정해주어야합니다. 또한 /etc/rsyncd.conf라는 파일을 만들어주어야하죠. 예) /etc/inetd.conf 수정내용 (redhat7.0이전일경우) rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon 예) /etc/xinetd.d/rsync 수정내용 (redhat 7.0이후일경우) service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } 보시다시피 실제적인 수정내용은 --daemon이죠. rsync를 daemon모드로 작동시키겠다는 뜻입니다. 결국 rsync는 inetd나 xinetd에서 데몬모드로 작동하게 되죠. ( netstat -tap 해보시면 쉽게 확인하실수있습니다. ^^) 아! 그리고 파일수정후에는 /etc/rc.d/init.d/inetd or xinetd를 restart해주는거 잊지마시구요. 자 이제 /etc/rsyncd.conf파일을 만들어 주어야하겠죠? 예) /etc/rsyncd.conf [www] path = /home/www comment = webserver1 uid = nobody gid = nobody use chroot = yes read only = yes hosts allow = 203.255.112.34 max connections = 3 timeout 600 생각보다 간단하죠? 그럼 위의 내용에대한 설명을 드리겠습니다. [www] 서비스명 path 서비스할 디렉토리위치 comment 설명 uid 파일전송하는 사용자의 id. 기본값은 nobody gid 파일전송하는 사용자의 그룹 id. 기본값은 nobody use chroot 위의 path를 root 디렉토리로 사용. (보안상 필요합니다.) read only 읽기전용 ( 클라이언트에서 서버로 올리는 경우에는 read only= no 로 설정을 해야됩니다. ) hosts allow 호스트별 접속허용. 기본값은 all host입니다. 접근을 허용할 호스트의 ip를 적어주시면됩니다. max connections 동시접속자수. timeout 클라이언트에서 접근시 타임아웃시간. anonymous 로 운영하는 경우 설정을 해야 클라이언트가 죽었을 때 서버에서 접속을 해체할 수 있습니다. 이렇게해서 873포트를 쓰는 rsync서버의 설정은 끝났습니다. 그럼 rsync클라이언트에서 자료를 가져오는 방법을 아셔야겠죠? 우선 위에 rsync서버설정이 된것을 webserver1(www1.yahoo.co.kr)이라고 하고, 그 서버로부터 정보를 가져와 동기화 시킬 서버를 webserver2(www2.yahoo.co.kr)라고 합시다. webserver2의 /home/www로 webserver1의 /home/www내용을 가져오려구 한다면, 이렇게 하시면 됩니다. 예) webserver2에서 # rsync -avz www1.yahoo.co.kr::/home/www /home/www 간단하죠? -avz옵션은 아래와 같습니다. -a는 archive mode (심볼릭 링크, 속성, 퍼미션, 소유권 등 보존). -v verbose(상세하게 보여움). -z compress(전송시 압축을 함). 휴~ 여기까지가 rsync서버가 873포트로 사용될경우 설정과 사용법입니다. rsync 설정과 사용 (rsh,ssh) -------------------------------------------------------------------------------- 그럼 이제 두번째로 rsync서버가 rsh,ssh를 사용할 경우를 알아볼까요? 실제로 앞의 설정내용에서 크게 틀린점은 없습니다. 우선 inetd나 xinetd를 수정하지 않으셔도 되고, /etc/rsyncd.conf를 만들어 주지 않으셔도 되니까요. 결국 설명할 내용은 클라이언트에서의 사용법 밖에 없겠네요. 그럼 아까와 같이 rsync서버설정이 된것을 webserver1(www1.yahoo.co.kr)이라고 하고, 그 서버로부터 정보를 가져와 동기화 시킬 서버를 webserver2(www2.yahoo.co.kr)라고 합니다. webserver2의 /home/www로 webserver1의 /home/www내용을 가져오려구 한다면, 이렇게 하시면 됩니다. 예) webserver2에서 # rsync -avz -e ssh www1.yahoo.co.kr:/home/www /home/www -e 옵션은 rsh나 ssh를 사용할때 써주는 옵션입니다. ( rsh를 사용하실려면 -e rsh하시면 되겠죠.) 또 아까 위에서 873포트를 사용할때 :: 라고 했던거 기억하시죠? rsh나 ssh를 사용할때는 : 한개만 써주시면됩니다. ssh를 사용할경우 암호를 입력해야하는데, 이것은 암호파일을 따로 만들어서 암호를 직접입력하는 수고를 줄일수있습니다. (--password-file 옵션을 사용하시면 암호파일의 위치를 지정해줄수있습니다.) 자 이렇게해서 rsync의 설정법과 사용법에 관한 애기가 끝났습니다. 실제로 웹서버간의 데이타동기화를 할경우는 아까 rsync클라이언트에서 썼던 명령을 cron으로 돌리셔야 합니다. 그래야 주기적으로 데이타동기화를 할수있겠죠. cron에 대한 것은 테마리눅스에 강좌로 올라와 있으니 참고 바랍니다.(http://www.linux.co.kr/theme/index1.html?ca=200107) 간단한 사용예 rsync -avurz --delete --exclude=*.db --exclude=*.info SRC(원본) DEST(복사될 위치) -a는 archive mode (심볼릭 링크, 속성, 퍼미션, 소유권등 보존). -v옵션 : verbose. 일어나는 일을 자세히 출력 -u옵션: 혹시, 대상 디렉토리에 더 새 파일이 있으면 그냥 skip. (혹은 같은 버전의 파일이라도 -_- u를 안 붙이면 그냥 그대로 cp처럼 덧씌우는듯.) -r옵션: recursive. 하위디렉토리까지 동기화. -z compress(전송시 압축). --delete: 원본 디렉토리에 없는 파일은 없앤다. --exclude: 제외할 파일을 지정한다.(cvs, 혹은 설정파일 등을 지정) /가 붙는 것과 안붙을 경우 차이가 난다. SRC경로를 /home/backup라고 해주면 backup폴더가 생성되고 자료들이 backup폴더 안으로 들어가고 DEST경로를 /home/backup/라고 해주면 백업 경로에 바로 저장이 된다. 주의 하기 바람. 출처: Linux.co.kr -------------------------------------------------------------------------------------- SSH키를 이용한 RSYNC 백업법 ============================ A 서버 : 백업대상 서버 (원본서버) A서버계정:suhan B 서버 : 백업진행 서버 (백업서버) B서버계정:inkaftp 시나리오: B 서버는 A 서버의 특정 계정으로 자동로그인 하여 A 의 내용을 B로 Rsync 한다. ====================================================================================== 1> 키생성 B 서버에서 키를 생성해보도록 하겠다. 키는 생성하는 위치가 중요한것이 아니라 개인키를 가진쪽이 공개키를 가진쪽으로 접속한다. [inkaftp@edutotal ~]$ ssh-keygen -d -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/inkaftp/.ssh/id_rsa): Created directory '/home/inkaftp/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/inkaftp/.ssh/id_rsa. Your public key has been saved in /home/inkaftp/.ssh/id_rsa.pub. The key fingerprint is: 11:ce:7a:2d:60:0d:09:b3:2a:8b:3f:de:9a:8f:96:20 inkaftp@edutotal.com RSA 방식으로 키를 만들었으며 , 패스워드는 넣지 않았다. .pub 파일이 공개키이며 이파일은 접속을 당할 서버 즉 A서버의 접속할 계정에 심어야 된다. 2> 공개키를 전송한다. #scp /home/inkaftp/.ssh/id_rsa.pub suhan@A서버아이피:~/.ssh/autorized_keys (키가여러개일때는 뒤에 숫자를 붙인다 keys2...) .ssh 디렉이 없으면 먼저 만들어두도록 한다 패스워드 묻어볼것이다... 중략... 3> B서버에서 A 서버로 접속테스트 해본다. # ssh -i /home/inkaftp/.ssh/id_rsa suhan@A서버아이피 RSA key fingerprint is 03:c0:4d:25:a6:5d:0c:41:70:a7:11:0e:f7:12:ee:c8. Are you sure you want to continue connecting (yes/no)? yes 정상접속이 된다면 성공이다. 4> RSYNC 에 걸어보자 서버가 여러개일 경우 관리를 위해 개인키 id_rsa 파일을 알아보기 쉽게 계정과 서버아이피로 이름을바꾼후에 -i 옵션으로 로딩한다. # mv /home/inkaftp/.ssh/id_rsa /home/inkaftp/.ssh/suhan_AServer #rsync -avzrt --delete -e "ssh -i /home/inkaftp/.ssh/suhan_AServer" suhan@A서버아이피:/home/suhan/www /home/inkaftp/backup #rsync -avzrt --delete --rsh="ssh -i /home/inkaftp/.ssh/suhan_AServer -l suhan" A서버아이피:/home/suhan/www /home/inkaftp/backup 위의 2개 모두 정상 동작할것이다. 5> B서버의 inkaftp Cron 에 등록한다. [inkaftp#B서버]$ vi /home/inkaftp/rsync_cron_exe.sh #!/bin/bash rsync -avzrt --delete -e "ssh -i /home/inkaftp/.ssh/suhan_AServer" suhan@A서버아이피:/home/suhan/www /home/inkaftp/backup 만든 파일에 실행권한을 준다. [inkaftp#B서버]$ crontab -e 30 4 * * * /home/inkaftp/rsync_cron_exe.sh | mail -s [백업알리미] 내멜주소 <=결과를 메일로 보내준다. PS. 서버내에 공간이충분하고 파티션이나 드라이버가나눠져 있다면 매일 매일 내부백업을 해두는것도 도움이 될것이다. vi /etc/cron.daily/rsync_exe.sh #!/bin/bash rsync -avzrt --delete /home/mainweb/www /home1 -- 출처 : PHPSCHOOL.com --
... 자료없음 ...