본문 바로가기
운영체제 (LNX,WIN)

호스트간의 데이터 동기화(rsync) 및 미러링(mirroring)

by 날으는물고기 2008. 12. 24.

호스트간의 데이터 동기화(rsync) 및 미러링(mirroring)

∼∼∼∼∼∼∼∼∼  목   차   ∼∼∼∼∼∼∼∼∼∼

0. 미러링(mirroring) 이란?
■사용환경
1. rsync는 무엇인가?
2. rsync 특징
    2.1 rsync 는 전체 디렉토리 트리와 파일 시스템을 업데이트 할 수 있다.
    2.2 선택적으로 심볼릭 링크, 하드 링크, 파일 소유권, 권한, 장치와 시간을 유지할 수 있다.
    2.3 설치하기 위해서 특별한 권한을 요구하지 않는다.
    2.4 국제적인 정보루트로 다양한 파일들의 대기 시간을 단축한다.
    2.5 rsh, ssh 또는 전송(transport)과 같은 직접 소켓(direct sockets)을 사용할 수 있다.
    2.6 이상적인 미러링(mirroring)을 위한 익명의(anonymous) rsync를 지원한다.
3. rsync 컴파일(Compilation)
    3.1 rsync 컴파일 방법
    3.2 services에 rsync 추가하기
4. 설정 (Configuration)
    4.1 rsyncd.conf
    4.2 motd
    4.3 syslog.conf
    4.4 전역 옵션 설명(Global options)
    4.5 지역/모듈 옵션(Local/Module options)
5. 사용법
    5.1 서버(server) 실행
    5.2 클라이언트(client) 실행
6. 고급 사용 예제
    6.1 ssh 를 사용한 미러링(mirroring)
7. 후기

∼∼∼∼∼∼∼∼∼∼∼∼∼∼∼∼∼∼∼∼∼∼∼

0. 미러링(mirroring) 이란?

    사전에 등록된 미러링(mirroring)은 무엇일까?

            일반사전에는
            mirror
            -n.
            1 거울; 〔光〕 반사경.

    인터넷 사전에는

    mirroring [미러링]
    ① 다른 지역에 있는 데이터의 복사본을 그대로 유지하는 것. 원본의 내용이 바뀌게 되면, 바뀐 내용을 다시 갖고 와서 항상 같은 데이터를 갖도록 유지한다. 유명한 FTP 지역의 경우 한 곳에 사용자들이 너무 몰리면 성능상의 문제가 발생하게 되는데, 이를 방지하기 위해 다른 곳에 이와 똑같은 데이터를 미러링해 두면 그 곳에 가까운 사용자들은 이를 사용할 것이므로 사용자들을 분산시키는 장점이 있다.
    ② 한 시스템의 내용과 똑같은 내용을 갖는 시스템을 별도로 유지하는 것. 만약 한 시스템이 고장 나게 되면 미러링한 다른 시스템을 대신 사용하면 된다. 고장 허용 시스템에서 사용하는 방법 중의 하나이다.
    라고 사전에 나온다. 요즘 인터넷에 찾아 다니다 보면 미러링(mirroring) 한다는 곳이 자주 보인다. “과연 나도 할 수 있을까?” 라는 의문에서 시작해서 “한번 해 보아야겠다” 라는 의지로 인해, 찾아보게 되었다. “그럼 과연 미러링(mirroring)하는 프로그램은 무엇이 있을까?” 필자가 원했던 프로그램은 소스가 공개(open) 되어있고, 공짜(free)여야 한다는 가정하에서 출발하였다. 이런 조건을 충족하고 간단하면서 훌륭한 프로그램으로 rsync를 발견하였다.

■사용환경

    사용환경은 아래와 같다.

    [linux@test bin]$ uname -a
    Linux test .loggroup.com 2.2.16-22 #1 Tue Aug 22 16:16:55 EDT 2000 i586 unknown
    [linux@test linux]$ ifconfig eth1 | grep inet
            inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
    wu-ftpd-2.6.1-6.i386.rpm
    rsh-0.17-2.2.i386.rpm
    rsh-server-0.17-2.2.i386.rpm
    sysklogd-1.3.33-6.i386.rpm

    [linux@log linux]$ uname -a
    Linux log.loggroup.com 2.2.16-22 #1 Tue Aug 22 15:48:40 EDT 2000 i486 unknown
    [linux@test linux]$ ifconfig eth0 | grep inet
            inet addr:192.168.1.4  Bcast:192.168.1.255  Mask:255.255.255.0
    wu-ftpd-2.6.1-6.i386.rpm
    rsh-0.17-2.2.i386.rpm
    rsh-server-0.17-2.2.i386.rpm
    sysklogd-1.3.33-6.i386.rpm

    미러링(mirroring)을 위해서 필자는 rsync를 사용하였고 이제부터 rsync에 대해 설명해 나가겠다.  

