介绍
Lsyncd 功能跟 Inotify 和 Sersync 相同,属于实时同步工具,但是 Lsyncd 功能更加强大,Lysncd 实际上是 lua 语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过 rsync 去差异同步,达到实时的效果。Lsyncd 最强大之处在于简单高效传输海量数据并且 Lsyncd 支持多种工作模式。
github 地址:https://github.com/axkibe/lsyncd。
安装与配置
直接使用 yum 安装即可:
$ yum -y install lsyncd
它的配置文件为 /etc/lsyncd.conf
,其结构与说明如下:
# 全局设置;
settings
{
# 定义日志文件;
logfile
# 定义状态文件;
stausFile
# 默认不启用守护模式;
nodaemon=true
# 将 lsyncd 的状态写入上面的 statusFile 的间隔,默认 10 秒;
statusInterval
# 指定 inotify 监控的事件,默认是 CloseWrite,还可以是 Modify 或 CloseWrite or Modify;
inotifyMode
# 同步进程的最大个数。假如同时有 20 个文件需要同步,而 maxProcesses = 8,则最多能看到有 8 个 rysnc 进程;
maxProcesses
# 累计到多少所监控的事件激活一次同步,即使后面的 delay 延迟时间还未到;
maxDelays
}
# 里面是定义同步参数,可以继续使用 maxDelays 来重写 settings 的全局变量。一般第一个参数指定 lsyncd 以什么模式运行:rsync、rsyncssh、direct 三种模式;
sync
{
# 使用 rsync 完成同步,也可以达到使用 ssh 形式的远程 rsync 效果,或 daemon 方式连接远程 rsyncd 进程;
default.rsync
# 本地目录间同步,使用 cp、rm 等命令完成差异文件备份;
default.direct
# 同步到远程主机目录,rsync 的 ssh 模式,需要使用 key 来认证;
default.rsyncssh
# 监控的、同步的源目录,使用绝对路径;
source
# 定义目标地址,对应不同的模式有几种写法:
target
# 本地目录同步,可用于 direct 和 rsync 模式;
/tmp/dest
# 同步到远程服务器目录,可用于 rsync 和 rsyncssh 模式;
172.29.88.223:/tmp/dest
# 同步到开启 rsyncd 守护进程的远程服务器目录,用于 rsync 模式;
172.29.88.223::module
# 为了保持 target 与 source 完全同步,lsyncd 默认会 delete = true 来允许同步删除;
delete
# 这是一个优化选项,当 init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是 true;
init
# 等待 rsync 同步延时时间,默认 15 秒。也就是 15s 内监控目录下发生的改动,会累积到一次 rsync 同步,避免过于频繁的同步;
delay
# 排除选项,后面指定排除的列表文件,如 excludeFrom = "/etc/lsyncd.exclude" 如果是简单的排除,可以使用 exclude = LIST。这里的排除规则写法与原生 rsync 有点不同,更为简单;监控路径里的任何部分匹配到一个文本,都会被排除,例如 /bin/foo/bar 可以匹配规则 foo;
excludeFrom
# 如果规则以斜线 / 开头,则从头开始要匹配全部
# 如果规则以 / 结尾,则要匹配监控路径的末尾
# ? 匹配任何字符,但不包括 /
# * 匹配 0 或多个字符,但不包括 /
# ** 匹配 0 或多个字符,可以是 /
rsync
{
# perms 默认保留文件权限。
perms
# 指定 rsync 二进制文件位置
binary
# 是否打包传输
archive
# 压缩传输默认为 true。在带宽与 cpu 负载之间权衡,本地目录同步可以考虑把它设为 false
compress = true,
# 输出过程信息
verbose = true,
# rsync 密码文件
password_file = "/etc/rsync.passwd",
# bwlimit 限速,单位 kb/s,与 rsync 相同
_extra = {"--bwlimit=200"}
}
}
当有多个需要监控的目录时可以配置多个
sync
块。
使用
下面我在
10.0.1.201
主机开启一个 rsyncd 守护进程服务,关于 rsyncd 守护进程配置可参考「rsyncd 守护进程模式」,监听本机的/backup
目录。
1、配置 lsyncd 服务如下:
$ vim /etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 8,
}
sync {
default.rsync,
source = "/backup",
target = "rsync_backup@10.0.1.201::backup",
delete = true,
exclude = { ".*" },
delay = 1,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file = "/etc/rsync.passwd",
_extra = {"--bwlimit=200"}
}
}
2、创建密码文件并修改权限:
$ echo 1 > /etc/rsync.passwd
$ chown 600 /etc/rsync.passwd
3、启动服务:
$ systemctl start lsyncd.service
4、在本机 /backup
目录测试创建文件:
$ touch {1,2,3}.txt
5、在提供 rsyncd 服务的主机上查看对应模块映射目录:
$ ls
1.txt 2.txt 3.txt
同步成功~
评论区