메뉴 닫기

리눅스 lsyncd (실시간 동기화)

logo

 

lsyncd (실시간 동기화 유틸)

 

예전에 rsync 와 연동하여 몇번 사용했던건데 잘 사용하면 꽤 유용할듯 하다.

 

rsyncd 단점

실시간 동기화의 어려움
시스템 퍼포먼스 분산의 어려움
차등 동기화 방식으로 서버 댓수에 따라 동기화 시간이 걸린다

 

Inotify 파일 시스템을 감지하는 커널모듈

[root@localhost ~]# grep -i inotify /boot/config-`uname -r`
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y

 

설치

wget http://lsyncd.googlecode.com/files/lsyncd-1.26.tar.gz

tar xvfz lsyncd-1.26.tar.gz

cd lsyncd-1.26

./configure

make && make install

 

원본자료 → 동기화할 서버 (백업서버?)
xxx.xxx.250.98 → xxx.xxx.26.4

 

Lsyncd Rsyncd.conf + xinetd

 

xxx.xxx.250.98 서버에서는 단지
lsyncd /home/tc1/ xxx.xxx.26.4::BACKUP 요렇게만 날려주면 데몬이 올라가면서 자동으로 동기화 된다.

 

26.4 서버에서는 
vim /etc/rsyncd.conf 아래와 같이 작성해줬다.

 

[BACKUP]
path = /home/test
comment = lsyncd test
uid = root
gid = root
use chroot = yes
read only = no
hosts allow = xxx.xxx.250.98
max connections = 1
timeout 600
 

여러개를 동기화 할려면 lsyncd.conf 파일일 수정해준다 아래꺼 같은데 수정해주고 /etc/init.d/lsyncd 스크립트 만들어서
시작해주면 될듯 ..

 

/usr/local/src/lsyncd-1.26/lsyncd.conf.xml

 

스크립트는 아래와 같다..

/etc/init.d/lsyncd [stop | start| 이런식으로 날려주자~

 

#!/bin/bash
# description: lsyncd auto start script
start() {
pid=`pidof lsyncd`
if [ $? -eq 0 ]; then
echo “lsyncd (pid $pid) is running…”
echo ” “
else
echo “Starting lsyncd…”
echo ” “
/usr/local/bin/lsyncd
fi
}
stop() {
echo “Stopping lsyncd…”
echo ” “
/bin/kill -9 `/sbin/pidof rsync`
until [ -z $(/sbin/pidof lsyncd) ]; do :; done
}
case “$1” in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
pid=`pidof lsyncd`
if [ $? -eq 0 ]; then
echo “lsyncd (pid $pid) is running…”
echo ” “
else
echo “lsyncd is not running”
echo ” “
fi
;;
*)
echo “Usage: lsyncd {start|stop|restart|status}”
exit 1
esac
exit $?

 

 

운영하다가 보면 디렉토리가 8천개 넘는경우 동기화가 정상적으로 작동 되지 않는다.

 

아이노티파이 기본적은 디렉토리는 8천 몇백개 정도 인듯 하다. 이걸 강제로 수정한다.

[root@localhost ~]# cat /proc/sys/fs/inotify/max_user_watches
8192

 

커널변수 수정

vim /etc/sysctl 열어서 아래라인 삽입하고
# lsyncd max Directory number fix
fs.inotify.max_user_watches = 16000

 

sysctl -p 적용한다.

 

특정디렉토리만 지울려고 할때

<settings>
<exclude-from filename=”/etc/lsyncd_exclude.lst”/>
</settings>
 

/etc/lsyncd_exclude.lst
– 아래와 같이 제외 시킬 디렉토리 지정만 해주면 됨

lib/sms_old
lib/sms
lib/sms/LOCK
lib/sms/LOG

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다