1. rsync 는 무엇인가?

    rsync는 많은 기능을 가지고 있는 rcp 의 대체이다. rsync는 “rsync algorithm”을 사용하고 원격파일을 동기화 시키는 매우 빠른 방법을 제공한다. sync는 링크 파일 사이에서 양쪽 일련의 파일들이 미리 링크의 끝의 하나인 것을 요구하지 않고 단지 차이점만 보낸다. 첫째로 파일을 힐끔 보는 것은 불가능 한데, 왜냐면 두 파일 사이의 차이점을 계산하는 것은 양쪽 파일의 지역 억세스(local access)가 일반적으로 필요하기 때문이다.

    rsync algorithm을 기술하는 기술적인 문서는 이 패키지에 포함되어 있다.

    rsync는 rcp와 비슷한 동작을 하는 프로그램으로 rcp보다 더 다양한 옵션이 있고, 더 효율적으로 데이터를 전송합니다. (출발지와 목적지 사이에 다른 부분만을 전송) 파일크기의 변화나 시간의 변화등을 이용 동기화를 합니다.
    주요 특징은 다음과 같습니다.

    ㅇ 링크, device, 소유자, 그릅, 허가권 복사 지원
    ㅇ GNU tar와 비슷한 exclude, exclude-from 옵션 지원
    ㅇ rsh 또는 ssh 등 사용가능
    ㅇ root 권한이 필요없음
    ㅇ anonymous 또는 인증 rsync 서버 지원(미러링에 유용함)

2. rsync 특징

    2.1 rsync 는 전체 디렉토리 트리와 파일 시스템을 업데이트 할 수 있다.

    2.2 선택적으로 심볼릭 링크, 하드 링크, 파일 소유권, 권한, 장치와 시간을 유지할 수 있다.

    2.3 설치하기 위해서 특별한 권한을 요구하지 않는다.

    2.4 국제적인 정보루트로 다양한 파일들의 대기시간을 단축한다.

    2.5 rsh, ssh 또는 전송(transport) 과 같은 직접소켓(direct sockets)을 사용할 수 있다.

    2.6 이상적인 미러링(mirroring)을 위한 익명의(anonymous) rsync 를 지원한다.

3. rsync 컴파일(Compilation)

    3.1 rsync 컴파일 방법

    아래 사이트 들에서 다운 받을 수 있다.

    ftp://sunsite.auc.dk/pub/unix/rsync
    ftp://ftp.sunet.se/pub/unix/admin/rsync
    ftp://ftp.fu-berlin.de/pub/unix/network/rsync
          Or naturally
    rsync://samba.anu.edu.au/rsyncftp/

    필자의 경우,
    http://rsync.samba.org/ftp/rsync/rsync-2.4.6.tar.gz에서 rsync-2.4.6의 소스를 받았다.
    [root@log /root]# whoami
    root
    [root@log /root]# gzip -d rsync-2.4.6.tar.gz
    [root@log /root]# tar xvf rsync-2.4.6.tar
    [root@log /root]# cd rsync-2.4.6

    필자의 경우 configure 파일의 ac_default_prefix=/usr/local 이 부분을 ac_default_prefix=/usr/local/rsync 로 변경하였다.

    [root@log rsync-2.4.6]# ./configure
    [root@log rsync-2.4.6]# make
    [root@log rsync-2.4.6]# make install
    [root@log rsync-2.4.6]# make clean
    [root@log rsync-2.4.6]# cd /usr/local/rsync/
    [root@log rsync]# ls -al ./bin/rsync
    -rwxr-xr-x    1 root     root       201127 Mar 19 02:31 ./bin/rsync

    위에서와 보는 것과 같이 성공적으로 설치된 것을 볼 수 있다. 필자의 경우 기본환경인 /usr/local/bin/에 rsync를 설치하지 않고, /usr/local/rsync/bin/rsync에 설치를 하였음으로 rsync를 실행하려면, PATH를 지정해 두어야 할 것이다.

    3.2 services 에 rsync 추가하기

    이와 함께 /etc/services 파일에 rsync 873/tcp란 항목을 추가해야 할 것이다.
    [root@log rsync]# echo “rsync 873/tcp #rsync” >> /etc/services

    ㅇ rsync 2.3.1 이전 버전의 경우 "보안버그"가 있으므로 이전 버전이 설
    치되어있다면 반드시 "2.3.1 이상 버전으로 업데이트"해야함

    ㅇ 동기화에 사용하는 프로토콜 : rsh, ssh를 사용할 수 있음. 이를 사용
    하지 않더라도 원격 rsync 서버에 TCP 포트 873을 이용 접속할 수 있음. 8
    73 포트를 이용할 경우 inetd.conf 에 추가로 설정을 해야합니다.

    rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon

    --daemon은 대몬모드로 시작한다는 이야기이며 /etc/rsyncd.conf파일을 필요로 합니다.

    또한 /etc/services 에 다음 내용이 있는지 확인하고 없으면 추가합니다.

    rsync 873/tcp # rsync

    추가하고 나서는 inetd 대몬을 다시 띄워야겠지요?
    # kill -HUP inetd_pid

    만약 ssh나 rsh를 사용하는 경우에는 inetd.conf를 수정할 필요가 없습니다.

