lsyncd实现了触发式或定时通知事件,可以近实时的同步文件(封装了rsync),github地址:https://github.com/axkibe/lsyncd
安装lsyncd
yum install lua lua-devel
# Ubuntu sudo apt install lsyncd # CentOS sudo yum install epel-release sudo yum install lsyncd # 编译安装 cmake . make sudo make install
安装成功后,你可以在/usr/share/doc/lsyncd-2.2.2/examples/
看到Lsyncd配置使用示例。
ls /usr/share/doc/lsyncd-2.2.2/examples/ lalarm.lua lbash.lua lecho.lua lftp.lua lgforce.lua limagemagic.lua lpostcmd.lua lrsync.lua lrsyncssh.lua lsayirc.lua
配置lsyncd
打开Lsyncd的配置/etc/lsyncd.conf
,主要包括两个部分:一是设置,另一个是同步 。settings
里面是全局设置,–
开头表示注释,代码如下:
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
-- maxProcesses = 15
}
-- default.rsync模式需要在远程服务器启动rsync服务
sync {
default.rsync,
source = "/data/wwwroot",
target = "rsyncsunk@192.168.1.10::wwwroot",
delete = true,
delay = 10,
-- 排除
exclude={
".txt"
},
rsync = {
binary = "/usr/bin/rsync",
-- 归档
archive = true,
--压缩
compress = true,
-- 增量
verbose = true,
-- 属主
owner = true,
-- 权限
perms = true,
-- rsync同步密钥文件
password_file = "/etc/rsyncd.pwd",
}
}
-- default.rsyncssh模式需要两台服务器之间建立SSH信任
sync {
default.rsyncssh,
source = "/data/wwwroot",
host = "192.168.1.20",
targetdir = "/data/wwwroot",
delete = true,
delay = 10,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
owner = true,
perms = true,
}
}
下面是几个常用选项说明:
logfile
定义日志文件stausFile
定义状态文件nodaemon=true
表示不启用守护模式,默认statusInterval
将lsyncd的状态写入上面的statusFile
的间隔,默认10秒inotifyMode
指定inotify监控的事件,默认是CloseWrite
,还可以是Modify
或CloseWrite or Modify
maxProcesses
同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8
,则最大能看到有8个rysnc进程maxDelays
累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到
sync里面是定义同步参数,可以继续使用maxDelays来重写settings的全局变量。一般第一个参数指定lsyncd以什么模式运行:rsync、rsyncssh、direct三种模式:
default.rsync
:本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程;default.direct
:本地目录间同步,使用cp、rm等命令完成差异文件备份;default.rsyncssh
:同步到远程主机目录,rsync的ssh模式,需要使用key来认证。
source同步的源目录,使用绝对路径。target 定义目的地址.对应不同的模式有几种写法:
/tmp/dest
:本地目录同步,可用于direct和rsync模式172.29.88.223:/tmp/dest
:同步到远程服务器目录,可用于rsync和rsyncssh模式172.29.88.223::module
:同步到远程服务器目录,用于rsync模式
其它优化选项有:
excludeFrom
排除选项,后面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude"
,如果是简单的排除,可以使用exclude = LIST
。这里的排除规则写法与原生rsync有点不同,更为简单:
- 监控路径里的任何部分匹配到一个文本,都会被排除,例如
/bin/foo/bar
可以匹配规则foo - 如果规则以斜线
/
开头,则从头开始要匹配全部 - 如果规则以
/
结尾,则要匹配监控路径的末尾 ?
匹配任何字符,但不包括/
*
匹配0或多个字符,但不包括/
**
匹配0或多个字符,可以是/
rsync配置选项有:
bwlimit
限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出)compress
压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false
perms
默认保留文件权限。- 其它还有rsyncssh模式独有的配置项,如
host
、targetdir
、rsync_path
、password_file
lsyncd.conf
可以有多个sync,各自的source
,各自的target
,各自的模式,互不影响。
优化/etc/sysctl.conf
,添加如下参数:
fs.inotify.max_user_watches = 10000000
这个参数是调整lsyncd最大监控文件数
运行lsyncd
首先创建日志文件,用于跟踪。
mkdir /var/log/lsyncd touch /var/log/lsyncd/lsyncd.{log,status}
启动相关命令
systemctl start lsyncd systemctl stop lsyncd systemctl restart lsyncd systemctl status lsyncd systemctl enable lsyncd systemctl disable lsyncd
THE END
暂无评论内容