lsyncd+inotify+rsync低延迟同步文件

  • A+
所属分类:配置

inotify是linux内核用于通知用户文件系统变化的接口。需要内核版本2.6.13以上才可以支持。
这里是一篇介绍:http://www.ibm.com/developerworks/cn/linux/l-inotifynew/

Lsyncd是一个开源程序,使用C编写,通过调用inotify接口监控指定目录的文件变化情况,来调用rsync做数据传输。
这里是Lsyncd的github主页:https://github.com/axkibe/lsyncd

目前手上有个项目,其实很简单,其他业务向这里写入大量的图片,需要做一个冷备机器,最好实时备份图片,以免坏盘等丢失。
整体结构:主服务器上启动lsyncd,主服务器为文件源,使用inotify通知lsyncd,实现低延迟实时rsync备份数据写入备服务器。备服务器启动rsyncd服务监听,接受主服务器的连接。(日志用系统logrotate轮转)

1.需要lsyncd 2.0.7包,依赖lua包。

lua-5.1.4-1.el5.art.x86_64.rpm
lua-devel-5.1.4-1.el5.art.x86_64.rpm
lua-static-5.1.4-1.el5.art.x86_64.rpm

2.Lsyncd安装和其他程序的普通安装方式相同:

./configure --prefix=/usr/local/lsyncd make && make install

3.写入内核参数,用于大量文件同步,防止文件数目溢出(为防止重启丢失需要,写入rc.local)

echo "5000000000" >/proc/sys/fs/inotify/max_user_watches
echo "10000000" >/proc/sys/fs/inotify/max_queued_events
echo "8192" >/proc/sys/fs/inotify/max_user_instances

4.Lsyncd启动方式:/usr/local/lsyncd/bin/lsyncd /usr/local/lsyncd/conf/xxx.conf

5.Lsyncd某配置:

settings = { 
   logfile    = "/usr/local/lsyncd/log/lsyncd.log", 
   statusFile = "/usr/local/lsyncd/log/lsyncd.status", 
   nodaemon   = false, 
} 
sync{
default.rsync, 
rsyncBinary="/usr/bin/rsync",
source="/var/www",
target="$IP::$rsyncd_name",
rsyncOpts = {"-lcogP", "--log-file=/usr/local/lsyncd/log/rsync.log"}
}

6.rsync端配置:/etc/rsyncd.conf
使用rsync --daemon启动

uid=xxx
gid=xxx
comment= xxx
path=/var/www
ignore errors = true
read only = no
#secrets file=/etc/rsync.pass
#auth users=xxx
timeout = 600
transfer logging = true
log file=/var/log/rsyncd.log
log format="%o [%a] %m %P (%u) %f %l"
lock file=/var/run/rsyncd.lock

如需要密码验证,请把密码文件属主变更为启动rsyncd服务的用户,权限改为600,否则无法正常传输。

7.如果启动正常,在主服务器需要同步的目录内touch个空文件,20秒内,从服务器会同步完成。如果有错误,可以看之前的lsyncd和rsync日志,常见问题就是权限问题之类。请注意配置文件中的用户和同步目录本身权限匹配。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  1   博主  1

    • 苏幕遮 苏幕遮 0
      Google Chrome 65.0.3325.181 Google Chrome 65.0.3325.181 Windows 7 x64 Edition Windows 7 x64 Edition

      我有两个服务器A和B,上面都启动了lsync和rsync,现在发现一个问题。

      我1点启动同步任务,进程OK文件都是正常同步的,但是在2点的时候同步进程死掉,这期间文件发生了变化(文件夹里多了好多的新文件)。然后我3点的时候重启了同步任务,此时在A或者B上文件变化都会同步,但是2~3点进程死掉之间的文件变化,却迟迟不见同步,请问怎么办?

        • cornercat cornercat Admin
          Google Chrome 67.0.3396.10 Google Chrome 67.0.3396.10 Windows 10 x64 Edition Windows 10 x64 Edition

          你可以尝试清除或者修改一下/usr/local/lsyncd/log/lsyncd.status这个文件,这是同步状态文件,应该是记录了同步状态

          @苏幕遮