当前位置: 首页 > 工具软件 > lsyncd > 使用案例 >

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

谢飞舟
2023-12-01

官方文档

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

 类似资料: