흔히 서버간에 데이터가 실시간으로 동기화 되어야 할 때가 있다.
예를들어 다수의 웹서버가 있다고 가정했을 때 관리자는 여러대의 서버에 동시에 동일한 데이터를 반영해야 할 상황이 오게 된다.
이와 같은 경우 자동으로 동기화가 이루어 지지 않으면 일일이 다수의 서버에 접속해 수동으로 동기화 해 줘야 하는 불편함이 동반된다.
위와 같은 상황에 간단하게 해결 할 수 있는 방법이 무엇이 있을까?
방법이야 여러가지가 있을 수 있겠지만 여기에서는 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/