lsyncd 实时同步(镜像)守护程序

官方文档
https://axkibe.github.io/lsyncd/
https://github.com/axkibe/lsyncd

1.什么是lsyncd

lsyncd是一个文件系统事件监控器,当文件发生变化是会触发lsyncd向目标地址传送变化的数据。
PS:官方解释
Lsyncd使用文件系统事件接口(inotify或fsevents)来监视对本地文件和目录的更改。Lsyncd将这些事件整理几秒钟,然后生成一个或多个进程以将更改同步到远程文件系统。默认同步方法是rsync
Lsyncd是一种轻量级的实时镜像解决方案。Lsyncd相对容易安装,不需要新的文件系统或块设备。Lysncd不会妨碍本地文件系统性能

可以通过配置文件实现细粒度的自定义。自定义操作配置甚至可以从头开始编写,从shell脚本到用Lua语言编写的代码

2.为什么选择lsyncd

1.轻量级监控文件事件变化的应用程序
2.配置简单

3.安装

yum install epel-release yum install lsyncd 

4.配置lsyncd

4.1配置参数解释

settings { logfile    日志文件 pidfile    pid文件 nodaemon   表示不启用守护模式,默认 statusFile   运行状态文件 statusInterval   将lsyncd的状态写入上面的statusFile的间隔,默认10秒 inotifyMode     指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite or Modify maxProcesses    最大进程数 maxDelays     累计多少监控事件同步一次,即使delay时间未到也同步 } 

4.2sync的三种工作模式

4.2.1 default.rsync

rsync工作模式,监控文件系统的事件变化 当监控的目录文件事件达到触发值会调用rsync把变化的数据传送到目标目录
rsync命令模式

sync {  default.rsync,  source = /tmp/src,  target = 172.29.88.223:/tmp/dest,  maxDelays = 5,  delay = 30, -- init = true, rsync = {  binary = /usr/bin/rsync,  archive = true,  compress = true,  bwlimit = 2000  rsh = /usr/bin/ssh -p 22 -o StrictHostKeyChecking=no } } 

rsync daemon模式

sync {  default.rsync,  source = /tmp/src,  target = [email protected]::backup,  delete=running,  exclude = { .*, .tmp },  delay = 3,  init = false, rsync = {  binary = /usr/bin/rsync,  archive = true,  compress = true,  verbose = true,  password_file = /etc/rsync.pwd,  _extra = {--bwlimit=200} } } 
4.2.2 default.rsyncssh

rsync+ssh(mv)
监控文件系统事件 当文件系统事件被触发时会向目标传送变化的数据 但mv的命令会被ssh传送到目标服务器执行 并不会先删除再传送

sync {    default.rsyncssh,    source=/srcdir,    host=remotehost,    excludeFrom=/etc/lsyncd.exclude,    targetdir=/dstdir,    rsync = {      archive = true,      compress = false,      whole_file = false    },    ssh = {      port = 1234    } } 
4.2.3 default.direct

本地数据同步模式 数据同步速度要高于default.rsync 数据会在内核态完成同步 原理是调用 rm mv cp 命令来完成数据同步

settings {  logfile = /var/log/lsyncd/lsyncd.log,  statusFile = /var/log/lsyncd/lsyncd.status,  inotifyMode = CloseWrite,  maxProcesses = 8, } sync {     default.direct,     source  = /xxx/,     target  = /xxxxxx/,     excludeFrom = /etc/rsyncd.d/rsync_exclude.lst } 
4.2.4 delete的详解
delete	=	true       #在目标上删除源中没有的内容。在启动时以及在正常操作期间删除的内容 delete	=	false      #不会删除目标上的任何文件。不在启动时也不在正常操作上 delete	=	'startup'  # Lsyncd将在启动时删除目标上的文件,但不会在正常操作时删除 delete	=	'running'  # Lsyncd在启动时不会删除目标上的文件,但会删除正常操作期间删除的文件