Linux lsyncd 를 이용한 실시간 동기화

흔히 서버간에 데이터가 실시간으로 동기화 되어야 할 때가 있다.
예를들어 다수의 웹서버가 있다고 가정했을 때 관리자는 여러대의 서버에 동시에 동일한 데이터를 반영해야 할 상황이 오게 된다.
이와 같은 경우 자동으로 동기화가 이루어 지지 않으면 일일이 다수의 서버에 접속해 수동으로 동기화 해 줘야 하는 불편함이 동반된다.
위와 같은 상황에 간단하게 해결 할 수 있는 방법이 무엇이 있을까?
방법이야 여러가지가 있을 수 있겠지만 여기에서는 lsyncd를 이용해서 동기화를 해 보려 한다.
단, 동기화해야 할 데이터가 너무 크거나 많을 경우는 다른 방법을 찾아보는게 좋을 것 같다. ^^;

원리

리눅스 커널의 `inotify`로 파일시스템의 변경사항을 모니터링 하다 변경되는 이벤트가 발생하면 rsync 또는 rsyncssh를 통해 상대 서버로 변경부분을 동기화 해준다.
inotify에 대한 자세한 내용은 http://ko.wikipedia.org/wiki/Inotify 를 참고한다.

필요한 구성

리눅스가 설치 되어 있는 두대의 리눅스(kernel 2.6.13 이상) 서버를 준비한다.
원본서버 : 192.168.0.10
대상서버 : 192.168.0.11

설치

원본서버에 lsyncd 설치

yum -y install lsyncd

위와 같이 yum으로 설치하면 간단하게 설치가 된다.

간단한 사용 예

lsyncd [원본경로] [대상서버경로]
예) lsyncd /data 192.168.0.11:/data

설정

rsyncssh를 이용한 lsyncd.conf 파일 예제

----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
--
-- sync{default.rsyncssh, source="/var/www/html", host="localhost", targetdir="/tmp/htmlcopy/"}
settings = {
   logfile      = "/var/log/lsyncd.log",
   statusFile   = "/var/log/lsyncd-status.log",
   nodaemon     = false,
   maxDelays = 0,
   maxProcesses = 10,
}
sync{
    default.rsyncssh,
    source="/data/",
    host="192.168.0.11",
    targetdir="/data/",
    rsync = {
        perms = true,
        owner = true,
        _extra = {"-a"},
        archive = true,
        compress = true,
        whole_file = false
    },
}

setting 블럭

logfile : 로그파일 경로
statusFile : 상태로그파일 경로
nodaemon = false : 데몬형태로 실행
maxDelay :
maxProcesses :

sync 블럭

default.rsyncssh : 동기화시 rsync를 이용하지 않고 rsyncssh를 이용
source : 원본 디렉토리
host : 대상서버주소
targetdir : 대상 디렉토리
rsync : rsync 동기화 옵션들

실행

데몬실행

service lsyncd start

192.168.0.10 서버의 /data 디렉토리에 file을 하나 만든다.

touch /data/test.txt

lsyncd 로그를 확인 하면 아래와 같이 동기화된 파일에 대한 내용이 로깅 되어 있다.

vi /var/log/lsyncd.log
Wed Oct 22 14:29:19 2014 Normal: Rsyncing list
/test.txt
Wed Oct 22 14:29:20 2014 Normal: Finished (list): 0

참고 URL

https://github.com/axkibe/lsyncd/wiki/Lsyncd-2.1.x-%E2%80%96-Layer-4-Config-%E2%80%96-Default-Behavior
https://axkibe.github.io/lsyncd/
https://www.lucasrolff.com/ha/replication-using-lsyncd/

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다