[클러스터] rsync로 디스크 동기화 시키기 (아랑)

디스크 동기화를 위한 rsync 사용하기

                작성자 : 서진우 (alang@sysmng.com)

————————————————————————-


1. rsync 란..?

rsync 는 NT 의 미러링과 같이 특정 하드디스크의 데이타를 그 속성을 유지한체
다른 디스크로 동일하게 복제해주는 역활을 하는 프로그램이다.

rsync 로 이용할수 있는것은 아주 다양한데..주로 클러스터 웹서버의 디스크 동
기화, 미러링 서버의 디스크 동기화, 백업서버의 데이터 백업 등이 있다.

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

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

이제 설치로 넘어가 보도록 하자..

2. rsync 설치 방법

redhat 7.1 에는 rsync-2.46-2 버젼이 기본적으로 설치가 되어진다.
만약없다면 http://rsync.samba.org/ftp/rsync/ 에서 최신판을 받아 설치 하면
된다.

설치 방법 :

# rpm -Uvh rsync-2.4.6-2.i386.rpm 혹은 ..

# tar xzvf rsync-2.4.6.tar.gz
# ./configure
# make
# make install

이것으로 설치는 끝난다. configure 에 따른 옵션으로 사용자의 취향에 맞게
설치도 가능하다.


3. rsync 서버  설정 방법

rsync 가 사용하는 프로토콜로는 rsh 나 ssh를 사용하거나 특정 포트를 이용하
여 xinetd 데몬으로 제어도 가능하다. 보통 873 포트를 사용한다.
ssh 를 이용한 사용방법과 873 port 를 이용한 사용방법은 다소 차이가 있다.

873 port 사용방법

rsync 를 사용할 리눅스 버젼이 6.x 일경우에는 /etc/inetd.conf 에 다음줄을
추가한다.

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

만일 리눅스 버젼이 7.x 이면…

/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
}
———————————————————————-

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

rsync           873/tcp                         # rsync
rsync           873/udp                         # rsync

그런후 inetd 혹은 xinetd 데몬을 restart 해준다.

이제 /etc/rsyncd.conf 설정 파일을 만들어 준다.

/etc/rsyncd.conf —————————————————–

[home]
path = /home
comment = home data
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 210.220.69.2
max connections = 3
timeout 600

————————————————————————

[home] : 서비스명
path : 전송될 data가 들어 있는 경로
uid : data 를 전송하는 사용자의 uid 기본값은 nobody
gid : data 를 전송하는 사용자의 gid 기본값은 nobody
use chroot : path를 root 디렉토리로 사용. 보안상 필요함.
read only : 읽기전용
(클라이언트에서 서버로 올리는 경우에는 read only= no 로 설정을 해야됩니다. )


hosts allow : 호스트별 접속허용. 기본값은 all host이므로 보안을 유지하
려면 반드시 설정함
max connections : 동시접속자수.

timeout : 클라이언트에서 접근시 타임아웃시간.
anonymous 로 운영하는 경우 설정을 해야 클라이언트가 죽었을 때 서버에서 접속을
해체할 수 있습니다.

이렇게해서 873포트를 쓰는 rsync서버의 설정은 끝났습니다.


4. rsync 클라이언트 사용방법

이제 rsync 클라이언트에서 data 를 동기화 하는 방법을 알아보자.
위의 설정이 되어져 있는 서버가 zzang911.net 라고 하자.
물런 rsync 클라이언트는 hosts allow 에서 허락된 ip 를 가져야 한다.

210.220.69.2 에서 zzang911.net 서버의 /home 밑에 있는 data 를 모두 복사해 올
려고 한다면..

# rsync -avz –delete zzang911.net::home  /home

위와 같이 하면 된다.

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

–delete 는 zzang911.net 의 /home 밑에 data 를 클라이언트의 /home 디렉토리로
가져오면서 zzang911.net 의 /home 에 없는 data 는 모두 삭제하는 옵션이다.
즉..두 호스트의 data 를 완전 동기화 하는 것이다.

이로써..port 를 이용한 rsync 동기화를 설명하였다. 이제 ssh 를 이용한 방법에
대하여 알아보자.

ssh 나 rsh 를 이용한 방법은 rsyncd 를 설치하고 xinetd 설정이나 rsyncd.conf
같은 설정은 하지 않아도 된다. 그냥..

# rsync -avz -e ssh zzang911.net:/home  /home

rsh 를 사용하면.. -e rsh 하면 된다.

ssh 를 이용하면 패스워드를 입력해야 하는데 스크립터를 디스크 동기화를 자동화
할때는 다소 불편한 점이 있다. 이때는 –password-file 옵션을 사용하면 암호파일
의 위치를 지정해 줄수 있다.

이와 같이 rsync 클라이언트 사용법을 cron 등에 등록시켜 주기적으로 data 를 업
데이트 시킴으로써…두 호스트 간의 데이타 동기화를 할수 있다.


5. 실제 적용 예제

ssh 를 이용한 방법은즉흥적인 작업에 사용하면 좋고 port 를 이용한 방법은 스크
립터를 이용한 대용량 데이터 전송이나..백업등에 이용하면 좋다.
실제적인 사용 방안에 대해 알아보자. 여기선 port 를 이용한 방법을 사용하겠다.

과정 1) 현재 사용서버의 물리적인 이상이 보이기 시작한다. 그래서 새로 시스템을
만들고 현 시스템이 맛가기 전에 데이타를 신규 서버로 옮기고자 한다.

먼저 /etc/rsyncd.conf 설정 파일에 옮기고자 하는 데이타를 지정한다.

/etc/rsyncd.conf —————————————————–

[etc]
path = /etc
comment = etc
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = xxx.xxx.xxx.xxx (새로 만든 시스템 ip address )
max connections = 3
timeout 600

[named]
path = /var/named
comment = name
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = xxx.xxx.xxx.xxx
max connections = 3
timeout 600

[home]
path = /home
comment = home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = xxx.xxx.xxx.xxx
max connections = 3
timeout 600

[mail]
path = /var/spool/mail
comment = mail
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = xxx.xxx.xxx.xxx
max connections = 3
timeout 600

[mysql]
path = /usr/local/mysql/var
comment = mysql
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = xxx.xxx.xxx.xxx
max connections = 3
timeout 600

[tmp]
path = /tmp
comment = tmp
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = xxx.xxx.xxx.xxx
max connections = 3
timeout 600

[log]
path = /var/log
comment = log
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = xxx.xxx.xxx.xxx
max connections = 3
timeout 600

————————————————————————

이정도 설정한후 xxx.xxx.xxx.xxx 호스트에서 스크립터파일을 하나 만든다.

rsync_sh —————————————————————

rsync -avz –delete rsync_server_host::etc /etc
rsync -avz –delete rsync_server_host::named /var/named
rsync -avz –delete rsync_server_host::home /home
rsync -avz –delete rsync_server_host::mail /var/spool/mail
rsync -avz –delete rsync_server_host::mysql /usr/local/mysql/var
rsync -avz –delete rsync_server_host::tmp /tmp
rsync -avz –delete rsync_server_host::log /var/log

————————————————————————

이 스크립터 파일에 실행 권한을 주고 실행하면 된다.
이밖에 클러스터링이나 미러링에 이용할때는 위의 설정중 옮기고자 하는 데이터
에 해당되는 설정만 해주면 된다.

서진우

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.