본문 바로가기

04. Secure/iii. backup

lsync를 통한 실시간 백업 (rsync의 변형이랄까?)

퍼가실땐 최소한 출처를 밝혀주세요..ㅠ_ㅠ

예전에 HA관련에서 실시간 백업에 대해서 이야기를 논한적이 있습니다.

lsync에 대한것을 살짝 언급을 하였었고, 오늘 테스트를 해보았습니다.
문제가 있다면 disk I/O가 문제가 되어집니다.

아무래도 I/O가 많이 발생되어지는 장비에서 테스트를 하다보니 이래저래 걸리는것도 많을뿐더러 현재 VirtualBox에서 테스트를 하였는데 Linux 장비만 총 3대가 올라와 있습니다 (운영체제는 Win7)

※일단 H/W의 절대 부족 ㅠ_ㅠ;;; (장비 사주세요!!!!!!!!!!!!!!!)
이번 lsync 이후에는 아마도 DRDB 테스트를 해야할텐데 에효...산넘어 산입니다.

최신 버전의 lsync구하는곳 (http://code.google.com/p/lsyncd/)
+ rsyncd도 최신 버전이여야 합니다...-_-; (CentOS 5.5에 default로 설치되어지는 rsync는 2.6 버전인것같습니다. 3버전으로 업글을 추천합니다...ㄷㄷ

1. 컴파일 (rsync http://samba.org/rsync)
일단 구하고 wget하고 tar도 해주고 ./configure ; make ; make install 합니다.

2. lsync 컴파일 (rpm이 없습니다. 위 알려드린 url에서 2.0.2를 다운 받습니다)
   -> lua가 필요합니다. 설치 버전은 5.1.4 입니다.

   2.1 LUA 5.1.4 컴파일 (http://www.lua.org/)
        ->wget 하고 tar zxvf 하고, make linux;make test;make install 합니다.
   2.2 그뎌 lsync 컴파일
        -> 설치도중 에러가 납니다.
        -> LUA 컴파일 dir로 이동하여 lua.pc 파일을 /usr/lib64/pkgconfig에 복사를 해줍니다. (linux가 64비트인지라)
        -> make 도중 에러가 발생합니다....-_-;
             (중도 포기를 예상하며 잠깐의 커피타임...)
        ->gcc  -g -O2 -Wall -I/usr/local/include     -o lsyncd lsyncd.o inotify.o -L/usr/local/lib -llua -lm
                /usr/local/lib/liblua.a(loadlib.o): In function `ll_loadfunc':
                loadlib.c:(.text+0x7d4): undefined reference to `dlsym'
                loadlib.c:(.text+0x7e2): undefined reference to `dlerror'
                loadlib.c:(.text+0x8ad): undefined reference to `dlopen'
                loadlib.c:(.text+0x8c3): undefined reference to `dlerror'
                /usr/local/lib/liblua.a(loadlib.o): In function `gctm':
                loadlib.c:(.text+0xdbc): undefined reference to `dlclose'
                collect2: ld returned 1 exit status
                make[1]: *** [lsyncd] Error 1
                make[1]: Leaving directory `/root/lsync/lsyncd-2.0.2'

이건 뭐다냥........................                vi config.status 파일을 수정합니다.

LIBLUA_LIBS = -L/usr/local/lib -llua -lm -ldl 혹은 LIBLUA_LIBS = -L/usr/local/lib -llua -lm

오오 그뎌 컴파일이 되어집니다..........헉헉 여기까지 오시느라 고생하셨습니다. ㅠ_ㅠ 잠깐 한숨 돌리시죠? (위에서 커피 마시고...-_-;)

rsync와 lsync가 컴파일이 모두 완료가 되어졌습니다.

여기서 잠깐...; lsync이 원리에 대해서 이야기를 잠깐 해보도록 하겠습니다.
lsync는 kernel에서 디스크 기록시에 event가 발생이 되어지는데 이 event를 감지하여 해당 file에 대한것을 rsync에게 넘기는 방식입니다.

그러다보니 이게 말로만 실시간이지 실시간이 안되어지는 부분도 존재합니다.
대표적인 예로는 db관련 부분입니다. 한번 thread들이 물면 놓지 않기 때문에 db서버가 내려가면서 file write event가 발생되어지지 않으면 sync가 되어지지 않습니다. 이것은 결국 로그도 동일한 현상이 발생이 되어지는 부분이 있으니 참고를 하세요

============제 멋대로 한 rsync conf=========
cat rsyncd.conf
[data]
path=/data/
comment=lsync_nosage
uid=nobody
gid=nobody
use chroot=yes
max connections=10
read only=yes

이것만 설정했습니다....테스트장비이니까요...(데헷....^_* << 아무래도 정신줄 놓은듯...)

그 다음 lsync를 올립니다.
처음에는 에러로그를 보기 위해서 nodaemon상태로 올립니다.

lsycn --nodaemon -rsync /data /lsync (/data는 소스 위치 /lsync는 타겟위치입니다 - 타겟 위치는 원격지 서버도 가능합니다.)

이 상태라면 lsync설치가 완료가 되어집니다.
고생하셨습니다.


퍼가실땐 최소한 출처를 밝혀주세요..ㅠ_ㅠ




'04. Secure > iii. backup' 카테고리의 다른 글

Rsync를 이용한 Backup 구축 가이드  (3) 2009.06.25