후.. 리눅스 실시간 동기화..
1. 일단 실시간 동기화
- NFS : 머라 말할 필요도 없는 그것!
- DRBD : block 장치 수준에서 동작하며 스토리지 형태의 큰 대용량 파일을 동기화 할때 좋다.
백업 데이타를 확인하지 못하고, 백업되는 상황만 확인할수 있다는 단점이 있다.
속도에서 빠르나, 블록단위 백업이라 쓸모없는 것까지 백업되기도 한다.
- rsync : 실시간이 될수 없다. 파일 개수가 많아질수록 속도가 늦어진다.
2. lsyncd 동기화 툴
- 리눅스 커널의 inotify 로 파일시스템의 변경사항을 체크한다.
- 변경사항이 생기자 마자, rsync 를 호출하여 상대 서버로 동기화를 한다.
(반응 시간은 1초 미만, 전송속도는 네트워크 회선 속도와 파일 용량에 따라 틀림)
inotify는 리눅스 커널에 포함된 기능으로, 파일 시스템에 변경사항이 발생할 때 이벤트를 통보해준다. 하지만 리눅스 커널
2.6.13 에서부터 기본으로 포함되어 있으므로, centos 5버전 이상에서만 디폴트로 가능하다는것을 알아두자.
3. 작동방식
- src 서버에 lsyncd 데몬이 동작
- dst 서버에 rsync 가 동작해야 함.
4. 설치
- lsyncd 를 컴파일 하기 위해서는 libxml2-devel 패키지가 필요하다고 한다. 나는 그냥 설치되어 있던데 ㅋ
- 다운로드 후 ./configure && make && make install 로 설치 끝
5. 사용법
- conf 파일을 만들어 두는것이 편하다. (이거는 기본이다. 옵션이나 그런것은 알아서 조절하자)
<lsyncd version="1"> <settings> <!--uncomment to log all debug messages.--> <!--uncomment to log only errors.--> <!--uncomment to not detach, log to stdout/stderr.--> <!--uncomment to not call any actions, run dry only.--> <!--uncomment to exclude file handled to rsync.--> <logfile filename="/var/log/lsyncd"/> <callopts> <directory> </lsyncd> |
- 실행 방법
lsyncd --conf 설정파일
- dst 서버에서 rsync 를 설정해주고 /etc/rsyncd.conf 도 설정해 주자. 당연히 rsync 방화벽도 open !!
=================================================
localhost test
=================================================
1. 반응속도는 빠르다.
2. 데몬이 동작중일때 파일 생성, 수정, 삭제에 대해서 반응한다.
3. 데몬이 중단되었을때 일어나는 이벤트에 대해서는 다시 데몬이 동작하여도 감지 할수 없다.
4. src 와 dst 가 파일 내용이 틀린상황에서 src 에서 변화가 일어나면 dst 로 덮어씌우기가 된다.
-> 결론은 무조건 src의 내용으로 동기화가 일어난다. (dst 에서의 변경내용은 사라진다)
5. 파일변경시 변경도중은 인식하지 못하고, 변경이 완료되어서 파일의 stat 상태가 변경되어야만 감지한다.
6. localhost 에서의 동기화는 rsync 사용시 rsync 의 특징으로 rsync 데몬이 떠잇거나 port 보안 설정등이 없어도 자연스럽게 된다. (rsync 설정도 필요없다. 근데 localhost 에서 이런거 동기화 할 이유가 있을까나?)
7. conf 파일 만들기 전에 lsyncd 명령어로 시작시 stop/start 스크립트가 먹히지 않는다. 원본글의 스크립트는 버리자
==============================================
target 서버를 지정할때 test
==============================================
백업 서버에 /etc/rsyncd.conf 설정할것
소스 서버에서 lsyncd 데몬 시작할것
conf 파일을 사용시 lsyncd --conf 설정파일 로 실행시킬경우 좋음
rync 옵션에서 기본 예제 옵션은 에러가 나서 avvr 로 로그 남기기로 변경하였음
로그 남기기로 변경하니 /var/log/lsyncd.log 에 rsync 로그가 남게 됨.
반응속도는 거의 순간적인듯 함
중간에 잠시 10초 정도 네트워크 접근이 불가 할경우.. 장애 해소시에 멈춘부분부터 계속 이어서 백업됨
rsync 의 트라이 회수 같은 설정이 있으면 그거의 영향일지도??
30분 정도의 장애를 산정하고 테스트 해봣더니 동기화가 일어나지 않았다. ;; 해결점을 찾아야 겟다
lsyncd 의 데몬이 내려간사이 변화가 있는 파일에 대해서는 감지하지 못한다. ;;
-> 위에 2가지 상황 때문에 크론으로 일정 시간에 한번 rsync 로 동기화를 따로 해주던가 해야 할거 같다.
==================================================
makuosan
==================================================
특별히 src / dst 서버 구분이 없이 모든 서버에서 makuosan -b /디렉토리 로 데몬이 떠 잇어야 반응한다
host 1 < - > host 2 모두 양방향 반응을 할수 있다.
UDP 5000 포트를 사용하므로 전송속도는 빠르나, 신뢰성은 떠러진다.
파일 전송 명령어는
msync 파일
msync --delete -v -r 디렉토리
등으로 전송 시작할수 있다.
아직까지 lsyncd 의 설정파일에 makuosan 을 연계할지 확인 못해봣다.
그냥 rsync 가 더 나아 보이기도 한다.. 1:1 미러 싸이트의 웹소스 미러링 같은경우는 rsync 가 더 효율적일거 같다.
아래는 해당 데몬에 대한 자세한 설명이 되어있는 커피닉스 싸이트의 좋은진호님 글이다
http://coffeenix.net/board_view.php?bd_code=1696
제 목 : lsyncd로 서버간 파일을 실시간으로 동기화해보자. - 거의 실시간으로 서버간의 파일 동기화가 필요한 경우라면 어떻게 해야할까? 서버간의 파일 동기화를 위해서는 3가지 방법을 생각해볼 수 있다. 1. NFS를 이용한다.
위의 방법을 이용하지 않고, 한 서버의 변경사항을 다른 서버로 실시간으로 동기화시키는 흥미로운 툴이 있다. 바로 실시간 싱크 프로그램인 lsyncd이 그 주인공. lsyncd - Live Syncing (Mirror) Daemon 1) lsyncd의 원리는 간단하다. - 리눅스 커널의 inotify로 파일시스템의 변경사항을 체크한다. (판단은 inotify로) inotify는 리눅스 커널에 포함된 기능으로, 파일시스템에 변경사항이 발생할 때 이벤트를 통보해준다. 이 inotify를 이용하게 되면, 파일 변경사항을 수시로 파악할 필요없이 가만히 앉아있으면 된다. 파일이 바뀔 때 커널에서 통보해주는 신호를 덥석 받아먹으면 되기 때문이다. 0.5초(0.5초는 그만큼 짧다는 것을 표현하기 위해서 사용했음)도 안되는 아주 짧은 시간 동안의 차이는 생길 수 있지만, 소규모 서버를 운영할 경우에는 무리가 없을 것으로 보인다. 2) 원본 서버와 동기화 대상 서버(target)간의 구조
- 원본 데이터가 있는 서버(1대의 서버)에는 lsyncd 데몬(lsyncd 데몬 + rsync 클라이언트)이 동작하게 되고, 3) lsyncd master서버에서 필요 환경은 다음과 같다. 대상 서버는 rsync만 동작하면 OS종류, 버전에 상관없다. - Linux Kernel 2.6.13 이상 (inotify를 위해) 4) 어떤 경우 유용할까?
2. lsyncd를 이용한 실시간 동기화 기본 형식은 다음과 같다.
Fri Dec 4 18:13:13 2009: Starting up
3. lsyncd config 파일 lsyncd.conf 샘플 설정 파일이다. * lsyncd.conf 샘플 내려받기 <settings> <!--uncomment to not call any actions, run dry only.--> <!--uncomment to exclude file handled to rsync.--> <logfile filename="/var/log/lsyncd"/> <callopts> <directory> </lsyncd>
4. lsyncd 깊이 알기 1) 특정 서브 디렉토리나 파일을 제외(exclude)하려면? lsyncd는 동기화에서 제외할 디렉토리 목록을 '--exclude-from FILE' 옵션으로 지정할 수 있다. lsyncd_exclude.lst 파일에 아래 내용을 넣으면 2개 디렉토리를 제외하게 된다. 특정 파일만 제외할 수는 없다. 디렉토리만 지정이 가능하다. 제외한 디렉토리는 rsync할 때 제외되는 것이 아니라, inotify의 모니터링 대상 자체에서 빠진다. 빠진 디렉토리수(서브디렉토리도 있다면 그 것도 포함)만큼 'Entering normal operation with [??] monitored directories' 로그에 남으니, 계산해보면 확인이 될 것이다.
2) 퍼미션, 소유자까지 변경하려면? lsyncd는 퍼미션과 소유자의 변경은 무시하도록 되어 있다. debug 모드로 살펴보면 로그에 다음과 같이 남는다.
3) lsyncd가 rsync를 어떻게 호출하는지 궁금하다? lsyncd가 실행되는 서버에서 다음 스크립트를 실행한다. 파일변경시 즉시 실행되는 rsync 명령을 확인할 수 있다. while [ 1 ]
lsyncd는 rsync의 경로를 --binary 옵션이나 config에서 설정할 수 있다. 따라서 이 경로를 수정하게 되면 rsync를 직접 호출하지 않고, 스크립트를 통해 호출할 수가 있다. 그래서 동기화할 때 ① 원하는 명령을 실행할 수도 있고, ③ rsync 대신 다른 동기화 프로그램도 사용할 수가 있게 된다. 일본 KLAB에서 만든 동기화 툴인 Makuosan( http://lab.klab.org/wiki/Makuosan )이 있다. 이 툴은 동기화 서버가 1대이든 몇십대이든 속도 저하없이 거의 동시에 동기화된다. 이 툴을 이용하여 스크립트를 만든다면 재밌는 조합( lsyncd + Makuosan )이 될 것이다. 실시간 파일 변경 판단은 lsyncd로 하고, 동기화는 빠른 Makuosan로 이뤄지는 것이다. 참고로 rsync를 스크립트로 만든 경우는 http://code.google.com/p/lsyncd/wiki/HowToExecAfter 를 읽어보기 바란다.
DB 파일, log 파일처럼 파일이 계속 active된 상태로 변경되는 디렉토리에는 사용하지 않는다.
6. 참고 자료 * lsyncd wiki * inotify로 파일 시스템 활동 감시하기 * Rsync를 이용한 데이터 미러링 구축 (2004.1, 글 굿스피드) |
'리눅스' 카테고리의 다른 글
[Linux] 부팅시 파티션 No such file or directory (0) | 2010.09.07 |
---|---|
[Linux] date 의 지역시간 변경하기 (KST) (0) | 2010.07.29 |
[etc] 리눅스 route 수동설정 및 자동적용 (0) | 2010.05.20 |
[Linux] partprobe (파티션 리부팅 없이 인식) (0) | 2010.05.11 |
[manual] Linux 튜닝 (0) | 2010.05.07 |