使用我能够帮你干一些什么事情呢?
最开始我们先介绍一下该工具的功能和特性,对以后使用做一个基础说明。Lsyncd 工具 使用文件系统事件接口 inotify 或 fsevents 来监视对本地文件和目录的更改,在很短的时间内 Lsyncd 将这些事件整理,然后生成一个或多个进程以将更改的内容同步到远程文件系统中,默认的同步方法是使用 rsync 工具。Lsyncd 对于将数据从安全区域同步到不太安全的区域特别有用。
Lsyncd 是一种轻量级的实时镜像解决方案,其安装相对容易,且不需要新的文件系统或块设备的支持。同时,Lysncd 同步的时候还不会妨碍本地文件系统的运转。
作为 rsync 的替代方案,Lsyncd 还可以通过 rsync+ssh 方式推送文件。当文件或目录重命名或移动到本地树中的新位置时,rsync+ssh 可以更加高效的同步。相反,使用 rsync 则通过删除旧文件然后重新传输整个文件来执行移动。
可以通过配置文件实现细粒度的自定义。自定义操作配置甚至可以从头开始编写,从 shell 脚本到用 Lua 语言编写的代码。因此,简单,强大和灵活的配置是可能的。需要注意的是,在 Lsyncd2.2 的版本中要求同步双方的主机上的 rsync 版本不低于 3.1 方可正常使用。
当然,同步工具很有很多种,且功能和适用性上都各有不同。如果要同步数据库,我们可以选择 DRBD 工具,因为它在块设备级别上运行且非常适合用于同步负载较重的系统。而 Mirror 工具 是一种异步同步的工具,它像 Lsyncd 一样使用 inotify 作为事件通知。但是,其主要区别在于是专门为 master-master 的使用方式而开发的,因此在两个系统上运行守护进程,使用自己的传输层而不是 rsync 工具。
# 官方仓库地址
$ git clone https://github.com/axkibe/lsyncd.git
# 系统需求需要
Lua >= 5.2
cmake >= 2.8
rsync >= 3.1
# 编译方式
$ cmake .
$ make
$ sudo make install
你应该怎么使用我来完成工作呢?
# 在测试配置时使用-nodaemon选项,Lsyncd将不会作为为守护程序运行
# 所有日志消息都是打印在控制台(stdout和stderr)的已配置日志记录工具
# 这里的CONFIGFILE参数表示Lsyncd工具的配置文件路径,需使用绝对路径
$ lsyncd -nodaemon CONFIGFILE
# 将会记录又有的同步信息,输出内容会变得很多
$ lsyncd -log all CONFIGFILE
# 将只记录Lsyncd生成的所有进程的命令
$ lsyncd -log Exec CONFIGFILE
# 使用rsync工具同步
$ lsyncd -rsync /home/USER/src /home/USER/dst
# 使用rsync工具同步
# 同步本地的home目录到远程主机的share目录中去
$ lsyncd -rsync /home remotehost::share/
# 使用ssh工具同步
# 是要注意使用ssh的方式需要和rsync有区别
# REMOTEHOST => 本地源目录
# TARGETDIR => 远程主机和目标目录
$ lsyncd -rsyncssh /home REMOTEHOST TARGETDIR
$ lsyncd -rsyncssh /home remotehost.org backup-home/
# 多个目录同步
$ lsyncd -rsync /home/USER/src remotehost1:dst \
-rsync /home/USER/src remotehost2:dst
如何更好地让我配合你的工作呢?
Lsyncd 的配置文件遵从 Lua 的语法格式,它的设计简单而有效,有非常多的配置选项。为了更改更好地满足不同用户的使用需求,可以在不同的层上完成 Lsyncd 的配置。较低的层增加了适应性,同时界面变得更具吸引力。
配置文件分为四个层级,越往下越底层,如需更加具体的操作可以向下配置,如自定义同步行为等方式。我们这里只介绍全局配置和默认配置,其他可以参见官方文档。
# 全局配置的参数应该很清楚,不需要解释了
settings {
logfile = "/tmp/lsyncd.log",
statusFile = "/tmp/lsyncd.status",
nodaemon = true,
}
注释:事件类型主要有Modify/CloseWrite/CloseWrite or Modify三种
如何更好地让我配合你的工作呢?
这一次就是使用 Lsyncd 工具主要需要个性化配置的文件,其中最基础的同步模式主要有三种,分别是 rsync、rsyncssh 和 direct。
# 第四层rsync配置的一个示例
sync{
default.rsyncssh,
source = "/var/www/live_site_resources",
host = "192.168.129.90",
targetdir = "/var/www/live_site_resources",
delete = "running",
delay = 15,
exclude={ ".*", "*.tmp" },
rsync = {
binary = "/usr/local/bin/rsync",
archive = true,
compress = true,
checksums = false,
_extra = {"--bwlimit=50000"},
}
}
# 第四层rsyncssh配置的一个示例
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
}
}
# 第四层direct配置的一个示例
sync {
default.direct,
source = "/home/user/src/",
target = "/home/user/trg/"
}
作者: Escape 链接: https://escapelife.site/posts/d5e421c4.html