ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Rsync를 이용한 데이터 미러링 구축
    Linux 2010. 8. 9. 09:36
    반응형

    출처 : http://tong.nate.com/zolasexy/30488773

    인터넷 서비스를 계획하다 보면 차후에 많은 양의 데이터를 각각의 서버별로 어떻게 동기화를 실행할것인지 걱정이 될것이다. 물론 많은 자금을 들여서 스토리지를 구입을 하면 좋지만, 웹서버 3-4대분량이나 소량의 데이터를 위해서 스토리지를 구입하기에는 가격이 만만하지 않다.

    이런 중소형의 미러링을 위해서 생각해 볼수 있는 방법중에 하나가 rsync다. rsync는 파일크기의 변화나 시간의 변화등을 이용 동기화를 한다. 테스트 결과 적은량의 리소스로 빠른동기화의 효과를 볼수 있었다. 물론 원격에서 접근해서 미러링을 한다는 것 자체가 보안에 문제가 있기는 하지만, 매우 유용한 프로그램인 것은 확실하다. 어떻게 사용하느냐는 사용자들의 선택일 것이다.

    +Rsync의 주요 특징

    링크, device, 소유자, 그릅, 허가권 복사를 지원

    GNU tar와 비슷한 exclude, exclude-from 옵션 지원

    RSH 또는 SSH등 사용가능

    root 권한이 필요없음

    anonymous 또는 인증 rsync 서버 지원(미러링에 유용함)

    +Install #1 소스 설치

    Rsync의 설치는 매우 간단하다. 설치라고 할것도 없다. 요즘 리눅스 플랫폼에는 거의 기본으로 들어있기 때문이다. 혹시 모르니 간단하게 설치를 해보자. 설치는 소스설치와 RPM설치로 진행하겠다. 될수 있으면 RPM으로 설치하는것을 권장한다. rsync홈페이지에 가보면 리눅스 플랫폼 외에도 다양한 플렛폼에서 사용할수 있도록 바이너리 화일이 제공된다.

    먼저 소스 설치를 해보자. 아래 링크에서 Rsync소스 파일을 다운로드 받는다. 적당한 디렉토리로 이동후 압축을 해제하고 설치해 보자. configure옵션은 별다른게 없다. install화일에도 아래와 같이 나와있었다.

    소스 다운로드 : rsync-2.5.6.tar.gz

    [root@localhost]#
    
    [root@localhost]# tar xvfz rsync-2.5.6.tar.gz
    [root@localhost]# ./configure
    [root@localhost]# make
    [root@localhost]# make install
    

    위와 같이 소스로 설치할 경우 rsync실행화일은 /usr/local/bin/rsync에 생성이 되었다. 혹시라도 패스 설정이 안돼 있다면 /usr/local/bin을 넣어주기 바란다.

    +Install #2 RPM 설치

    RPM설치는 기본적으로 리눅스에서 제공이 되기 때문에 간단히 설명하겠다. 그냥 up2date로 설치하거나, 패치지 구해서 설치하면 된다. rpm패치지는 아래 링크에서 받으면 된다.

    RPM 다운로드 : rsync-2.4.6-1.i386.rpm

    [root@localhost]#
    
    [root@localhost]# up2date rsync
    실행전에 rhn에 등록이 되어있어야 한다.
    [root@localhost]# rpm -Uvh rsync-2.4.6-1.i386.rpm
    

    rpm설치시 rsync실행화일 경로는 /usr/bin/rsync이다.

    +Rsync의 설정

    rsync는 xinetd기반으로 동작한다. 아래와 같이 설정화일을 만들어 준다. 아래 파일은 TCP 837포트를 이용해 미러링을 시킬 때 설정하면 된다. 만약 SSH를 사용할 것이라면 별도의 설정화일은 필요하지 않다.

    [root@localhost]#
    
    [root@localhost]# vi /etc/xinetd.d/rsync
    service rsync 
    { 
            disable = no 
            socket_type = stream 
            wait = no 
            user = root 
            server = /usr/bin/rsync 
            server_args = --daemon 
            log_on_failure += USERID 
    }
    [root@localhost]# /etc/rc.d/init.d/xinetd restart
    

    xinetd를 재시작 시키면 아래와 같이 873번 포트가 열릴 것이다.

    [root@localhost]#
    
    [root@localhost]# nmap localhost
    873/tcp    open    rsync
    

    이제 rsyncd.conf 설정화일을 작성해 보자. rsyncd.conf화일은 TCP 837포트를 사용할 때 설정해줘야 된다. 필자는 백업용도의 미러링 설정을 할 것이다.

    [root@localhost]#
    
    [root@localhost]# vi /etc/rsyncd.conf
    [/home/backup]
    path = /home/backup
    comment = www.nasord.com
    uid = nobody
    gid = nobody
    use chroot = yes
    read only = yes
    hosts allow = 192.168.0.2
    max connections = 3
    timeout 600
    

    설정화일 옵션이다. 옵션은 간단하며, 기본적으로 위의 옵션들만 있으면 동작이 된다. 나머지 옵션들은 man을 참고 하기 바란다.

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

    보안상 hosts allowuse chroot는 설정을 해줄 것을 권장한다.

    +클라이언트 실행

    위의 설정으로 서버측 설정은 모두 끝났다. 이제 실제로 동기화를 시켜보자. 실행방법은 TCP 873포트를 이용한 실행과 SSH를 이용한 실행으로 나눠서 설명하겠다.

    873 포트를 이용한 미러링

    [root@localhost]#
    
    [root@localhost]# rsync -avz hostname(IP)::서비스명 /백업받을 경로
    ex) [root@localhost]# rsync -avz 192.168.0.1::/home/backup 
    /home/admin
    

    ssh를 사용한 미러링

    ssh를 사용할때는 위에서 설정한 xinetd설정화일과 rsyncd.conf화일이 필요없다. 사용자 인증만되면 동기화를 시킬수 있다.

    [root@localhost]#
    
    [root@localhost]# rsync -avz -e ssh hostname(IP):/타겟 경로 /백업 받을 경로
    ex) [root@localhost]# rsync -avz -e ssh 
    192.168.0.1:/home/backup /home/admin
    

    rsync의 실행옵션은 무지 많다. 다 알려면 복잡하고, 아래 옵션만 알아도 사용하는데 지장없다. 나머지 옵션이 궁금하면 man을 참고 바란다.

    -a는 archive mode (심볼릭 링크, 속성, 퍼미션, 소유권등 보존).

    -v verbose(상세하게 보여움).

    -z compress(전송시 압축을 함).

    -u update only(새로운 파일을 덮어쓰지 않음)

    --delete 서버쪽에 없고 클라이언트쪽에만 있는 파일을 지움

    위의 실행 예제를 보면 호스트 설정다음에 : "콜론"이 보일것이다. : 는 ssh나 rsh를 이용할 때 사용하고 ::는 TCP 873포트를 이용할때 설정해 주면 된다. 타겟경로를 지정해줄 때도 경로뒤에 /가 붙는 것과 안붙을 경우 차이가 난다. 타겟경로를 /home/backup라고 해주면 backup폴더가 생성되고 자료들이 backup폴더 안으로 들어가고 타겟 경로를 /home/backup/라고 해주면 백업 경로에 바로 저장이 된다. 주의 하기 바란다. 주기적인 미러링을 위해서는 cron을 이용하여 동기화 시키면 된다.

    +설치 후기

    Rsync는 상당히 유용한 도구임에는 틀림없다. 하지만 보안상 취약하니 설정에 주의해서 사용해야 된다. 2002년 rsync의 취약점을 이용한 exploit이 나왔다. 2.5.1버전이나 이전 버전들에 한해서 적용이 되는 것이니 2.5.1버전 이상을 사용해야 된다. 마지막으로 rsync영문 매뉴얼을 링크 걸어 놓겠다. 참고 하기 바란다.

    출처 : Tong - 달이좋은인형님의 운영체제일반통

    반응형

    'Linux' 카테고리의 다른 글

    Linux Fedora Core 5 CVS 설정하기  (0) 2010.09.26
    리눅스 NFS 설정하기  (0) 2010.08.09
    [IPTABLES] 기본 사용법  (0) 2010.08.09
    vi 줄번호 출력  (0) 2010.04.07
    페도라 코어4에서 iptables 환경설정  (0) 2010.04.07

    댓글

Designed by Tistory.