此前,我们曾经介绍过文件同步常用的几种方案。

  • rsync + crontab
  • rsync + inotify
  • rsync + sersync

它们都有各自的应用场景,每一种方案都有其应用场景。

在 rsync + inotify 或 rsync + sersync 解决方案中,有一个共同的缺点,就是当文件修改的比较频繁时,会不断的产生同步操作。比如说程序的日志文件,日志文件的修改频率是非常频繁的,如果是用上述的两种方案,则会不断的触发同步操作。

lsyncd 有一个非常好的特性,它支持延时同步,即会把修改次数累积到一定的数量或时间后再触发同步操作,这样一来,使得同步不那么的频繁了。

lsyncd 配置

以下是 lsyncd 的一个完整的配置示例及配置项说明。

settings {
    --定义日志文件
    logfile ="/var/log/lsyncd/lsyncd.log",
    --定义状态文件
    statusFile ="/var/log/lsyncd/lsyncd.status",
    --将lsyncd的状态写入上面的statusFile的间隔,默认10秒
    statusInterval = 10,
    --指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite or Modify
    inotifyMode = "CloseWrite or Modify",
    --同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,则最大能看到有8个rysnc进程
    maxProcesses = 15,
    --累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到。
    maxDelays=10,
}
sync {
    --default.rsync:连接远程rsyncd进程
    --default.direct:本地目录间同步
    --default.rsyncssh:同步到远程主机目录,rsync的ssh模式,需要使用key来认证
    default.rsync,
    --同步的源目录,使用绝对路径。
    source    = "/usr/local/sersync/data",
    --定义目的地址,对应不同的模式有不同的写法。这里是远程rsync,使用“用户名@ip::模块名”写法。
    target    = "192.168.4.23::gzb",
    --这是一个优化选项,当init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是true
    init      = true,
    --是否同步删除,除了running选项,还有true、false和startup
    --true是删除
    --false是不删除
    --startup是仅在启动时将源目录和目的目录来一次完全同步,lsyncd运行时的源目录的删除文件在目的目录中不做删除操作
    --running是启动时不对源、目的目录进行完全同步,lsyncd运行时源目录删除的文件,目的目录也会被删除。
    delete="running",
    --排除的文件,这里排除了一些隐藏文件,和文件打开是时的临时文件
    exclude = { ".tmp","*.swp","*.swx", "*.*~", "*.swpx" },
    --排除选项,后面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude",如果是简单的排除,可以使用exclude选项
    --这里的排除规则写法与原生rsync有点不同,更为简单:
    --监控路径里的任何部分匹配到一个文本,都会被排除,例如/bin/foo/bar可以匹配规则foo
    --  如果规则以斜线/开头,则从头开始要匹配全部
    --  如果规则以/结尾,则要匹配监控路径的末尾
    --  ?匹配任何字符,但不包括/
    --  *匹配0或多个字符,但不包括/
    --  **匹配0或多个字符,可以是/
    --excludeFrom = "/etc/lsyncd.exclude"
    -- 累计事件,等待rsync同步延时时间,默认15秒。为0即实时同步。
    delay = 15,
    rsync     = {
        --本地rsync命令路径
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose   = true,
        --远程rsyncd的密码
        --password_file = "/etc/rsyncd/rsync.passwd",
    }
} 

除此之外,rsync 配置段还有一些高级的选项参数。

parameter=TYPEdefault valuecomment
acls=BOOLfalse
append=BOOLfalse(Lsyncd >= 2.2.0)
append-verify=BOOLfalse(Lsyncd >= 2.2.0)
archive=BOOLfalse
backup=BOOLfalse(Lsyncd >= 2.2.0)
backup_dir=DIRfalse(Lsyncd >= 2.2.0)
binary=FILENAME"/usr/bin/rsync"Lsyncd calls this binary as rsync
checksum=BOOLfalse
chmod=STRING (Lsyncd >= 2.2.0)
chown=USER:GROUP (Lsyncd >= 2.2.0)
compress=BOOLfalse
copy_dirlinks=BOOLfalse(Lsyncd >= 2.2.0)
copy_links=BOOLfalse
cvs_exclude=BOOL
dry_run=BOOLfalse
exclude=PATTERN TABLE of PATTERNs also allowed
excludeFrom=FILENAME
executability=BOOLfalse
existing=BOOLfalse(Lsyncd >= 2.2.0)
group=BOOLfalse
groupmap=STRING (Lsyncd >= 2.2.0)
hard_links=BOOLfalse
ignore_times=BOOLfalse
inplace=BOOLfalse(Lsyncd >= 2.1.6)
ipv4=BOOLfalse
ipv6=BOOLfalse
links=BOOLtrue
one_file_system=BOOLfalse
owner=BOOLfalse
password_file=FILENAME (Lsyncd >= 2.1.2)
perms=BOOLfalse
protect_args=BOOLtrue
prune_empty_dirs=BOOLfalse
quiet=BOOLfalse
rsh=COMMAND
rsync_path=PATH (path to rsync on remote host)
sparse=BOOLfalse
suffix=SUFFIX (Lsyncd >= 2.2.0)
temp_dir=DIR
times=BOOLtrue
update=BOOLfalse
usermap=STRING (Lsyncd >= 2.2.0)
verbose=BOOLfalse
whole_file=BOOLfalse
xattrs=BOOLfalse
_extra=TABLE of STRINGS. If absolutely needed, additional arguments can be specified as a TABLE of STRINGS(example: { "--omit-dir-times", "--omit-link-times" }). Note that the underscore highlights this as workaround. If you need something that is not covered by the above options, please request it via a feature request on the project website. Most notably, do not add -r for recursive or -a which implies recursive, since Lsyncd will handle that by itself. Additionally do not add -R for relative, which will ruin Lsyncd <-> Rsync communication.

lsyncd 的其他功能

lsyncd的功能不仅仅是同步,官方手册 Config Layer 2: Advanced onAction 高级功能提到,还可以监控某个目录下的文件,根据触发的事件自己定义要执行的命令,example是监控某个某个目录,只要是有jpg、gif、png格式的文件参数,就把它们转成pdf,然后同步到另一个目录。

标签: rsync, lsyncd

添加新评论