https://axkibe.github.io/lsyncd/
https://github.com/axkibe/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的配置是用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
}
}
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 {}命令中指定。
安装
在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