lsyncd--Live Syncing实时同步

背景:公司每天都会上传大量的图片到服务器,以前是用rsync+crontab的方式,现在为了保证图片能实时的传送到服务器,所以采用了lsyncd方式搭建。

注意:

(1)开始接触lsyncd的时候网上有很多参考资料,不过大部分都是1.x版本的lsyncd,这里讲述的是2.07版本,根据网上的高手讲到自从lsyncd 2.0.3以后配置文件格式已经改变了,采用了Lua格式。

(2)有两种方法可以实现自动同步,一种是lsyncd+rsync的方式,这种方式下必须搭建rsync服务,然后结合rsync的--password-file参数写入密码来实现实时同步,本人认为这种方式比较麻烦。第二种方式是采用lsyncd+ssh的方式,通过ssh加密隧道实现实时同步。 

一.安装必要软件包

 (1)yum install lua lua-devel lua-static

 (2)下载lsyncd源码,http://code.google.com/p/lsyncd/downloads/list

       三部曲安装:./configure   make  make install

二.配置ssh身份验证

(1)ssh-keygen -t rsa 生成密钥对,利用ssh-copy-id  IP 将公钥放在要实时同步数据端。(这一部分内容关于密钥生成不懂得可以google一下,做这样子的配置,必须要有一定基础的linux知识)这样子就可以直接ssh IP就可以登录到被同步的服务器,而不用再做实时同步的时候手动输入密码。

三.实时同步配置

 vim /root/lsyncd.lua   (创建一个文件,名字随便起),在里面写入自己的配置信息

 

settings={
          logfile = "/var/log/lsyncd/lsyncd.log",
          statusFile = "/var/log/lsyncd/lsyncd.status",
          maxDelays = 180,
          delay = 180,
          maxProcesses = 6,
           statusInterval = 20,
}
sync{
      default.rsyncssh, source="/root/lsyncd-2.0.7/", host="172.16.10.105", targetdir="/root/chenxuechang/tmp/", rsyncOpts={"-az"}, exclude={"com1/","com2","com3"}
}

logfile 是日志文件

statusFile记录着本地和服务器端需要执行同步目录的变化,例如,服务端删除了文件a,增加了文件b,那么这个文件就会记录着本地将在执行动作删除文件a,创建文件b。

maxDelays delay是实时同步时间间隔,本人暂时对这两个也搞不清楚

default.rsyncssh 是使用ssh隧道验证来传输文件

exclude是排除同步哪些文件

在命令行终端输入:lsyncd  /root/lsyncd.lua   没有错误的话,这个命令就会以deamon的形式运行,可以用        ps -ef |grep lsyncd来查看这个进程。

具体的同步信息可以查看上面配置的两个日志文件来排除错误和查看实时同步动作。

 

FAQ:

       (1)实时同步时相对而言的,本人测试有时候服务器端发生目录文件改变,本地端要3分钟后才会自动同步,有时候30秒,有时候50秒,具体的同步时间间隔,本人觉得应该跟delya和maxDelay这两个参数有关系,但一直没有时间去做测试。

       (2)如果要用lsyncd+rsyncd的方式,上面的配置文件/root/lsyncd.lua中的default.rsyncssh必须改为default.rsync.

         (3)注意同步目录的方向,哪个是源,哪个是目标要分清楚。

       (4)默认的lsyncd实时同步时加了--delete参数,也就是说当服务器端删除了文件之后,本地端也会执行同样的删除动作

       (5)在编译安装lsyncd的时候会出现以下错误

checking for LUA... no
checking for LUA... no
checking for LUA... no
checking for LUA... no
configure: error: Package requirements (lua >= 5.1.3) were not met:
No package 'lua' found

但是用rpm -qa |grep lua的时候,发现已经安装了lua包

解决办法:
wget   http://www.lua.org/ftp/lua-5.1.4.tar.gz    tar zxvf lua-5.1.4.tar.gz      cp etc/lua.pc /usr/lib64/pkgconfig/   然后在重新./configure
以下是google得到的信息:
For some reason, when I built and installed LUA, the "lua.pc" file was not copied over. So I copied the "lua.pc" over to my /usr/lib/pkgconfig/ folder and the ran the ./configure again. This time it worked.

 

暂时就写这么多吧,肚子饿了,该吃饭了。

written by chenxuechang 

 

 

你可能感兴趣的:(lsyncd,实时同步数据)