04. Secure/iii. backup2011.02.22 21:49
퍼가실땐 최소한 출처를 밝혀주세요..ㅠ_ㅠ

예전에 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설치가 완료가 되어집니다.
고생하셨습니다.


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



더보기


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신머루군
04. Secure/iii. backup2009.06.25 09:58
1. 시작하며


Rsync로 구현하는 백업 서버 구축방법과 Rsync client방법에 대해서 설명한다.
Rsync구하는곳
http://rsync.samba.org/ftp/rsync
 
로컬백업
 
네트워크 백업
Rsync에는 ssh나 rcp(873)를 사용하는 백업방법과, xinetd를 사용하는 백업하는 방법 두가지가 존재한다

1. 구성도
 
Server 1                Server 2               Server3
      |                        |                          |
       ------------------------------------
                                |
                        Backup Server (100)
 
위처럼 구성을 하고 있을때 Rsync서버는 Backup Server에는 실제 서버들을 백업한 정보가 남게 되어지고, Server들에는 xinetd 의 rsync가 구성이 되어진다.
 
2. /etc/xinetd.d/rsync 설정 (각 서버에 모두 설정필요 : xinetd로 실행되어진다면)
service rsync
{
             disable = no # 주의사항: 꼭 NO로 되있어야지 활성화가 되어진다
             socket_type = stream
             wait = no
             user = root
             server = /usr/local/bin/rsync #실제 rsync설치 경로)
             server_args = --daemon
             log_on_failure += USERID
}
3. /etc/rsyncd.conf (실제 rsync설정파일) [server 1 : 백업서버대상]
[Server1]
path = /backup # 백업대상 데이터가 저장된 절대 경로
comment = Server1 # 설명문 (각 서버마다 중복이 혀용되어집니다)
uid=nobody #데이터 전송할때의 UID
gid=nobody #데이터 전송할때의 GID
use chroot=yes #path에서 설정한 경로를 root로 사용함
read only=yes # 백업서버이기때문에 가급적 read only설정
hosts allow=192.168.0.100 #백업서버 - 백업 대상을 의미 : realIP 설정
max connections=10 # 동시접속수 0은 무한대를 의미
timeout 300
 
4. 백업서버 (100 아이피)에서 rsync실행 방법
rsync -avz 192.168.0.1::Server1/ /home/backup/Server1 #Server1를 백업
rsync -avz 192.168.0.1::Server2/ /home/backup/Server2 #Server2를 백업
# args 설명 : a : achive mode 기존 속성 및 퍼미션, 소유권등 설정내용 그대로 유지
                   v : log mode = Verbose
                   z : 전송속도의 효율을 위해서 압축후 수행
                  --delete : 백업서버에 없는내용은 그대로 삭제 해버림


미러링 서버는 특정 환경을 구축해두고 좀더 빠른 데이터 전송이나, 서버의 부하를 줄이고자 하는 목적
 
1. 원본서버
2. 미러링 서버
 
원본서버에서 주기적으로 데이터의 변환이 생기고, 미러링 서버는 원본서버를 주기적으로 체크하여 데이터를 동기화 한다.
 
1. /etc/xinet.d/rsync && /etc/rsyncd.conf 확인 (원격지백업 페이지 참조)
2. crond에 설정
* 1 * * * su - root -c '/root/mirror_sync.sh
 
3. mirror_sync.sh
#/bin/bash
rysnc -avz --delete 원본서버IP::경로/ 미러링서버의절대 경로




Rsync만 잘 활용을 하여도 백업서버를 별도로 구축 운영할 필요가 없을정도로 잘 되어져 있고, 실제 많은곳에서도 사용이 되어지고 있다.


아...그리고, rsync를 local -> local시에는 특별한 세팅이 필요 없습니다.
rsync -avz /source /target 만 하면 되어집니다...
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신머루군

티스토리 툴바