基于Lsync+sync实现实时文件同步_双氧水地带_百度空间
 lsyncd 全称是Live Syncing (Mirror) Daemon,它是一款能实时同步本地文件或目录到远端的机器,

它的工作原理:监视本地的目录,当源数据有文件或目录更新时,更新本地文件或目录到远端机器,
保持实时文件同步。它更新数据时需要远端机器运行rsync demon。

下面我将通过一个示例来通过lsyncd与rsync实现数据的实时同步
本示例所需要的软件是:lsyncd与rsync
在它们的官方主页上可以下载{zx1}的源代码
lsyncd的官方主页为:http://code.google.com/p/lsyncd/
rsync的官方主页为:http://samba.anu.edu.au/rsync/

在本地机器上安装rsync
#wget http://samba.anu.edu.au/ftp/rsync/src/rsync-3.0.5.tar.gz
#tar xf rsync-3.0.5.tar.gz
#cd rsync-3.0.5
#./configure \
--prefix=/usr/local/rsync \
--disable-ipv6 \
--disable-iconv
#make && make install

在本地机器上安装lsyncd
#wget http://lsyncd.googlecode.com/files/lsyncd-1.26.tar.gz
#cd lsyncd-1.26
#./configure
#make && make install

远端机器的配置
#vi /etc/rsyncd.conf
[test]
path = /tmp/test               #保持数据的目录
hosts allow = 192.168.0.2      #允许访问的主机IP
read only = false              #是否只读

新建目录
#mkdit /tmp/test
#chown nobody:nobody /tmp/test
在远端机器上启动rsync
#/usr/local/rsync/bin/rsync --daemon
使rsync随机器启动
echo "/usr/local/rsync/bin/rsync --daemon" >> /etc/rc.local

在本地机器上配置lsyncd
建立配置文件
#vi /etc/lsyncd.conf
/home/test/ 192.168.0.3 test
说明:/home/test/ 要实时同步的目录
192.168.0.3 要实时同步到的远端机器
test 对应远端机器的rsync的tag。
如果要同步多台就在这个文件中每同步一台加一行
格式如上所示

对lsyncd建立日志文件
#vi /etc/logrotate.d/lsyncd
/var/log/lsyncd {
missingok
notifempty
sharedscripts
postrotate
/etc/rc.d/init.d/lsyncd restart 2>&1 > /dev/null || true
endscript
}
说明:它的日志保存的文件为/var/log/lsyncd,
建立lsyncd的启动文件
#vi /etc/rc.d/init.d/lsyncd

#
#! /bin/sh
#
# lsyncd
# description: Live Syncing (Mirror) Daemon
# chkconfig: 2345 90 10
# processname: lsyncd

# Source function library.
. /etc/init.d/functions

RETVAL=0
PROCNAME=lsyncd

DAEMON="/usr/local/bin/lsyncd"
DAEMON_OPTS="--rsync-remote-sh ssh"
DAEMONUSER=lsyncd

# See how we were called.
case "$1" in
start)
echo -n "Starting lsyncd Live Syncing Daemon: "
BUFIFS=$IFS
IFS=
exec 3< /etc/lsyncd.conf
while read FL 0<&3
do
export src=`echo $FL|awk -F, '{print $1}'`
export remotehost=`echo $FL|awk -F, '{print $2}'`
export dest=`echo $FL|awk -F, '{print $3}'`
su ${DAEMONUSER} -c "${DAEMON} ${DAEMON_OPTS} ${src} ${remotehost}:${dest}" >& /dev/null
done
exec 3<&-
IFS=$BUFIFS
#exit 0

pkill -0 $PROCNAME
RETVAL=$?
if [ $RETVAL -eq 0 ]
then
echo_success
else
echo_failure
fi   
echo
;;
stop)
echo -n "Stopping lsyncd Live Syncing Daemon: "
killproc $DAEMON
RETVAL=$?
if [ $RETVAL -eq 0 ]
then
echo_success
else
echo_failure
fi
echo
;;
status)
status $PROCNAME
RETVAL=$?
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
condrestart)
if [ -f $PIDFILE ]; then
$0 stop
$0 start
RETVAL=$?
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart|condrestart}"
exit 1
esac

exit $RETVAL

给启动脚本执行权限
#chmod +x /etc/rc.d/init.d/lsyncd
启动lsyncd
#/etc/rc.d/init.d/lsyncd start
确认lsyncd是否启动
#/etc/rc.d/init.d/lsyncd status
lsyncd (pid 18753) is running...
把lsyncd加入到随机器启动当中
#chkconfig lsyncd on

测试:
在本机机器的/home/test.建立一个文件。到远端的/tmp/root确认是否存在
如没有同步成功请检查日志文件/var/log/lsyncd,确定错误。
同时检查防火墙是否正确配置成功

本实现方案存在的问题:
对于大文件的问题,本人在测试过程中下载了一个600M的ISO镜像文件,
在下载过程中,远端机器会生成一个一样文件名的文件,但大小并随本地机器的变化而发生变化,
它当本地机器下载完成后,再进行传输,会有一点点延迟。


郑重声明:资讯 【基于Lsync+sync实现实时文件同步_双氧水地带_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——