使用lsyncd本地目录实时备份
2026/6/10 7:28:22 网站建设 项目流程

使用lsyncd本地目录实时备份

    • lsyncd简介
    • 安装lsyncd
    • lsyncd配置文件
      • 设置ssh免密
      • lsyncd同步配置
    • lsyncd.conf配置选项说明
      • settings
      • sync
      • rsync
    • 启动lsyncd
    • lsyncd.conf其他模式示例

lsyncd简介

Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具!实现的功能是,本地目录source实时同步到另一个目录target,而在source下有大量的文件,并且有部分目录和临时文件不需要同步。

原则上来讲:数据从哪来,Lysncd就部署在哪!"

角色数据流向作用相互SSH免密hostname软件包数据同步路径
源服务器 (Push端)数据的起点监控与推送yesfile_serverrsync + lsyncd/tmp/sersync_result/
目标服务器 (Pull端)数据的终点接收和存储yesecsrsync/tmp/sersync_result/

安装lsyncd

安装lsyncd极为简单,一条yum命令即可!

# 因为这个rpm包在epel源中,所以需要先安装epel源yuminstallepel-release -y# 安装lsyncdyuminstalllsyncd -y

lsyncd配置文件

参考博文:https://www.cnblogs.com/lvzhenjiang/p/14198841.html

https://www.cnblogs.com/lvzhenjiang/p/14411173.html

vim/etc/lsyncd.conf

设置ssh免密

ssh-copy-id${源机器}ssh-copy-id${目的地机器}

lsyncd同步配置

-- 配置全局设置settings{-- 指定日志文件路径,用于记录同步过程中的日志信息logfile="/var/log/lsyncd/lsyncd.log",-- 指定状态文件路径,用于记录lsyncd的运行状态statusFile="/var/log/lsyncd/lsyncd.status",-- 设置inotify监控模式为CloseWrite,即文件关闭写入时触发同步inotifyMode="CloseWrite",-- 设置最大并发进程数为7maxProcesses=7,-- 注释掉的选项:设置为true时以非守护进程模式运行-- nodaemon =true,}-- 定义同步任务配置sync{-- 使用默认的rsyncssh同步模式(通过SSH隧道使用rsync)default.rsyncssh,-- 源目录:需要同步的本地目录路径source="/tmp/src",-- 目的主机:远程服务器IP地址host="192.168.2.16",-- 远程目录:在目标主机上的同步目录路径targetdir="/root/remote",-- 启用删除功能,当源目录删除文件时,目标目录也会删除对应文件delete=true,-- 设置同步延迟为0秒,即实时同步delay=0,-- 注释掉的选项:指定排除规则文件路径-- excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",-- rsync相关配置参数rsync={-- 指定rsync可执行文件路径binary="/usr/bin/rsync",-- 启用归档模式,保持文件属性、时间戳等信息archive=true,-- 启用压缩传输,减少网络传输数据量compress=true,-- 启用详细输出模式verbose=true,-- 保持文件所有者信息owner=true,-- 保持文件权限信息perms=true,-- rsync额外参数:限制带宽为2000KB/s-- _extra = { "--bwlimit=2000" },},-- SSH相关配置参数ssh={-- 设置SSH连接端口为22port=22}}

到这启动 lsycnd 就可以完成实时同步了,默认的许多参数可以满足绝大部分需求,非常简单。


lsyncd.conf配置选项说明


settings

里面是全局设置,--开头表示注释,下面是几个常用选项说明:

配置项说明默认值 / 补充说明
logfile定义 lsyncd 的日志文件路径无(需显式指定)
statusFile定义 lsyncd 的状态文件路径无(需显式指定)
nodaemon是否以非守护进程模式运行true(即默认不启用守护模式)
statusInterval将 lsyncd 状态写入 statusFile 的时间间隔(秒)10 秒
inotifyMode指定 inotify 监控的文件事件类型CloseWrite;可选值:Modify、CloseWrite or Modify
maxProcesses同时运行的最大 rsync 同步进程数无固定默认值(通常由用户根据系统资源设定)
maxDelays累计监控到多少个事件后立即触发同步(即使未达到 delay 设定的时间)无固定默认值(常与 delay 配合使用)

sync

定义一个或多个同步任务(可配置多个sync块)。

里面是定义同步参数,可以继续使用maxDelays来重写settings的全局变量。一般第一个参数指定lsyncd以什么模式运行:

  • rsyncrsyncsshdirect三种模式:
同步模式(sync kind)说明适用场景认证/依赖要求
default.rsyncssh使用rsync通过 SSH 协议同步到远程主机目录跨主机安全同步(常用在异地备份、部署等)必须配置 SSH 免密登录(如密钥认证)
default.rsync使用rsync命令进行同步;支持本地目录同步,也可通过 SSH 或 rsync daemon 实现远程同步本地同步,或需要兼容远程 rsync(SSH/daemon)的场景若远程使用 SSH,需配置免密登录或密钥
default.direct使用原生命令如cprmmv等直接操作文件,实现本地差异同步仅限本地目录间快速同步,对性能要求高且无需网络传输无(纯本地操作)
配置项说明示例 / 选项说明
default.rsyncdefault.directdefault.rsyncssh指定同步模式: •rsync:本地或远程(SSH/rsyncd) •direct:本地cp/rmrsyncssh:强制通过 SSH 远程同步三选一
source被监控的源目录(必须为绝对路径)/data/www/
target同步目标路径: • 本地:/backup/• 远程 rsyncd:rsyncuser@192.168.99.237::backuprsyncuser:远程用户192.168.99.237:备机 IP::backup:rsync 模块名注意模块名和服务端配置一致
init是否在启动时全量同步一次源目录true(默认);false表示仅同步启动后变更的文件
delay事件触发后延迟多少秒再执行同步(防频繁触发)通常设为1(秒)
excludeFrom排除不需要同步的文件(支持通配符或正则)exclude = { "*.swp", "*.log" }
delete控制是否删除目标端源端已不存在的文件-true:始终同步删除(默认) -false:从不删除 -'startup':仅启动时删除 -'running':仅运行时删除(启动时不删)
  • excludeFrom排除选项,后面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude",如果是简单的排除,可以使用exclude = LIST。这里的排除规则写法与原生rsync有点不同,更为简单:
    • 监控路径里的任何部分匹配到一个文本,都会被排除,例如/bin/foo/bar可以匹配规则foo
    • 如果规则以斜线/开头,则从头开始要匹配全部
    • 如果规则以/结尾,则要匹配监控路径的末尾
    • ?匹配任何字符,但不包括/
    • *匹配0或多个字符,但不包括/
    • **匹配0或多个字符,可以是/

rsync

(提示一下,deleteexclude本来都是rsync的选项,上面是配置在sync中的,我想这样做的原因是为了减少rsync的开销)

  • bwlimit限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出);
  • compress压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false
  • perms默认保留文件权限;
  • 其它rsync的选项;

