https://github.com/lsyncd/lsyncd
Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。
我认为它最令人称道的特性是,完美解决了 inotify + rsync海量文件同步带来的文件频繁发送文件列表的问题 —— 通过时间延迟或累计触发事件次数实现。
另外,它的配置方式很简单,lua本身就是一种配置语言,可读性非常强。
lsyncd也有多种工作模式可以选择,本地目录cp,本地目录rsync,远程目录rsyncssh。
实现简单高效的本地目录同步备份(网络存储挂载也当作本地目录),一个命令搞定。
lsyncd安装
[root@nfs-31 ~]#yum install lsyncd -y
修改配置文件
1、只监控一个目录
[root@nfs-31 ~]#cat /etc/lsyncd.conf
settings {
logfile ="/var/log/lsyncd/lsyncd.log",
statusFile ="/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 8,
}
sync {
default.rsync,
source = "/nfs-data",
target = "rsync_backup@172.16.1.41::data",
delete= true,
exclude = {".*"},
delay=1,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file="/etc/rsync.pwd",
_extra={"--bwlimit=200"}
}
}
2、监控多个目录
[root@nfs-31 ~]#cat /etc/lsyncd.conf
settings {
logfile ="/var/log/lsyncd/lsyncd.log",
statusFile ="/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 8,
}
sync {
default.rsync,
source = "/nfs-data",
target = "rsync_backup@172.16.1.41::data",
delete= true,
exclude = {".*"},
delay=1,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file="/etc/rsync.pwd",
_extra={"--bwlimit=200"}
}
}
sync {
default.rsync,
source = "/nfs-nginx",
target = "rsync_backup@172.16.1.41::backup",
delete= true,
exclude = {".*"},
delay=1,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file="/etc/rsync.pwd",
_extra={"--bwlimit=200"}
}
}
配置文件详解
lsyncd.conf配置选项说明
settings
里面是全局设置,--开头表示注释,下面是几个常用选项说明:
logfile 定义日志文件
stausFile 定义状态文件
nodaemon=true 表示不启用守护模式,默认
statusInterval 将lsyncd的状态写入上面的statusFile的间隔,默认10秒
inotifyMode 指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite or Modify
maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,则最大能看到有8个rysnc进程
sync
里面是定义同步参数
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模式
rsync
bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出)
compress 压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false
perms 默认保留文件权限。
password_file 指定密码文件
启动lsyncd服务
[root@nfs-31 ~]#systemctl status lsyncd
● lsyncd.service - Live Syncing (Mirror) Daemon
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2023-07-26 10:37:44 CST; 8s ago
Main PID: 10669 (lsyncd)
CGroup: /system.slice/lsyncd.service
└─10669 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf
Jul 26 10:37:45 nfs-31 lsyncd[10669]: sending incremental file list
Jul 26 10:37:45 nfs-31 lsyncd[10669]: deleting 1.txt
Jul 26 10:37:45 nfs-31 lsyncd[10669]: ./
Jul 26 10:37:45 nfs-31 lsyncd[10669]: access.log
Jul 26 10:37:45 nfs-31 lsyncd[10669]: index.html
Jul 26 10:37:45 nfs-31 lsyncd[10669]: liyunlong.jpg
Jul 26 10:37:45 nfs-31 lsyncd[10669]: sent 91 bytes received 21 bytes 74.67 bytes/sec
Jul 26 10:37:45 nfs-31 lsyncd[10669]: total size is 0 speedup is 0.00
Jul 26 10:37:45 nfs-31 lsyncd[10669]: sent 56,400 bytes received 93 bytes 37,662.00 bytes/sec
Jul 26 10:37:45 nfs-31 lsyncd[10669]: total size is 57,849 speedup is 1.02
注意点
1、检查你的实时同步服务有没有启动,注意不能三个同时存在,否则会有坑
Inotify-wait
sersync
lsyncd
2、你的配置文件要注意,客户端需要备份的文件名,指定的密码文件,你远程连接的备份服务器主机名以及备份文件名等
3、指定的这些文件的文件权限要注意,否则也会出现不同的报错