Lsyncd - 实时同步(官译)

描述

Lsyncd监视本地目录树事件监视器接口(inotify或fsevents)。它聚集并组合事件几秒钟,然后生成一个(或多个)进程(es)来同步这些更改。默认情况下,这是rsync因此Lsyncd是一个轻量级的实时镜像解决方案,相对而言易于安装,不需要新的文件系统或块设备,也不会影响本地文件系统的性能。

Rsync + ssh是一种高级操作配置,它使用SSH来操作文件和目录,直接在目标上移动,而不是通过线路重新传输移动目标。

细粒度的定制可以通过配置文件来实现。自定义操作配置甚至可以从层级层次(从shell脚本到用Lua语言编写的代码)从头开始编写这样可以实现简单,强大和灵活的配置。

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

许可证:GPLv2或任何后续的GPL版本。

何时使用

Lsyncd旨在将本地目录树与对远程镜像的预期更改的低配置文件进行同步。Lsyncd特别适用于将数据从安全区域同步到不太安全的区域。

其他同步工具

DRBD在块设备级别上运行。这对同步负载较重的系统很有用。另一方面,Lsyncd不要求您更改块设备和/或挂载点,允许您更改传输文件的uid / gid,通过rsync的单向性质分隔接收器。如果您要同步数据库,DRBD可能是更好的选择。

GlusterFSBindFS使用FUSE-Filesystem来插入内核/用户空间文件系统事件。

镜像是一种异步同步工具,它使用类似Lsyncd的inotify通知。主要区别在于:它是专门为master-master开发的,因此在两个系统上运行守护进程,使用自己的传输层而不是rsync,而使用Java代替Lsyncd的C核和Lua脚本。

Lsyncd使用示例

lsyncd -rsync /home remotehost.org::share/

这将监视并rsyncs本地目录/ home与所有子目录,并使用rsync-share'share'将它们传输到'remotehost'。

lsyncd -rsyncssh /home remotehost.org backup-home/

这也将rsync / watch'/ home',但它使用ssh连接在远程主机上进行本地移动,而不是通过网络重新传输移动的文件。

放弃

除了许可证中通常的免责声明之外,我们还要特别强调,作者或任何与作者相关的组织都不能并且将对因Lsyncd可能出现的故障而导致的数据丢失负责。

编译

要求

Lua> = 5.2

Lsyncd依赖于Lua 5.2或更高版本; 即5.2或5.3。对于大多数发行版,您需要安装liblua ??,liblua ?? - dev和lua ?? 包,用?? 作为相应的Lua版本。

cmake> = 2.8

要将Lsyncd配置到您的系统,需要cmake> = 2.8

rsync> = 3.1

在运行期间,Lsyncd需要在源系统和目标系统上同时安装rsync> 3.1。

编译

满足这些要求Lsyncd应该是一个直接的过程。解压下载的tar.gz文件并运行:

cmake .
make
sudo make install


调用

作为大多数Unix工具,Lsyncd将在用-help调用时打印其命令行选项的摘要。

lsyncd --help
lsyncd -help

Lsyncd中的两个连字符是冗余的。它没有短的一个字母选项,并且一个连字符总是与指定两个相同。

也像大多数Unix工具一样,--version或者-version让Lsyncd打印它的版本号。

lsyncd -version

Lsyncd 2.1被设计为主要通过配置文件进行配置(见下文)。配置文件因此可以是唯一的命令行选项。

lsyncd CONFIGFILE

尽管对于标准使用或快速测试,它可以通过命令行选项进行光标配置。以下内容将使用rsync保持本地源和目标目录同步:

lsyncd -rsync /home/USER/src /home/USER/dst

目标可以是Rsync可以识别的任何东西。

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

通过调用两次(或多次)-rsync配置两个(或更多)目标。

lsyncd -rsync /home/USER/src remotehost1:dst -rsync /home/USER/src remotehost2:dst 

Rsync同步的一个缺点是,通常目录和文件移动会导致移动源的删除和导线移动目标的重新传输。但是,Lsyncd 2可以使用ssh命令在目标上本地移动目录和文件。-rsyncssh在本地源目录,远程主机和目标目录之后使用此用法REMOTEHOST可以包含一个用户[email protected]

lsyncd -rsyncssh /home/USER/src REMOTEHOST TARGETDIR

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

lsyncd -nodaemon CONFIGFILE

