news 2026/5/12 18:10:09

使用lsyncd本地目录实时备份

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用lsyncd本地目录实时备份

使用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}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 8:58:29

AI测试学习记录

一:模型验证留出法(适用于大量数据):70%训练数据,15%验证数据,15%测试数据,然后计算平均值和标准差K折交叉验证(适用于数据量小,需要稳健评估的场景)&#xf…

作者头像 李华
网站建设 2026/5/11 8:58:29

Inventor 二次开发从入门到精通(8)

6.4 尺寸标注与注释的自动化尺寸标注是工程图的关键,API 支持创建尺寸标注、形位公差、文本注释等。6.4.1 创建尺寸标注尺寸标注包括模型尺寸、草图尺寸、自定义尺寸等,可通过Dimensions集合创建:// 创建模型尺寸标注(从零件模型关…

作者头像 李华
网站建设 2026/5/11 8:59:20

PaddlePaddle视觉套件PaddleDetection安装包获取与diskinfo下载官网替代方案

PaddlePaddle视觉套件PaddleDetection安装与依赖问题的高效解决方案 在工业质检、智能安防和自动化巡检等实际场景中,开发者常常面临一个看似简单却令人头疼的问题:如何快速、稳定地搭建基于 PaddlePaddle 的计算机视觉开发环境?尽管百度飞桨…

作者头像 李华
网站建设 2026/5/11 8:03:31

7.抽象数据类型

7.抽象数据类型栈由可对它执行的操作来描述:1、可创建空栈;2、可将数据项添加到栈顶;3、可从栈顶删除数据项;4、可查看栈是否填满;5、可查看栈是否为空。将上述描述转换为一个类声明,公有成员函数提供了表示…

作者头像 李华
网站建设 2026/5/11 9:56:13

Vue3 - Diff算法理解

Vue 版本:以 vue3.x 代码为参考,主要梳理 diff 算法的核心流程。 Vue 3 的 diff 算法借鉴了纯文本 diff 算法的思想,参考了 viv 和 inferno 框架的实现,只对需要处理的节点本身进行 diff 操作。通过预处理和最长递增子序列&#x…

作者头像 李华
网站建设 2026/5/11 9:56:24

3个颠覆性突破让开源CMS成为中小企业数字化转型的秘密武器

在数字化转型浪潮中,中小企业的IT预算往往捉襟见肘,而Directus作为一款完全开源的内容管理平台,正以零许可成本和高度灵活的技术架构,为预算有限的企业提供了一条全新的数字化路径。这款基于Node.js构建的现代化CMS,不…

作者头像 李华