lsyncd 是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。解决了 inotify + rsync海量文件同步带来的文件频繁发送文件列表的问题 —— 通过时间延迟或累计触发事件次数实现。
相对于通过rsync+inotify实现文件实时同步,lsyncd在设置上的优势是只需配置本地服务器,无需配置远程服务器。
如需了解rsync+inotify实现文件实时同步的方式,可参考 【玩转服务器】CentOS通过rsync+inotify实现文件实时同步
本文主要介绍在CentOS操作系统中以lsyncd方式实现文件同步的步骤。
本地服务器192.168.1.1,配置 lsyncd 服务
远程服务器192.168.1.2,无需配置
远程服务器192.168.1.3,无需配置(远程服务器可设置多台)
在本地服务器指定目录文件发生变化时,实时同步至远程服务器。此场景可用于文件的实时备份或主从同步。
yum install lsyncd -y
vim /etc/lsyncd.conf
-- 全局设置
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
statusInterval = 10
}
-- 定义同步参数,多台服务器可定义多个sync模块
sync {
default.rsyncssh,
-- 同步的源目录,使用绝对路径
source = "/data",
-- 远程服务器IP
host="192.168.1.2",
-- 远程服务器目录
targetdir = "/backup",
-- 指定排除的文件列表
excludeFrom = "/etc/lsyncd_exclude.lst",
-- 累计事件,等待rsync同步延时时间,默认15秒,最大累计到1000个不可合并的事件
-- 合并事件是指两次修改了同一文件,最后只同步最新的文件
-- 默认15秒内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步
delay = 15,
rsync = {
archive = true,
compress = true,
verbose = true,
},
}
vim /etc/lsyncd_exclude.lst
以下内容表示不同步的文件类型或目录,可根据实际情况进行修改
*.log
runtime/
# 生成密钥
ssh-keygen
# 拷贝公钥至远程服务器
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.2
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.3
此处为设置Linux服务器SSH免密登录,具体操作步骤和知识点可参考 【玩转服务器】Linux服务器SSH远程免密登录
# 检测
lsyncd -nodaemon /etc/lsyncd.conf
# 启动
systemctl start lsyncd.service
mkdir /data/test1
touch /data/1.txt
ls /backup/
# 可能会返回目录test1,文件1.txt
# 如未显示可能未达到默认最小同步时间,默认为15秒
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。