lsyncd搭建和使用(含rsync配置)

    技术2025-06-07  19

    官方文档

    https://axkibe.github.io/lsyncd/ https://github.com/axkibe/lsyncd

    lsyncd简介

    Lsyncd使用lua语言对inotify和rsync进行封装,使用文件系统事件接口(inotify或fsevents)来监视对本地文件和目录的更改,Lsyncd将这些事件整理几秒钟,然后生成一个或多个进程以将更改同步到远程文件系统,默认同步方法是rsync。是一种轻量级的实时镜像解决方案,不需要新的文件系统或块设备,Lysncd不会妨碍本地文件系统性能

    可以通过配置文件实现细粒度的自定义。自定义操作配置甚至可以从头开始编写,从shell脚本到用Lua语言编写的代码

    Lsyncd 2.2.1在所有源计算机和目标计算机上都需要rsync> = 3.1。

    安装

    在ubuntu和debian,lsyncd已经收入到其官方镜像源中,直接使用apt-get安装即可 apt-get install rsyncd

    lsyncd配置

    lsyncd的配置是用lua语言编写,一般为/etc/lsyncd.conf,常用的主要是两部分:

    setting部分 里面是全局变量,–后面的表示注释,常见配置如下:

    settings { logfile = "/var/log/lsyncd/lsyncd.log", --日志文件 pidfile = "/var/run/lsyncd.pid", --记录进程ID的文件,可以不用配置 statusFile = "/var/log/lsyncd/lsyncd.status", --运行状态文件,包括记录一些监控目录的变更信息 statusInterval = 5, --将lsyncd的状态写入上面的statusFile的间隔,默认10秒 nodaemon = true, --表示不启用守护模式,默认 inotifyMode = "CloseWrite", --指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite or Modify maxProcesses = 5, --同步进程的最大个数。假如同时有10个文件需要同步,而maxProcesses=5,则最大能看到有5个rysnc进程 maxDelays = 1, --累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到 inist = ture, --keep running at startup although one or more targets failed due to not being reachable. 一般不用配置 }

    sync部分 主要用来定义同步时的一些设置,可以同时同步多个目录,只需要在该代码块中事先定义好多个sync即可。一般第一个参数指定lsyncd以什么模式运行,主要有rsync、rsyncssh、direct三种模式:

    default.rsync :默认的rsync配置会将事件聚合到delay秒或1000个独立的不可折叠事件,这些事件首先发生。然后它会产生一个Rsync,并带有所有已更改文件的过滤器。过滤器列表通过管道传输到Rsync,可以进行本地或远程的文件同步,常见配置如下

    sync { default.rsync, source = "/tmp/src", --同步原目录 target = "rsync_user@172.16.1.41::backup", --同步目的地址 delete = "running", --目标目录和源目录不同时的删除方式,四种,详解见下面 exclude = { "*.txt", ".tmp" }, --排除同步的文件,可以用rsync的正则 delay = 3, --累计事件,等待delay秒后进行rsync同步,默认15秒(最大累计到1000个不可合并的事件)。也就是15s内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步。(可合并的意思是,15s内两次修改了同一文件,最后只同步最新的文件) init = false, --只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是true rsync = { --这里是rsync的同步配置 binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true, --同步详细模式输出 password_file = "/etc/rsync.pwd", _extra = {"--bwlimit=200"}, 其他的一些配置,这里表示限速,单位kb/s } }

    补充

    上面配置文件中的delete各值解释: delete = true #在目标上删除源中没有的内容。在启动时以及在正常操作期间删除的内容 delete = false #不会删除目标上的任何文件。不在启动时也不在正常操作上 delete = 'startup' # Lsyncd将在启动时删除目标上的文件,但不会在正常操作时删除 delete = 'running' # Lsyncd在启动时不会删除目标上的文件,但会删除正常操作期间删除的文件 排除:可以指定两个附加参数来同步: excludeFrom = FILENAME loads exclusion rules from this file, on rule per line exclude = LIST loads exclusion rules from this list of strings 排除规则在rsync的排除模式之后建模,但稍微简单一些。Lsyncd支持这些功能: 通常,如果某个事件的路径名的任何部分(参见第3层以下)与文本匹配,则将其排除。例如文件“/ bin / foo / bar”匹配规则“foo”。 如果规则以斜杠开始,则只会在路径名的开头匹配 如果规则以斜线结尾,则只会在路径名的末尾匹配 ?匹配不是斜杠的任何字符。 * 匹配零个或多个不是斜线的字符 ** 匹配零个或多个字符,这可以是斜杠。 delete 和 exclude 本来是rsync的配置选项

    default.direct :Default.direct可以用来保持两个本地目录同步,比使用default.rsync更好的性能。Default.direct在启动时使用(就像default.rsync一样)rsync来初始化目标目录与源目录的同步。但是,在正常操作期间,default.direct使用/ bin / cp,/ bin / rm和/ bin / mv来保持同步。所有参数就像default.rsync一样

    sync { default.direct, source = "/home/user/src/", target = "/home/user/trg/" }

    default.rsyncssh :同步到远程主机目录,rsync的ssh模式,需要使用key来认证。此配置不同于标准rsync配置,因为它使用ssh命令在目标主机本地移动文件或目录,而不是再次删除和传输。这种配置产生了类似于default.rsync的Rsync进程,但是会产生/usr/bin/ssh HOST mv ORIGIN DESTINATION命令。

    与default.rsync不同,它不需要统一的target参数,但需要host并targetdir分开。 Rsync的选项可以通过rsync上面所描述的default.rsync中的参数进行更改 Rsync的选项可以通过rsync上面所描述的default.rsync中的参数进行更改。

    除此之外,可以通过ssh参数配置ssh 。

    binary = FILENAME #Lsyncd calls this binary as ssh (default: /usr/bin/ssh) identityFile = FILE #Uses this file to identify for public key authentication. options = TABLE #A table of addition extended options to pass to ssh's -o option. port = PORT #Adds --port=PORT to the ssh call. _extra = STRING TABLE #Similar to rsync._extra this can be used as quick workaround if absolutely needed. settings { logfile = "/var/log/lsyncd.log", statusFile = "/var/log/lsyncd-status.log", statusInterval = 20 } sync { default.rsyncssh, source="/srcdir", host="remotehost", excludeFrom="/etc/lsyncd.exclude", targetdir="/dstdir", rsync = { archive = true, compress = false, whole_file = false }, ssh = { port = 1234 } }

    启动lsyncd

    lsyncdd所有日志消息按类别排序。默认情况下,Lsyncd缺少日志消息。通过指定,您可以将Lsyncd转换为motormouth -log all。

    lsyncd -log all CONFIGFILE

    这可能很容易变得太多。一个特别有用的类别是“Exec”,它将记录Lsyncd产生的所有进程的命令行。

    lsyncd -log Exec CONFIGFILE

    测试Lsyncd配置时-nodaemon是一个非常方便的标志。使用此选项,Lsyncd不会分离,并且不会成为守护进程。所有日志消息都是在控制台上打印的配置日志记录工具(stdout和stderr)之外的。

    lsyncd -nodaemon CONFIGFILE

    当没有配置文件时,可以直接在命令中指定,如下:

    lsyncd -rsync /home/USER/src remotehost:dst lsyncd -rsyncssh /home/USER/src REMOTEHOST TARGETDIR

    当默认初始启动同步失败时,Lsyncd将以错误消息终止。它是这样设计的,所以配置故障可见地报告给可能的初始用户。但是,在生产过程中可能会完成远程目标,但是您希望Lsyncd始终启动并不断尝试同步到远程目标,直到它启动。

    lsyncd -insist -rsync /home/USER/src remotehost:dst

    在生产模式下,建议坚持。它也可以在配置文件中的settings {}命令中指定。

    rsync安装与配置

    安装 在ubuntu或者debian下,直接 apt-get install rsync 即可

    配置 /etc/rsyncd.conf

    uid = root # 表示同步的文件所属用户 gid = root # 表示同步的文件所属用户组 use chroot = yes # 安全相关,表示在同步时,是否将同步目录转为根目录 max connections=0 # 允许客户端的最大连接数,0表示不限制 log file=/var/log/rsyncd/rsyncd.log pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock [backup] path = /var/tmp/ read only = no list = yes auth users = rsyncuser secrets file = /etc/rsync.pas

    /etc/images.pas 密码文件

    rsyncuser:123456 chmod 600 /etc/images.pas # rsync的密码文件权限必须是600 /usr/bin/rsync –daemon config=/etc/rsyncd # 启动

    问题

    1、在rsync中,他的密码文件包括用户名和密码两部分,用“:”隔开,但是在lsyncd中,配置里的密码文件只写密码就行,不要写用户名,要不rsync会同步不成功

    扩展

    lsyncd不仅仅可以用来同步,还可以自己写各种action,监控指定目录的文件,根据触发的事件执行自己定义的命令,这个没有实践,可以参考 https://www.cnblogs.com/sunsky303/p/8976445.html

    本文参考原文: https://www.cnblogs.com/sunsky303/p/8976445.html https://segmentfault.com/a/1190000002737213

    Processed: 0.014, SQL: 9