------------------------------------------------------------------------------------------------------


출처 : http://aramjo.blog.me/120085120292 (  아람조 (aramjo) 님 블러그 )


좋은 자료를 추후에 분실할지도 모른다는 생각에 옮겨서 기록해 둡니다.

좋은 자료를 온라인에 공유해 주신 "아람조 (aramjo)" 님께 감사드립니다.

------------------------------------------------------------------------------------------------------


rsync와 lsync를 이용한 실시간 원격백업


------------------------------------------------------------------------------------------------------


rsync를 이용해서 원격지 백업서버에 데이터를 백업할 수가 있지만


데이터 갱신이 있을 때 자동적으로 백업시켜주진 않는다.


이런 자동 백업이 필요한 경우에는 rsync와 lsync 조합으로 처리가 가능하다.

 

하지만 데이터 갱신이 하루에도 수천건이 있다든가


대용량 파일을 백업해야 하는 경우라면 다른 백업 방법으로 하든가 아니면


cron 에 등록해서 하루 한번씩 백업받는 방법이 좋을 수도 있다.


백업 시에 cpu 부하가 일어나기 때문에 대용량 파일일 경우 백업 서버쪽에 무리가 갈 수 있기 때문이다.

 

아래의 설치 예는 원본 서버 [192.168.1.2]의 /home/web/sData 를 


백업 서버인 [192.168.1.5]의 /home/Backup/sData로 백업하도록 하는 과정이다.

 

lsync를 이용할 경우, 원본서버와 백업 서버 모두에 rsync가 설치되어 있어야 한다.

 


1. 원본 서버와 백업서버 양쪽 모두에 rsync 설치

 

* rsync 및 xinetd 설치 여부 확인

[root@localhost ~]# rpm -qa | grep rsync

rsync-2.6.8-3.1

[root@localhost ~]# rpm -qa | grep xinetd

xinetd-2.3.14-10.el5

 

없을 경우 yum install rsync, 또는 yum install xinetd로 설치

 

* rsync 파일 수정

[root@localhost ~]# 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 = no   (no로 수정)

        socket_type     = stream

        wait            = no

        user            = root

        server          = /usr/bin/rsync

        server_args     = --daemon

        log_on_failure  += USERID

}

 

[root@localhost ~]# /etc/init.d/xinetd start  (rsyncd 실행)

 

여기까지는 원본 서버와 백업 서버 모두 같이 설정한다.

 

2. 클라이언트 서버 rsyncd.conf 설정

 

[root@localhost ~]# vi /etc/rsyncd.conf


[rsync_client]       -- 서비스명(원본 서버쪽 lsync에서 사용할 서비스명)

path=/home/Backup/sData  -- 백업 경로

hosts allow=192.168.1.2     -- 접속 가능 IP (원본 서버 IP)

uid=0                              -- 접근 user id 

gid=0                              -- 접근 group id

use chroot=yes                -- chroot 사용여부 설정

read only=no                  -- 백업 데이터를 저장해야 하기 때문에 no로 설정

 

* 백업 경로 /home/Backup/sData 디렉토리 생성

[root@localhost ~]# mkdir /home/Backup/sData

 

3. 원본 서버 lsyncd 설치 및 lsyncd.conf.xml 작성

 

lsyncd는 첨부된 rpm 파일을 다운해서 rpm 설치로 한다. 소스파일을 다운 받아 소스설치해도 되지만

그냥 쉽게 rpm 설치로 완료.

[root@localhost ~]# rpm -Uvh ./lsyncd-1.26-1.1.i386.rpm

 

lsyncd.conf.xml 파일 작성

[root@localhost ~]# vi /etc/lsyncd.conf.xml

 

<lsyncd version="1">

    <settings>

        <!--no-daemon/-->

        <!--dryrun/-->

        <!--exclude-from filename="/tmp/exclude"/-->

 

        <logfile      filename="/var/log/lsyncd"/> (로그 파일 작성)

        <binary       filename="/usr/bin/rsync"/> (rsync 경로)

        <callopts>

            <option text="-az%r"/>

            <option text="--delete"/> (--delete 옵션 지정이 있으면 원본서버에서 삭제했을 때 백업서버에서도 삭제된다)

            <exclude-file/>

            <source/>

            <destination/>

        </callopts>

    </settings>


    <directory>

        <source path="/home/web/sData/"/>  (백업할 원본 서버의 디렉토리 경로)

        <target path="192.168.1.5::rsync_client/"/> (백업 서버 주소와 백업서버 rsyncd.conf에서 설정한 rsyncd 서비스명)

    </directory>

</lsyncd>

 

* 위의 lsyncd.conf.xml의 <directory></directory> 태그를 추가해서 다른 디렉토리를 추가로 백업할 수도 있다.

당연히 추가로 백업을 할 경우에는 백업 서버의 rsyncd.conf에 설정이 되어 있어야 한다.

또한 --delete 옵션 지정은 신중히 생각해서 할 것. 원본 서버와 상관없이 백업서버에 자료를 계속 보관해야 하는 경우라면

delete옵션은 삭제한다.

 

4. lsyncd 구동 스크립트 작성

 

[root@localhost ~]# vi /etc/rc.d/init.d/lsyncd

 

#!/bin/bash

# description: lsyncd auto start script

start() {

    pid=`pidof lsyncd`

    if [ $? -eq 0 ]; then

        echo "lsyncd (pid $pid) is running..."

        echo " "

    else

        echo "Starting lsyncd..."

        echo " "  

        /usr/bin/lsyncd

    fi

}

 

stop() {

    echo "Stopping lsyncd..."

    echo " "


    /bin/kill -9 `/sbin/pidof lsyncd`

    until [ -z $(/sbin/pidof lsyncd) ]; do :; done

}

 

case "$1" in

    start)

        start

        ;;

    stop)

        stop

        ;;

    restart)

        stop

        start

        ;;

    status)

        pid=`pidof lsyncd`

        if [ $? -eq 0 ]; then

            echo "lsyncd (pid $pid) is running..."

            echo " "

        else

            echo "lsyncd is not running"

            echo " "

        fi

        ;;

    *)

 

    echo "Usage: lsyncd {start|stop|restart|status}"

    exit 1

esac

exit $?

 

* 실행권한 설정

[root@localhost ~]# chmod 700 /etc/rc.d/init.d/lsyncd

 

* lsyncd 구동

[root@localhost ~]# /etc/init.d/lsyncd start