【玩转服务器】CentOS通过lsyncd实现文件同步

2023-11-28 09:51:08 浏览数 (2)

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秒

0 人点赞