4. 설정 (Configuration)

    rsync 를 데몬 모드(daemon mode)로 사용할 때는, 하나의 설정파일을 사용하는데,
    기본적으로 /etc/rsyncd.conf 이지만 --config FILE 옵션으로 바꿀 수 있다.

    만일 “3.1 rsync 컴파일 방법”에서 ac_default_prefix 이 부분을 ac_default_prefix=/usr/local/rsync처럼 하였다면, /usr/local/rsync/etc, /usr/local/rsync/log 디렉토리가 없으므로 아래의 명령으로 다음 디렉토리를 만들어 주어야 한다.

    [root@test /root]$ mkdir /usr/local/rsync/{log,etc}

    파일들의 설정 예제는 아래와 같다.

    4.1 rsyncd.conf

    [root@test /root]# cat /usr/local/rsync/etc/rsyncd.conf

    motd file = /usr/local/rsync/etc/motd
    log file = /usr/local/rsync/log/rsyncd.log
    pid file = /usr/local/rsync/etc/rsyncd.pid
    max connections = 0
    syslog facility = local3

    [web]
            path = /home/www/htdocs
            comment = web
            uid = nobody
            gid = nobody
            use chroot = yes
            read only = yes
            hosts allow = www2.taejun.pe.kr
            max connections = 3
            timeout 600

    [ftp]
            comment = ftp area
            path = /var/ftp
            read only = yes
            list = yes
            uid = nobody
            gid = nobody
    [tmp]
            comment = temporary file area
            path = /tmp
            read only = no
            list = no
            hosts allow = 192.168.1.1/24 127.0.0.0/8

    [web] 서비스명
    path 서비스할 디렉토리
    comment 설명
    uid 파일전송하는 사용자의 id. 기본값은 nobody
    gid 파일전송하는 사용자의 그룹 id. 기본값은 nobody
    use chroot 위의 path를 root 디렉토리로 사용. 보안상 필요함.
    read only 읽기전용
    hosts allow 호스트별 접속허용. 기본값은 all host이므로 보안을 유지하려면 반드시 설정함
    max connections 동시접속자수
    timeout 클라이언트에서 접근시 타임아웃시간. anonymous 로 운영하는 경우 설정을 해야 클라이언트가 죽었을 때 서버에서 접속을 해체할 수 있음.

    * put(클라이언트에서 서버로 올리는 경우)을 사용하기위해서는 read only
    = no 로 설정을 해야됩니다.

    이 외에도 여러 가지 옵션이 있지만 실제로은 위의 옵션정도가 자주 사용됩니다. 현재 rsync 자체적으로 암호화는 지원하지 않으며 사용자 인증만 지원합니다. 추후에는 SSL을 지원할 예정이며, 만약 암호화를 사용하려면 ssh를 사용하면 됩니다.

    4.2 motd

    [root@test /root]# cat /usr/local/rsync/etc/motd
    Welcome to the kbmyung anonymous rsync archives.

    Contact kbmyung@kebi.com
    linux@phpgroup.com if you have problems.

    ------

    4.3 syslog.conf

    [root@test /root]# mkdir /usr/local/rsync/log
    [root@test /root]# echo “local3.info /usr/local/rsync/log/rsync.log” >> /etc/sy
    slog.conf
    [root@test /root]# touch /usr/local/rsync/log/rsync.log

    4.4 전역 옵션(Global options)

    motd file:
    이름들의 텍스트 파일이고, 오늘의 메세지며 이는 파일 전송이 시작되기 전에 클라이언트(client)에게 나타난다. 이것은 꼭 전역 섹션(global section)에 위치해야 한다. 보통 사이트 정보와 알림에 사용한다. 기본적으로는 motd 파일은 없다.

    pid file:
    pid file 옵션은 rsync 데몬 프로세스(process) id 를 pid file에 말해준다.

    max connections:
    max connections 옵션은 동시에 접속하는 최대 숫자를 지정한다. 어떤 클라이언트(client)라도 최고치에 도착하면 클라이언트에게 나중에 다시 접속하라는 메세지를 받는다. 기본적으로 0은 제한 없다는 것을 의미한다.

    lock file:
    lock file 옵션은 max connections를 유지할 때 지정하는 파일이다. rsync서버(server)는 이파일로 최고 연결의 제한이 남지 않도록 보증하기 위해서 기록 감금(record locking)을 사용한다. 기본은 /var/run/rsyncd.lock이다.

    syslog facility:
    syslog 설비의 숫자의 값으로 로그 접속고 통계를 낸다. 이러한 값들은 보통 syslog 메뉴얼에 정의 되어 있다.

    4.5 지역/모듈 옵션(Local/Module options)

    comment:
    모듈의 이름. 만일 리스트(list)가 yes로 지정되어 있다면, 클라이언트(client)가 확장된 모듈 리스트를 요청할 때 이름이 보여질 것이다.

    path:
    루트(root)의 파일 트리(file tree)를 정의한다. 이는 보여질 것이다. Rsync는 이 디렉토리를 chroot로 지정할 것이다.

    read only:
    read only 옵션은 클라이언트(client)가 파일을 업로드(upload) 할 수 있는지 없는지 결정한다. 만일 read only가 true이라면 어떠한 업로드 시도도 실패할 것이다. 만일 read only가 불가(false)라면 서버에서 파일들에 대한 권한을 허락한다면, 업로드(upload)가 가능할 것이다. 기본은 모든 모듈에 대하여 읽기 전용(read only)이다.
    인증이 적용되기 전까지는 read only를 yes로 설정할 것을 추천한다.

    list:
    클라이언트가 모듈들의 리스트를 요청했을시 모듈을 보여줄 것인지 지정한다. list를 false 세팅으로서 숨겨진 모듈을 만들 수 있다. 모듈들을 위해서 기본적으로 리스트 할 수 있다.

    uid:
    rsync는 chroot가지고 있는 것처럼 수행한 후 user id를 바꿀 것이다. 익명(anonymous)의 접속을 위해서, 열려있는 id인 nobody로 열어야 할 것이다. 기본 사용자(user)는 “nobody” 이다.

    gid:
    rsync는 chroot 가지고 있는 것처럼 수행한 후 group id를 바꿀 것이다. 익명(anonymous)의 접속을 위해서, 열려있는 group인 nobody로 열어야 할 것이다. 기본 그룹(group)은 “nobody” 이다.

    hosts allow:
    호스트네임(hostname)(* 와 함께)이나 IP/mask의 모듈로 연결할 수 있는 호스트들의 리스트

    hosts deny:
    이 모듈에 연결할 수 없는 호스트들 리스트

    auth users:
    “auth users” 옵션은 이 모듈에 접속을 허락하는 사용자 이름의 리스트를 콤마(comma)와 공백(space)로 지정한다. 사용자 이름은 지역 시스템에 존재하지 않아도 된다. “auth users”가 지정되어 있다면 클라이언트(client)는 사용자이름과 비밀번호를 이 모듈에 접속하기 위해서 제공해야 할 것이다. 이 교환을 위해서 사용되어지는 인증 프로토콜이 요구에 응답한다. 사용자이름들과 비밀번호들이 “secrets file” 옵션으로 지정되는 text 파일에 저장된다. 모든 사용자를 위해서 기본적으로 비밀번호 없이 접속할 수 있다. (이것을 “익명(anonymous) rsync”라고 부른다).

    secrets file:
    “secrets file” 옵션은 인증을 위해서 사용되는 항상의 username:password를 포함하는 파일의 이름을 지정한다. 이 파일은 “auth users” 옵션이 지정되었을 때만 참조한다.
    이 파일은 행 기반이고 :(single colon)으로 구분되는 한 쌍의 username:password를 포함하고 있다. hash(#)로 시작하는 행은 주석으로 해석되고 생략된다. 비밀번호는 어떠한 문자로도 가능하지만, 많은 운영체제에서 클라이언트(client) 끝에서 치지는 패스워드의 길이의 제한을 주의해서, 8문자 보다 더 큰 패스워드는 동작하지 않을 것이다.
    “secrets file”에는 기본 옵션이 없으므로, 이름을 지정해야 한다.
    ( /usr/local/rsync/etc/rsyncd.secrets 처럼)

5. 사용법

    5.1 서버 실행

    이제 IP 주소가 192.168.1.1인 test 컴퓨터에서

    [root@test /root]# /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/etc/rsyncd.conf

    명령으로 해서 rsync를 데몬모드(deamon mode)구동시킨다.

    5.2 client 실행

    이제 IP 주소가 192.168.1.4인 log 컴퓨터에서 실행하면 아래와 같이 나온다.

    [root@log /root]$ /usr/local/rsync/bin/rsync -v 192.168.1.1::
    Welcome to the kbmyung anonymous rsync archives.

    Contact kbmyung@kebi.com | linux@phpgroup.com if you have problems.

    ------

    ftp             ftp area

    필자의 경우 “4.1 rsyncd.conf” 파일에서 보면,

    [tmp]
            comment = temporary file area
            path = /tmp
            read only = no
            list = no
            hosts allow = 192.168.1.1/24 127.0.0.0/8

    list 가 클라이언트가 모듈들의 리스트를 요청했을 시 모듈을 보여줄 것인지 지정하는데 list=no가 설정이 되어 있으므로 숨겨진 모듈로 동작해서, 위의 “5.2 client 실행”에서 보는 것과 같이 tmp는  나타나지 않지만 사용할 수 있다.

    [root@log /root]$ mkdir /home/mirroring
    [root@log /root]$ /usr/local/rsync/bin/rsync -av 192.168.1.1::ftp /home/mirroring/

    이렇게 실행 시키면 log 컴퓨터의 /home/mirroring/ 디렉토리에 똑같이 미러링(mirroring)이 된다. 성공이다. 이로서 한 컴퓨터에서 rsync를 daemon 모드로 구동시키고 다른 한 컴퓨터에서 client로서 실행이 가능하므로 세세한 부분만 더 보안한다면 아주 좋은 미러링(mirroring)이 될 것이라고 생각한다.

    5.3 동기화

    (접근 클라이언트를 www2라고 가정함)

    rsync -avz --delete www1::web /home/~public_html

    -a는 아카이브 모드. 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
    -v 상세하게 보여움
    -z 전송시 압축을 함.

    --delete www1에서 web에 해당하는 내용(/home/www/htdocs)을 ww2의 /home/~public_html 로 가져오면서 www1(서버)에는 없는 내용은 www2에서 삭제함. 만약 www2 차원에서 생성한 파일을 보관하려면 옵션 없앰.

    rsync -avz foo:src/bar /data/tmp
    다음 내용은 foo라는 호스트에서 src/bar 안의 내용을 지역호스트의 /data/tmp 디렉토리로 옮기는 것입니다.

    여기서 알아두어야 할 것이 있습니다.
    만약 위에서 src/bar/ 라고 하면 어떻게 달라질까요? bar 는 그 디렉토리 자체까지 포함해서 가져옵니다. 그렇지만 bar/ 라고 뒤에 디렉토리 표시를 하면 그 디렉토리안에 있는 내용만 가지고 옵니다. 상당히 결과가 달라질 수 있겠지요.

    또한 : 과 ::의 차이는 무엇일까요? : 은 rsh나 ssh를 사용하는 것이며 :: 은 rsync 자체에서 지원하는 기능을 이용 자료를 가져오는 것으로 873 TCP 포트를 사용합니다. 상당히 헷갈리지요? : 에서 기본은 rsh를 이용하지만 -e ssh 옵션을 이용하여 ssh를 사용할 수 있습니다. ssh를 사용하려면 비밀번호를 입력해야하는데 이것도 파일형태로 만들어서 옵션에서 지정해주면 됩니다. 이에 대해서는 따로 설명하지는 않으며 man page를 참고하세요.

    -avz 등의 옵션이 있는데 이중 중요한 옵션만 설명을 하겠습니다.

    -v verbose (자세하게 보여줌)
    -a archive mode
    -u update only(새로운 파일을 덮어쓰지 않음)
    --delete 서버쪽에 없고 클라이언트쪽에만 있는 파일을 지움
    -z compress (전송시 압축을 함)
    --daemon 대몬 모드로 운영함 (이건 inetd.conf에 지정할 때 필요함)

    -a 는 -rlptg 와 동일합니다.
    -r recursive (하위 디렉토리까지 포함)
    -l 심볼릭 링크 재생성
    -p 퍼미션 업데이트
    -t 변경시간 전송 (이것이 없으면 전송한 시간으로 바뀜)
    -g 그룹이름 변경

    일반적으로 rsync는 길이와 time-stamp를 이용 파일을 비교합니다.

    이제 쉘 스크립트를 만들고 cron에 등록을 하여 주기적으로 데이터를 동기화하면 됩니다.

6. 고급 사용 예제

    IP 주소가 192.168.1.1인 test 컴퓨터에서 먼저 데몬을 실행 시킨다.

    [root@test /root]# /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/etc/rsyncd.conf

    6.1 ssh 를 사용한 미러링(mirroring)

    IP 주소가 192.168.1.4인 log 컴퓨터에서 아래의 명령을 실행해 본다.
    [root@log rsync]# mkdir /mirror
    [root@log /mirror]# /usr/local/rsync/bin/rsync -av -e ssh 192.168.1.1::ftp /mirror/

클라이언트측 설정

GET
/usr/bin/rsync -av --delete www1.csnet.co.kr::web /home/httpd/htdocs
이러면 다운로드하고 서버에없어진거는 지우고....

PUT
/usr/bin/rsync -av --delete /home/httpd/htdocs www1.csnet.co.kr::web
이러면 업로드됩니다.
아직 다운에서는 uid gid 모두다 유지가 되는데 업로드는 uid는 유지가
되는데 gid는 root로 바뀌는 현상이 있습니다. 잘모르겠습니다.
참 설정에서 read only=no 가 설정되어야 합니다.

서버측 공유명(맨페이지에서는 모듈이라고 하는거 같네요)을 보려면
rsync www1.csnet.co.kr::
만하면 공유명이 나옵니다.

rsync -a www1.csnet.co.kr::web
은 웹이라는 공유폴더의 파일리스트가 표기됩니다.

rsync -av www1.csnet.co.kr::web 으로하면 파일리스트가 현재디렉토리에
list라는 파일로 저장이 됩니다.

-a 아카이브모드
-v 자세한 내용을 보여줌
--delete 서버에서 사라진 파일이 있으면 클라이언트측에서도 지움
기본설정에서는 지우지는 안는다.
www1.csnet.co.kr rsync서버이름
web 서비스명
/home/httpd/htdocs 로컬측 디렉토리

대충 이런식으로 사용을 하면 됩니다.

참고: 다음은 보안 설정을 추가하는 방법입니다
rsync -av --delete -e ssh ~/public_html/ webserver:/home/rwa2/public_html/

후기

    간단한 디렉토리를 만들어 사용하였지만, web 이나 ftp에서 사용하면 좋은 미러링 프로그램이 될 것이라 생각한다. crond나 inetd나 xinetd를 이용하지 못한 점을 아쉽게 생각하며, 간단하면서도 이런 기능을 하는 rsync를 볼 때 대단하다는 생각이 든다.

    기본적으로 암호화를 지원하지 않는 것이 아쉽고 약간은 불편합니다. ssh를 쓰는 것도 한가지 대안이지만 비밀번호를 넣어야하고 일일이 넣기 귀찮으면 파일형태로 지정할 수 있는데 이런 방법도 보안문제가 생길 여지가 있겠지요.

    위에서 말을 한 대로 예전 패키지에는 보안 버그가 있으니 반드시 최근 패키지로 업데이트를 하는 것! 잊지 마세요.

Windows OS에서 원격지 폴더 미러링을 위한 rsync 설정

cwRsync 라는 프로그램으로 기존 Rsync와 Cygwin의 또다른 패키지라고 해당
제작 업체에서 알려주고 있구요. 물론 무료 프로그램입니다.

기존의 복제 프로그램과는 달리 Rsync 알고리즘을 이용하여 코딩된 프로그램이라
상당히 빠른 면모를 보여주고 있으며, 기존 rsync의 명령어도 동일하게 동작이 됩니다.
 
0. 프로그램 다운로드
http://www.itefix.no/cwrsync

Download cwRsync! 는 클라이언트이구요.
Download cwRsync Server!는 서버입니다.

1. 서버 설치 방법
동기화할 서버에다 Server 프로그램을 풀고 실행하면, 바로 설치가 되며,
C:\Program Files\cwRsyncServer 안에 설치가 완료됩니다.
해당 디렉토리 안에 rsync.conf 파일을 수정합니다.

----------------- rsync.conf ---------------------------------------------
use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
pid file = rsyncd.pid

# 모듈 설정
# cygdrive 라는 이름은 재설정 되는 것입니다.
# 예제 : C:\Work라는 디렉토리를 설정 하려면 /cygdrive/c/Work 라고 하시면 됩니다.

[work]
# 동기화할 할 경로
path = /cygdrive/c/work
# 읽고 쓰고 권한 : true시 읽기만 가능하며 false시 쓰기까지 가능합니다.
read only = false
transfer logging = yes
----------------- rsync.conf ---------------------------------------------
해당 설정이 끝났으면 동기화 할 디렉토리의 속성을 누르고 보안탭에 가시게 되면
그룹별 권한이 있습니다. 이중 사용자를 추가 해주는데 SvcwRsync라는 사용자가
새롭게 생겨있을 것입니다. 저도 이것때문에 계속 Permission Error(13)이라는 문자를
곤혹스럽게 많이 보게 되었습니다. 꼭 이 부분 추가해주시기 바라고 권한 부분에 읽기
쓰기 권한을 주시면 됩니다. 보통 세가지 추가를 하죠. (폴더 보기, 읽기 , 쓰기)

자. 그럼 기본 설정은 다 끝난 것이구요. 이제 동작 시켜야 겠지요.

설정 -> 제어판 -> 관리도구 -> 서비스 로 가셔서 cwRsync 부분을 동작시켜주시면
됩니다. (참고적으로 방화벽이 있다면, 873번 TCP 포트를 설정해 주시면 됩니다.)

2. 클라이언트 설치 방법
Download cwRsync! 버튼을 클릭하셔서 해당 압축 파일을 푸신후 실행하면 서버와
동일하게 설치가 됩니다. 설치되는 경로는 C:\Program Files\cwRsync 디렉토리로
클라이언트는 다른 설정 하실 필요 없이, 해당 디렉토리 안에 있는 cwrsync.cmd 파일을
수정하시고 작업스케쥴링에 추가만 해주시면 된답니다.

저의 경우 아래와 같이 스크립트를 넣었습니다.
----------------- cwrsync.cmd -------------------------------------------
@ECHO OFF
cd bin
rsync.exe -avrz --delete rsync://192.168.100.1/work /cygdrive/C/work
----------------- cwrsync.cmd -------------------------------------------
rsync부분은 동일하구요 192.168.100.1이 동기화 원본 서버이구요 work라는 모듈명
입니다. 서버 설정 부분 보시면 이해 가능하시리라 생각되구요. 마지막에 붙는 것이
/cygdrive/C/work 부분은 C:\work 디렉토리를 보여준 예입니다.
--delete 옵션은 서버쪽에서 삭제 되면 동기화 되는 서버에서도 같이 삭제하라는 명령
이니 빼실 분들은 빼셔도 무방하답니다.

저 부분을 하시고나서 작업스케쥴링을 제어판에서 선택하시고, cwrsync.cmd 부분을
10~ 1시간 간격으로 설정해주시면 될 것입니다.
그 뒤에 계속 업데이트 되는지 체크해보시면 완성되는 것입니다.

3. 클라이언트에서 서버로 업데이트시
rsync.exe -avrz --delete /cygdrive/C/work rsync://192.168.100.1/work
위에 처럼 변경만 하시면 서버가 업데이트 되는 것이 아니라 클라이언트에서
서버로 업로드 되는 것입니다. 이때 중요한 점은 서버측 rsync.conf에서
read only = false 부분이 false로 되어있어야 합니다.

참고자료 : http://www.taejun.pe.kr/board2/read.php3?table=linuxinfo&no=28&page=1
rsync 이용 동기화하기 (박명순님 pms89@hitel.net 글)


rsync 와 ssh 이용해 백업서버 만들기
 

1. 시간설정

crontab을 이용해 스케쥴 작업하기위해 시간을 설정해준다.

시간 설정(보라넷 서버의 시간으로 동기화)

# rdate -s time.bora.net

# date
2008. 12. 23. (화) 12:01:55 KSTdate

2. 백업할서버 설정(그림상 서버1과 서버2)

서버1(10.0.0.2)와 서버2(10.0.0.3)에 설정할 내용

유저생성(유저는backup으로 하였다)
# adduser backup
# passwd backup

패스워드 설정

## 인증키 복사될 폴더 만들기

# cd /home/backup/

# mkdir .ssh

# chmod 700 .ssh

백업스크립트 작성 mysql DB 백업 및 폴더 압축백업

# vi /home/backup/backup.sh

#!bin/sh
datetime=$(date +%Y_%m_%d)
cd /home/backup/
mysqldump -uroot -p암호 DB명 > DB_$datetime.sql
tar cvzf DB_$datetime.tar.gz DB_$datetime.sql
tar cvzf File_$datetime.tar.gz 압축할폴더
rm -rf *.sql

파일명

예) DB_2008_12_20.tar.gz
예) File_2008_12_20.tar.gz