使用-nodaemon运行时的行为有所不同。Lsyncd不会/像它在成为守护程序时那样将其工作目录更改为。因此,相对目标./target会起作用,-nodaemon但必须指定绝对路径才能在守护进程模式下工作。源目录也将由Lsyncd转换为绝对路径。源代码不解析为绝对路径的原因是因为Lsyncd本身并不关心目标说明符的格式,该目标说明符也可以是远程主机,rsyncd模块等。它不透明地传递给rsync。它关心观察到的目录。

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

lsyncd -log all CONFIGFILE

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

lsyncd -log Exec CONFIGFILE

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

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

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

配置文件

Lsyncd配置文件是有效的Lua语法它的设计简单而有力。虽然丰富的配置和简单性本身并不是对立的,但一些折衷是不可避免的。为了尽可能实现这两个目标,Lsyncd配置可以在不同的层完成。较低的层次增加了适应性,而界面变得更有吸引力。

设置

对于所有图层的脚本,settings可以使用调用来更改守护程序范围的配置。

例如,以下代码将指示Lsyncd登录/tmp/lsyncd.log,定期/tmp/lsyncd.status使用其状态更新该文件,并且不会将其作为守护程序分离。

settings {
   logfile    = "/tmp/lsyncd.log", statusFile = "/tmp/lsyncd.status", nodaemon = true, }

警告 如果你从2.0.x升级,请注意它settings是一个变量的函数,所以你必须删除settings之间的等号'=' {

有效的设置键是:

日志文件 = 文件名 登录到此文件
pidfile进程文件 = 文件名 将PID记录到此文件中
nodaemon = BOOL 不分离
statusFile = 文件名 定期向该文件写入状态报告
statusInterval = 在经过此秒数后最短写入状态文件(默认值:10)
logfacility类似 = 系统日志设施,默认“用户”
logident = 系统日志标识(标签),默认“lsyncd”
咬定 = BOOL 尽管一个或多个目标由于无法访问而失败,但仍会在启动时继续运行。
inotifyMode = 在inotify系统上指定要监听的更改类型。可以是“修改”,“CloseWrite”(默认)或“CloseWrite或Modify”。
进程数 = Lysncd不会产生比这些数量更多的进程。这增加了所有同步{}。

此外,还可以配置一些参数,这些参数由所有Syncs继承(请参阅第3层)

maxDelays = 当这个延迟事件的数量排队时,动作将被产生,甚至低于延迟计时器。
 

配置第4层:默认配置

您可以简单地从三个默认实现中选择:rsyncrsyncsshdirect

要使用默认的rsync行为来同步本地目录,只需将其添加到配置文件即可:

sync {
   default.rsync, source = "DIRNAME", target = "DIRNAME" }

论点的顺序并不重要。如果target是本地目录,请注意它是绝对路径名。您可以通过这种方式添加多个同步。源目录可能相同或不同,没有问题。source是每个同步必须给出的通用参数。所有其他sync参数可能因所选行为而异。或者,您可以覆盖默认或设置值maxDelaysmaxProcesses每次同步

也可以通过将默认init功能设置为false来跳过初始rsync过程

sync {
    default.rsync, source = "DIRNAME", target = "DIRNAME", init = false }

这是一个危险的优化; 因此,请仅在确定源和目标在Lsyncd启动时同步的情况下使用它。

您可以选择的默认行为如下:

default.rsync

默认的rsync配置会将事件聚合到delay秒或1000个独立的不可折叠事件,这些事件首先发生。然后它会产生一个Rsync,并带有所有已更改文件的过滤器。过滤器列表通过管道传输到Rsync。从Lsyncd到Rsync的调用将如下所示:

/usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET

您可以更改调用Rsync的选项以及与rsync参数调用的Rsync二进制文件

例:

sync {
    default.rsync, source = "/home/user/src/", target = "foohost.com:~/trg/", delay = 15, rsync = { binary = "/usr/local/bin/rsync", archive = true, compress = true } }

以下是rsync参数选项的表格请查看Rsync文档以获得深入的解释。

parameter = TYPE default value comment
acls = BOOL false  
append = BOOL false (Lsyncd >= 2.2.0)
append-verify = BOOL false (Lsyncd >= 2.2.0)
archive = BOOL false  
backup = BOOL false (Lsyncd >= 2.2.0)
backup_dir = DIR false (Lsyncd >= 2.2.0)
binary = FILENAME "/usr/bin/rsync" Lsyncd calls this binary as rsync
checksum = BOOL false  
chmod = STRING   (Lsyncd >= 2.2.0)
chown = USER:GROUP   (Lsyncd >= 2.2.0)
compress = BOOL false  
copy_dirlinks = BOOL false (Lsyncd >= 2.2.0)
copy_links = BOOL false  
cvs_exclude = BOOL  
dry_run = BOOL false  
exclude = PATTERN   TABLE of PATTERNs also allowed
excludeFrom = FILENAME    
executability = BOOL false  
existing = BOOL false (Lsyncd >= 2.2.0)
group = BOOL false  
groupmap = STRING   (Lsyncd >= 2.2.0)
hard_links = BOOL false  
ignore_times = BOOL false  
inplace = BOOL false (Lsyncd >= 2.1.6)
ipv4 = BOOL false  
ipv6 = BOOL false  
links = BOOL true  
one_file_system = BOOL false  
owner = BOOL false  
password_file = FILENAME   (Lsyncd >= 2.1.2)
perms = BOOL false  
protect_args = BOOL true  
prune_empty_dirs = BOOL false  
quiet = BOOL false  
rsh = COMMAND    
rsync_path = PATH   (path to rsync on remote host)
sparse = BOOL false  
suffix = SUFFIX   (Lsyncd >= 2.2.0)
temp_dir = DIR    
times = BOOL true  
update = BOOL false  
usermap = STRING   (Lsyncd >= 2.2.0)
verbose = BOOL false  
whole_file = BOOL false  
xattrs = BOOL false  
_extra = TABLE of STRINGS.   如果绝对需要,可以将其他参数指定为STRINGS表(例如:{“--omit-dir-times”,“--omit-link-times”})。请注意,下划线将此解释为解决方法。如果您需要上述选项未涵盖的内容,请通过项目网站上的功能请求申请。最值得注意的是,不要添加-r递归或-a这意味着递归,因为Lsyncd会自己处理它。另外,不要为相对添加-R,这会破坏Lsyncd < - > Rsync通信。

default.rsyncssh

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

与default.rsync不同,它不需要统一的target参数,但需要hosttargetdir分开。

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 } }