其它还有rsyncssh模式独有的配置项,如hosttargetdirrsync_pathpassword_file,见后文示例。rsyncOps={"-avz","--delete"}这样的写法在2.1.*版本已经不支持。

lsyncd.conf可以有多个sync,各自的source,各自的target,各自的模式,互不影响。


启动lsyncd

使用命令加载配置文件,启动守护进程,自动同步目录操作。

# 自行查看source target是否同步成功systemctlenable--now lsyncd# 确保状态是active (running)systemctl status lsyncd -l

lsyncd.conf其他模式示例

以下配置本人都已经过验证可行,必须根据实际需要裁剪配置:

settings{logfile="/var/log/lsyncd/lsyncd.log", statusFile="/var/log/lsyncd/lsyncd.status", inotifyMode="CloseWrite", maxProcesses=8,}# I. 本地目录同步directcp/rm/mv 适用500+万文件变动不大sync{default.direct,source="/tmp/src", target="/tmp/dest", delay=1maxProcesses=1}# II. 本地目录同步rsync模式rsyncsync{default.rsync,source="/tmp/src", target="/tmp/dest1", excludeFrom="/etc/rsyncd.d/rsync_exclude.lst",rsync={binary="/usr/bin/rsync", archive=true, compress=true, bwlimit=2000}}# III. 远程目录同步rsync模式 + rsyncd daemonsync{default.rsync,source="/tmp/src", target="syncuser@10.4.7.10::module1",delete="running", exclude={".*",".tmp"}, delay=30, init=false,rsync={binary="/usr/bin/rsync", archive=true, compress=true, verbose=true, password_file="/etc/rsyncd.d/rsync.pwd", _extra={"--bwlimit=200"}}}# IV. 远程目录同步rsync模式 + ssh shellsync{default.rsync,source="/tmp/src", target="10.4.7.10:/tmp/dest",# target = "root@10.4.7.10:/remote/dest",# 上面target注意如果是普通用户必须拥有写权限maxDelays=5, delay=30,# init = true,rsync={binary="/usr/bin/rsync", archive=true, compress=true, bwlimit=2000# rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"# 如果要指定其它端口请用上面的rsh}}# V. 远程目录同步rsync模式 + rsyncssh效果与上面相同sync{default.rsyncssh,source="/tmp/src2",host="10.4.7.10", targetdir="/remote/dir", excludeFrom="/etc/rsyncd.d/rsync_exclude.lst",# maxDelays = 5,delay=0,# init = false,rsync={binary="/usr/bin/rsync", archive=true, compress=true, verbose=true, _extra={"--bwlimit=2000"},},ssh={port=1234}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询