# vi /home/backup/backup_del.sh

 #!/bin/sh
rm -rf /home/backup/File_`date +%Y_%m_%d --date '5 days ago'`.tar.gz
rm -rf /home/backup/DB_`date +%Y_%m_%d --date '5 days ago'`.tar.gz

crontab 등록

# crontab -e

00 01 * * * rdate -s time.bora.net && clock -w
00 04 * * * sh /home/backup/backup.sh
30 04 * * * sh //backup/backup_del.sh

# 설명
시간 동기화 매일 1시에 동기화
00 04 * * * sh /usr/backup/backup.sh
am4시 backup.sh 실행시킨다
30 04 * * * sh /usr/backup/backup_del.sh
am4시 30분에 backup_del.sh 실행시킨다

crontab 리스트 확인
# crontab -l

3. 백업서버 설정

백업 계정 생성 및 암호설정

# adduser backup

# passwd backup

# cd /home/backup/

# mkdir .ssh

# chmod 700 .ssh

# crontab -e

00 01 * * * rdate -s time.bora.net && clock -w

00 05 * * * sh /home/backup.sh

키생성

# ssh-keygen -t dsa

엔터만 치면 된다

(백업서버 -> 대상서버로 복사)

# scp -p /home/backup/.ssh/id_dsa.pub backup@10.0.0.2:/home/backup/.ssh/authorized_keys2
# scp -p /home/backup/.ssh/id_dsa.pub backup@10.0.0.3:/home/backup/.ssh/authorized_keys2