请注意rsync参数集和ssh参数集之间的逗号

警告 如果你从2.0.x升级,请注意它settings是一个变量的函数,所以你必须删除settings之间的等号'=' {

Lsyncd将调用xargs远程主机来处理单个连接中的多个任务。Xargs选项可以由xargs参数指定。

binary = FILENAME Lsyncd calls this binary as xargs on the remote host (default: /usr/bin/xargs)
delimiter = DELIMITER delimiting character to separate filenames. By default the 0 character is used. Very old holds may need newline instead.
_extra = STRING TABLE By default { '-0', 'rm -rf' }. Remove the -0 if you chose newline delimiter instead. Otherwise leave it as is.


sync
{例:

    default.rsyncssh, source = "/home/user/src/", host = "foohost.com", targetdir = "~/trg/", }

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/" }

排除

可以指定两个附加参数来同步{}:

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”。
  • 如果规则以斜杠开始,则只会在路径名的开头匹配
  • 如果规则以斜线结尾,则只会在路径名的末尾匹配
  • 匹配不是斜杠的任何字符。
  • * 匹配零个或多个不是斜线的字符
  • ** 匹配零个或多个字符,这可以是斜杠。

例:

sync {
    default.rsync, source = "/home/user/src/", targetdir = "/home/user/dst/", exclude = { '*.bak' , '*.tmp' } }

缺失

默认情况下,Lsyncd将删除目标上不存在的文件,因为这是保持目标与源同步的基本部分。但是,由于各种原因,许多用户请求例外,因此所有默认实现都delete作为附加参数。

有效值为delete

删除 = 真正 默认。Lsyncd将在目标上删除不在源代码中的任何东西。在启动时以及在正常操作过程中被删除的内容。
删除 = Lsyncd不会删除目标上的任何文件。不在启动或正常运行。(虽然可以覆盖)
删除 = '启动' Lsyncd将在启动时删除目标上的文件,但不会进行正常操作。
删除 = “跑步” Lsyncd在启动时不会删除目标上的文件,但会删除那些在正常操作期间被删除的文件。
 

猜你喜欢

转载自www.cnblogs.com/sunsky303/p/8976445.html