lsyncd通过inotify或者fsevents监控本地目录的变化事件,并且将事件连接起来,然后启动一个或者多个进程 [lsyncd官方网站][1] [github][2] ![](http://om4h63cja.bkt.clouddn.com/17-5-13/92363473-file_1494664074809_8038.png) ## 安装 ~~~ yum install -y lsyncd lua lua-devel ~~~ 启动方式 ~~~ service lsyncd start ~~~ 测试用 ~~~ lsyncd -log Exec /etc/lsyncd.conf ~~~ 可以安装epel-self中的**lsyncd-enhanced** ## lsyncd.conf配置选项说明 ### 全局设置 --开头表示注释,下面是几个常用选项说明: ~~~ logfile 定义日志文件 stausFile 定义状态文件 statusInterval 将lsyncd的状态写入上面的statusFile的间隔,默认10秒 nodaemon=true 表示不启用守护模式,默认 inotifyMode 指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite or Modify maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,则最大能看到有8个rysnc进程 maxDelays 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到 ~~~ ### sync 定义同步参数,可以继续使用maxDelays来重写settings的全局变量。 #### 模式运行 ~~~ default.rsync 本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程; default.direct 本地目录间同步,使用cp、rm等命令完成差异文件备份; default.rsyncssh 同步到远程主机目录,rsync的ssh模式,需要使用key来认证 ~~~ #### 目录设置 ~~~ source 同步的源目录,使用绝对路径。 target 定义目的地址.对应不同的模式有几种写法: /tmp/dest 本地目录同步,可用于direct和rsync模式 172.29.88.223:/tmp/dest 同步到远程服务器目录,可用于rsync和rsyncssh模式 excludeFrom 排除选项,后面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude",如果是简单的排除,可以使用exclude = LIST。 ~~~ 这里的排除规则写法与原生rsync有点不同,更为简单: ~~~ 监控路径里的任何部分匹配到一个文本,都会被排除,例如foo可以匹配/bin/foo/bar 如果规则以斜线/开头,则从头开始要匹配全部 如果规则以/结尾,则要匹配监控路径的末尾 ?匹配单个任何字符,但不包括/ *匹配0或多个字符,但不包括/ **匹配0或多个字符,可以是/ ~~~ ``` delay 累计事件,等待rsync同步延时时间,默认15秒(最大累计到1000个不可合并的事件)。也就是15s内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步。(可合并的意思是,15s内两次修改了同一文件,最后只同步最新的文件) ``` delete 为了**保持target与souce完全同步**,Lsyncd默认会delete = true来允许同步删除。它除了false,还有startup、running ~~~ true Lsyncd将在目标上删除任何不在源中的内容。 在启动时和正常操作中被删除的内容。 false 在lsyncd启动后将在目标上不删除任何不在源中的内容, 在启动时和正常操作中被删除的内容。 startup 启动时将执行一次完全文件同步,保证完全一致;正常运行过程中不会删除target中的文件 running 启动前,增加的会同步,删除的不同步;正常运行过程中会删除target中的文件 ~~~ >[info]使用技巧,先使用startup模式进行一次完全同步,在使用running保持后续的一致性。 ~~~ bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出) compress 压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false perms 默认保留文件权限。 ~~~ #### 其它rsync的选项 其它还有rsyncssh模式独有的配置项,如host、targetdir、rsync_path、password_file, ## 同步模式 ### 全局配置 ~~~ settings { logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log", statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 8, } ~~~ ### I. 本地目录同步,direct:cp/rm/mv ~~~ sync { default.direct, source = "/tmp/src", target = "/tmp/dest", delay = 1 maxProcesses = 1 } ~~~ ### II. 本地目录同步,rsync模式:rsync ~~~ sync { default.rsync, source = "/tmp/src", target = "/tmp/dest1", excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst", rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, bwlimit = 2000 } } ~~~ ### III. 远程目录同步,rsync模式 + rsyncd daemon ~~~ sync { default.rsync, source = "/tmp/src", target = "syncuser@172.29.88.223::module1", delete = true, exclude = { ".*", ".tmp" }, delay = 1, maxDelays = 1, init = true, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, verbose = false, password_file = "/etc/rsyncd.d/rsync.pwd", _extra = {"--bwlimit=200"} } } ~~~ ### IV. 远程目录同步,rsync模式 + ssh shell ~~~ sync { default.rsync, source = "/tmp/src", target = "172.29.88.223:/tmp/dest", -- target = "root@172.29.88.223:/remote/dest", -- 上面target,注意如果是普通用户,必须拥有写权限 maxDelays = 5, delay = 30, -- init = true, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, bwlimit = 2000 -- rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no" -- 如果要指定其它端口,请用上面的rsh } } ~~~ ### V. 远程目录同步,rsync模式 + rsyncssh,效果与上面相同 ~~~ sync { default.rsyncssh, source = "/tmp/src2", host = "172.29.88.223", targetdir = "/remote/dir", excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst", -- maxDelays = 5, delay = 0, -- init = false, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true, _extra = {"--bwlimit=2000"}, }, ssh = { port = 1234 } } ~~~ [1]:https://axkibe.github.io/lsyncd/ [2]:https://github.com/axkibe/lsyncd