# scp -p /home/backup/.ssh/id_dsa.pub backup@localhost:/home/backup/.ssh/authorized_keys2

암호는 대상서버의 암호를 넣치면 파일이 복사된다.(예 10.0.0.2서버의 backup계정의 암호)

백업 스크립트 작성

# vi /home/backup.sh

### benicenet.lawware.co.kr ###
rsync -azrt -e ssh --delete 
backup@10.0.0.2:"/usr/backup/" /home/backup/public_html/lawware/benicenet
 

#10.0.0.2 번 서버 기준으로 /usr/backup/ 경로의 파일과       백업서버의 /home/backup/lawware/benicenet의 파일을 비교해서
다르면 백업서버의 파일 삭제함


### gangsan.lawware.co.kr  ###
rsync -azrt -e ssh --delete 
backup@10.0.0.3:"/usr/backup/" /home/backup/public_html/lawware/gangsan
 
 ### 추가하드 자체백업 home  ###
rsync -azrt -e ssh --delete 
backup@localhost:"/home/backup/" /data/backup/ 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

참고사이트

http://hurbmylove.tistory.com/182

http://orian.pe.kr/cgi/tn6/board.php?board=os2&command=body&no=49

http://blog.naver.com/malsik2004?Redirect=Log&logNo=150019902035

728x90

댓글