rsync

Remote Sync의 줄임말로 여러가지 옵션을 이용해 원격 또는 로컬에 파일을 복사하는 툴임.

호스트간의 데이터 동기화를 위한 rsync 설정 1)

man page - rsync(1), rsyncd.conf(5)

서버 클러스터링으로 여러대의 서버를 운영하는 경우 각 호스트간의 자료 를 공유해야함. 공유기법에는 NFS도 있지만 NFS의 경우는 네트웍 트래 픽을 무척이나 높이므로 그 대신 rdist나 rsync를 이용할 수 있다. 이 글에서는 rsync를 이용하여 각 호스트간의 자료를 동기화하는 방법을 설명 함.

rsync는 rcp와 비슷한 동작을 하는 프로그램으로

  • 링크, device, 소유자, 그릅, 허가권 복사 지원
  • GNU tar와 비슷한 exclude, exclude-from 옵션 지원
  • rsh 또는 ssh 등 사용가능
  • root 권한이 필요없음
  • anonymous 또는 인증 rsync 서버 지원(미러링에 유용함)
  • 일반적인 배포판의 경우 이미 프로그램이 포함되어 있음.

옵션

  -v: verbosity를 높이는 옵션으로 복사하는 과정을 더 자세하게 보여준다.
  -z: compress를 주는 옵션으로 파일을 복사할 때 압축해서 복사함.
  -h: 사람이 읽기 쉬운 형태로 복사 결과들을 출력해준다.
  -a (same as -rlptgoD): archive 모드로 -rlptgoD 옵션을 적용한것과 같다. 
  -r: 디렉토리를 복사할 때 사용하는 옵션임.
  -l: symlink는 symlink 형태로 복사 
  -p: 파일과 디렉토리들의 권한을 유지 
  -t: 수정시간을 유지 
  -g: 그룹 속성을 유지 
  -o: 소유자 속성을 유지 
  -D (same as --devices --specials): --devices --specials)의 옵션과 같다.
  --devices: root 권한이 필요하며 Device 관련된 파일들을 복사해서 생성해준다.
  --specials: named socket이나 fifo와 같은 특수한 파일들도 복사한다.

설정파일

/etc/rsyncd.conf 예제를 보겠다. 다음 예제의 호스트를 www1이라고 하겠다.

cat /etc/rsyncd.conf
[web]
path = /home/www/htdocs
comment = web
uid = nobody
gid = nobody
use chroot = yes
read only = yes
hosts allow = www.example.com
max connections = 3
timeout 600
  • [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를 사용하면 된다.

rsync 사용하기

rsync -avz --delete www1.taejun.pe.kr::web /home/taejun/~public_html

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

–delete www1.taejun.pe.kr에서 web에 해당하는 내용(/home/www/htdocs) 을 ww2.taejun.pe.kr 의 /home/taejun/~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에 등록을 하여 주기적으로 데이터를 동기 화하면 된다.

 rsync -r -t -v "$VOLATILE" "$PERMANENT"

특정 파일이나 디렉토리를 제외

1)
레드햇 리눅스 6 서버 - 파워북 출판사, 번역판중 rdist 관련 자료

역링크