lsyncd介绍
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,无需配置(远程服务器可设置多台)
在本地服务器指定目录文件发生变化时,实时同步至远程服务器。此场景可用于文件的实时备份或主从同步。
具体实践(配置均在本地服务器上操作)
1、安装lsyncd
代码语言:javascript复制yum install lsyncd -y
2、配置lsyncd.conf
代码语言:javascript复制vim /etc/lsyncd.conf
3、输入以下内容
代码语言:javascript复制-- 全局设置
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,
},
}
4、指定不同步的文件列表
代码语言:javascript复制vim /etc/lsyncd_exclude.lst
以下内容表示不同步的文件类型或目录,可根据实际情况进行修改
代码语言:javascript复制*.log
runtime/
5、生成ssh证书,并将公钥拷贝至远程服务器
代码语言:javascript复制# 生成密钥
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远程免密登录
6、检测配置文件并启动
代码语言:javascript复制# 检测
lsyncd -nodaemon /etc/lsyncd.conf
# 启动
systemctl start lsyncd.service
测试同步效果
1、在本地服务器运行命令
代码语言:javascript复制mkdir /data/test1
touch /data/1.txt
2、在远程服务器查看同步情况
代码语言:javascript复制ls /backup/
# 可能会返回目录test1,文件1.txt
# 如未显示可能未达到默认最小同步时间,默认为15秒