1 实现原理
1)部署rsync守护进程,实现数据传输
2)部署inotify服务,实现目录中数据变化监控
3)将rsync和inotify建立联系,将变化的数据进行实时备份传输
2 服务部署过程
2.1 部署rsync守护进程
https://www.jianshu.com/p/1e6dac48fa33
服务端配置操作
客户端配置操作
2.2 部署inotify监控服务
2.2.1 安装软件
yum -y install inotify-tools
2.2.2 inotifywait命令
inotifywait [参数] 文件...
常见参数:
-m monitor 一直监控数据的变化
-r recursive 递归监控
-q quiet 尽量减少输出信息
--format <fmt> 指定输出信息的格式
--timefmt 指定输出的时间信息格式
-e event 指定监控的事件信息
常监控的事件:create 创建、delete 删除、moved_to 移入、close_write 修改
常用的配置
[root@nfs01]$ inotifywait -mrq --timefmt "%F" --format "%T %w %f 事件信息:%e" -e create /data
2020-12-15 /data/ f3.txt 事件信息:CREATE
2.3 部署lsyncd同步服务
2.3.1 lsyncd简介
lsyncd是lua语言封装了inotify和rsync的工具,用inotify的触发机制,通过rsync去差异同步,达到实时效果。
2.3.2 安装软件
yum -y install lsyncd
2.3.3 配置文件
lsyncd的配置主要分两部分:全局配置和局部配置
示例:
[root@nfs01 data]# cat /tmp/lsyncd_01.conf
settings {
pidfile = "/var/run/lsyncd.pid",
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
insist = true,
-- nodaemon = true,
}
sync {
default.rsync,
source = "/data",
target = "rsync_backup@172.16.1.41::backup",
delete = "running",
rsync = {
archive = true,
password_file = "/etc/rsync.password",
compress = true,
}
}
2.3.3.1 全局配置
由settings{ }包括的内容属于全局配置,例如
settings {
pidfile = "/var/run/lsyncd.pid",
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
insist = true,
-- nodaemon = true,
}
可以设定的参数如下:

1. pidfile
文件记录lsyncd当前进程id值,如果没有pid文件,那么则可以启动多个lsyncd进程,这会导致多个lsyncd进程同时运行造成同步的数据混乱。如果设置了pid文件,同时只能启动一个lsyncd进程。避免多个lsyncd进程导致同步混乱的情况,pid文件一定要设置。
2. inotifyMode
指定lsyncd监控的事件,其值有:
CloseWrite
, Modify
, CloseWrite or Modify
。默认是
CloseWrite
,CloseWrite
事件并不是单一事件而是包含了很多inotify事件,如下:
CloseWrite包含了以下inotify事件:
IN_ATTRIB 文件属性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE 可写文件被关闭
IN_CREATE 创建新文件
IN_DELETE 文件/目录已在监控目录中删除
IN_DELETE_SELF 监控的项目本身已删除
IN_MOVED_FROM 文件被移出监控目录,如 mv
IN_MOVED_TO 文件被移动到监控目录,如 mv、cp
IN_DONT_FOLLOW 不追踪符号链接的真实路径
IN_ONLYDIR; 仅监视目录
Modify是在CloseWrite的基础上增加了IN_MODIFY事件,并删除了IN_CLOSE_WRITE事件
IN_MODIFY 文件已被修改
CloseWrite or Modify 是在CloseWrite的基础上增加了IN_MODIFY事件
3. Insist
默认情况下,当启动lsyncd失败时,Lsyncd会结束允许并显示一条错误消息。开启了容错模式以后,lsyncd并不会因为某个配置的错误导致启动失败,而是记录错误日志并忽略错误配置继续运行。
4. maxProcesses
lsyncd会产生一个子进程去运行sync任务。多个sync的时候,lsyncd会产生多个子进程并发运行sync任务,但最多不会超过maxProcesses的值。
5. maxDelays
累计到多少所监控的事件激活一次同步,即使后面的sync配置的delay延迟时间还未到
2.3.3.2 局部配置
sync{ }是lsyncd执行具体的同步配置,每个sync配置都是独立的,可以同时执行多个sync配置。下面是一个例子
sync {
default.rsync,
source = "/data",
target = "rsync_backup@172.16.1.41::backup",
delete = "running",
rsync = {
archive = true,
password_file = "/etc/rsync.password",
compress = true,
}
常用参数如下:
1. rsync、rsyncssh、direct三种模式
- default.rsync :
使用rsync进行本地目录间同步,或使用rsync的ssh形式进行远程同步,或使用rsync的daemon方式进行远程同步(需要目标主机也安装rsync) - default.direct :
本地目录间同步,使用cp、rm等命令完成差异文件备份 - default.rsyncssh :
同步到远程主机目录,使用rsync的ssh模式,需要先配置ssh免密登录(密钥登录)
2. source
同步的源目录,使用绝对路径。
3. target
目标地址,仅用于direct, rsync模式, 对应不同的模式有几种写法例如
1. /tmp/dest
本地目录同步 root@172.16.1.31:/opt/
使用远程shell(如rsh、ssh) 同步到远程服务器目录,
root@可以省略,默认是root用户 。用于rsync模式。
2. root@172.29.88.223::var/back
使用rsync的daemon模式同步到远程服务器目录,目标主机也需要安装rsync。
var/back等于/var/back,root@可以省略,默认是root用户。
用于rsync模式。
4. targetdir
目标地址,仅用于rsyncssh模式,例如:/tmp/dest
5. init
当init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是true
6. delay
等待rsync同步延时时间,默认15秒(最大累计到1000个不可合并的事件,settings中的maxDelays,默认1000)。也就是15s内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步。(可合并的意思是,15s内两次修改了同一文件,最后只同步最新的文件)
7. excludeFrom
从文件加载排除规则,如excludeFrom = "/etc/lsyncd.exclude"
8. exclude
从字符串加载排除规则,如exclude = { '*.bak' , '*.tmp' }
这里的规则写法与原生rsync有点不同,更为简单:
如果规则以斜线/开头,则从头开始要匹配全部
如果规则以/结尾,则要匹配监控路径的末尾
?匹配任何字符,但不包括/
*匹配0或多个字符,但不包括/
**匹配0或多个字符,可以是/
9. delete
为了保持target与souce完全同步,Lsyncd默认会delete = true来允许同步删除。它除了false,还有startup、running值。
true
Lsyncd在启动时会删除目标上的文件,正常操作过程中删除的文件也会删除。
false
Lsyncd不会删除目标上的任何文件。既不在启动时也不在正常运行时。(但是可能会覆盖)
startup
Lsyncd在启动时会删除目标上的文件,但在正常运行时不会删除。
running
Lsyncd在启动时不会删除目标上的文件,但会删除在正常操作过程中删除的文件。
10. rsync
配置rsync的命令行参数。仅适用于,default.rsyncssh和default.rsync模式。
下图是所有rsync模式的参数详解:

11. host
远程主机地址,例如: 192.168.1.1 或者 zhai@192.168.8.1.1
12. ssh
配置ssh参数,例如端口:port=1234
2.3.3.3 启动守护进程
lsyncd [OPTIONS] [CONFIG-FILE]
lsyncd /tmp/lsyncd_01.conf
3 实时同步服务部署总结
1)部署rsyncd守护进程及客户端
2)安装inotify
3)部署lsyncd守护进程
网友评论