2011년 11월 24일
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
PS : 물론, 상대방과 rsync시 pwd를 물어보지 않아야 정상적으로 작동함. 64bit에서도 작동이 잘 됨(tested kernel 2.6.18-274.7.1.el5)
<사용법>
Step 1. 클라이언트 서버에서 접속 Key 생성하기
클라이언트 서버에 접속시 사용할 계정으로 접속하여 아래의 명령어를 실행
ssh-keygen -t rsa
다음과 같은 출력화면을 엔터로 넘어간다.
Generating public/private rsa key pair.
Enter file in which to save the key (/계정/.ssh/id_rsa) :
(엔터를 치면 된다)
다음엔
Enter passphrase (empty for no passphrase):
(또 엔터를 치면 된다)
마지막으로
Your identification has been saved in …
Your public key has been saved in …
둘다 엔터를 치면 파일 경로와 파일 명이 출력된다
보통 id_rsa.pub로 끝난다.
Step 2. .pub 파일을 접근 대상 서버에 계정폴더 밑에 복사해 온다.
key 파일을 접근대상 서버의 계정명 폴더(/home/계정명/.ssh/)경로에
authorized_keys파일로 이름을 변경하여 저장한다.
만약 기존에 파일이 있다면 방금 생성된 파일의 내용을 뒤에 추가 하면 된다.
위에 설정을 완료하면 비밀번호 없이 접속이 가능해진다.
# by | 2011/11/24 17:43 | 어쩔수 없는 직업병 | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]