使用 Rsync + Lsyncd 实现 CentOS 7 实时文件同步
文章目录
- 🌀使用 Rsync + Lsyncd 实现 CentOS 7 实时文件同步
- 前言
- 介绍
- 架构图
- 🧱系统环境
- 🔧Rsync配置(两台都需安装)
- 关闭SELinux(两台都需)
- 📦配置目标端(client)为 Rsync 服务端
- 创建用户和目录
- 配置 /etc/rsyncd.conf
- rsyncd.conf 配置文件讲解
- 创建认证文件
- 启动并设置开机自启
- 在这里插入图片描述
- 🚀配置源端(server)安装并使用 Lsyncd 实现实时同步
- 安装 lsyncd
- 创建用户、目录及认证文件
- 测试 Rsync 是否能正常使用
- 参数解释
- 作用总结
- ⚙️配置 Lsyncd 实现实时监听同步
- 配置 /etc/lsyncd.conf
- lsyncd.conf配置讲解
- 全局配置
- 同步设置
- rsync 配置
- 启动并设置 Lsyncd 自启动
- 🧪测试同步效果
- 📝总结
- 📚推荐扩展
🌀使用 Rsync + Lsyncd 实现 CentOS 7 实时文件同步
在日常运维中,我们经常遇到需要将一台服务器上的数据实时同步到另一台服务器的场景,比如配置文件同步、数据热备、静态资源同步等。本文将基于以下环境,通过 Rsync + Lsyncd 来实现文件的实时同步。
前言
在分布式系统中,数据同步是一个重要的需求,尤其是当我们希望将两台服务器的数据保持一致时。rsync 和 lsyncd 是两种常见的数据同步工具,它们能高效地处理文件同步和实时数据同步。本文将通过在两台 CentOS 7.9 服务器上配置 rsync 和 lsyncd,展示如何进行数据同步的操作和配置。
介绍
- rsync:是一款用于远程和本地文件同步的工具,支持增量传输,能有效减少网络带宽的使用。它通常用于备份和镜像操作。
- lsyncd:是一个基于
rsync的实时同步工具,它利用inotify机制监听文件变化,实时同步指定的目录。lsyncd配合rsync使用,能够实现近乎实时的数据同步。
本文将介绍如何通过 rsync 配合 lsyncd 实现文件同步,并通过配置文件和命令展示如何设置。
架构图
以下是本次同步任务的架构图:
+---------------------+ rsync/lsyncd +---------------------+
| |<--------------------->| |
| Server | | Client |
| 10.255.101.216 | | 10.255.101.217 |
| | | |
| - Data Directory | | - Data Directory |
| - Rsync + Lsyncd | | - Rsync Daemon |
| | | |
+---------------------+ +---------------------+
通过这种架构,server 上的文件会通过 rsync 和 lsyncd 实时同步到 client 上,确保两个节点的数据保持一致。
🧱系统环境
| 主机名 | IP地址 | 系统版本 | 备注 |
|---|---|---|---|
| server | 10.255.101.216 | CentOS Linux release 7.9.2009 (Core) | 源服务器 |
| client | 10.255.101.217 | CentOS Linux release 7.9.2009 (Core) | 目标服务器 |
- CPU:2核
- 内存:4G
- 存储:50G
- rsync:3.1.2
- lsyncd:2.2.2

🔧Rsync配置(两台都需安装)
yum -y install rsync
关闭SELinux(两台都需)
getenforce
# 如果输出不是 Disabled,则执行
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

📦配置目标端(client)为 Rsync 服务端
创建用户和目录
groupadd rsync
useradd -s /sbin/nologin -M -g rsync rsync # 组名在前,用户名在后
echo "test123456." | passwd --stdin rsync # 设置密码
mkdir /data/
chown -R rsync:rsync /data/

配置 /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors = yes
read only = false
list = false
auth users = rsync
secrets file = /etc/rsync.password[client-10.255.101.217]
comment = "test"
path = /data/

rsyncd.conf 配置文件讲解
下面对 rsyncd.conf 配置文件中的各个参数进行详细讲解:
- uid 和 gid:这两个参数设置
rsync守护进程运行时使用的用户和用户组。rsync进程将以该用户身份进行操作,这有助于限制进程的权限,避免过高的安全风险。此配置确保rsync进程不会以 root 权限运行,从而提高安全性。 - port:指定
rsync服务监听的端口。默认情况下,rsync使用 873 端口。可以根据需要修改端口号,但修改后需确保客户端连接时也指定相应的端口。 - fake super:启用此选项后,
rsync会模拟root用户的权限,允许传输文件时保持文件的所有者和权限信息。这对于普通用户的权限不足情况下,允许同步时模拟一些root权限以便传输文件。 - use chroot:此选项设置是否在 chroot 环境中运行
rsync服务。设置为no可以避免使用 chroot 环境,从而让rsync可以访问系统的其他部分,而不局限于一个虚拟文件系统。设置为yes会把rsync进程限制在指定的目录路径中,增加安全性。 - max connections:限制
rsync守护进程可以同时处理的最大连接数。此配置项的目的是防止过多的连接导致系统资源被占用过多。 - timeout:设置
rsync连接的超时时间(单位:秒)。如果在超时时间内没有数据传输,rsync会自动断开连接。 - pid file:指定存储
rsync守护进程 PID(进程 ID)的文件路径。这对于管理rsync服务非常有用,可以帮助查看进程是否正常运行,并进行相应的操作(如停止进程等)。 - lock file:此选项指定
rsync守护进程使用的锁文件。该文件防止多个rsync进程同时访问相同的资源,避免出现数据冲突或文件损坏。 - log file:指定
rsync守护进程日志文件的路径。所有的活动日志都会记录到这个文件中,可以用来检查同步操作的状态和排查问题。 - ignore errors:启用此选项后,
rsync将忽略在传输过程中遇到的错误,而不会立即停止同步过程。通常用在需要保证同步不间断的场景,但请注意,忽略错误可能会导致一些文件传输失败而未被及时发现。 - read only:设置为
false表示目标目录是可写的,允许进行数据同步时的修改。如果设置为true,则目标目录将变为只读,rsync只会将文件从源同步到目标,而不会修改目标文件。 - list:设置为
false时,客户端无法列出同步模块的内容。通过禁用列表功能,可以提高安全性,避免泄露不应公开的目录信息。 - auth users:指定允许进行身份验证的用户列表。在此配置中,
rsync只允许名为rsync的用户连接和同步数据。客户端连接时需要提供有效的用户名和密码。 - secrets file:指定存储
rsync用户密码的文件路径。该文件存储了与auth users配对的用户名和密码,用于身份验证。密码文件通常有严格的权限控制,确保只有rsync进程可以读取。 - [client-10.255.101.217]:这是一个同步模块的定义。在此模块下,
rsync会同步指定路径的文件。模块名称通常与目标机器的 IP 地址、主机名或其他标识符相关,以便在多个同步任务中进行区分。 - comment:为该同步模块添加注释,用于描述该模块的作用或用途。在此配置中,
comment被设置为"test",可以根据实际需求更改。 - path:指定
rsync服务需要同步的目录路径。在此配置中,rsync将同步client上的/data/目录。
创建认证文件
echo "rsync:test123456." > /etc/rsync.password
chmod 600 /etc/rsync.password

启动并设置开机自启
systemctl start rsyncd
systemctl enable rsyncd
验证运行状态:
systemctl status rsyncd
🚀配置源端(server)安装并使用 Lsyncd 实现实时同步
安装 lsyncd
yum install -y epel-release
yum install -y lsyncd
创建用户、目录及认证文件
groupadd rsync
useradd -s /sbin/nologin -M -g rsync rsync # 组名在前,用户名在后
echo "test123456." | passwd --stdin rsync # 设置密码
mkdir /data
touch /data/file{1..10}.txt # 创建模拟数据# 创建 rsync 密码文件
echo "test123456." > /etc/rsyncd.pwd
chmod 600 /etc/rsyncd.pwd


测试 Rsync 是否能正常使用
rsync -avz --password-file=/etc/rsyncd.pwd /data/ rsync@10.255.101.217::client-10.255.101.217

目标端 /data 目录应成功收到同步的文件。

参数解释
-
rsync:调用rsync工具进行文件同步。 -
-a:归档模式(archive mode)。这个选项会递归地同步文件,并保留文件的权限、符号链接、时间戳等信息。它等同于-rlptgoD,即:-r:递归同步目录。-l:复制符号链接为符号链接。-p:保留文件的权限信息。-t:保留文件的修改时间。-g:保留文件的组信息。-o:保留文件的所有者信息。-D:保留设备信息和特殊文件。
-
-v:详细模式(verbose)。使rsync输出详细的同步过程,包括每个文件的同步状态。此选项会显示文件传输的进度和文件列表,便于跟踪同步情况。 -
-z:压缩传输。在传输文件时启用压缩,以减少网络带宽的使用,尤其适用于较大的文件。 -
--password-file=/etc/rsyncd.pwd:指定存放密码的文件路径。rsync会从这个文件中读取与指定的rsync用户(本例中是rsync)相关的密码,而不是通过交互式的方式输入密码。该文件的权限应设置为仅rsync用户可读,以保障安全性。 -
/data/:指定本地源目录路径。这个路径表示需要同步的本地目录。rsync会将这个目录中的文件同步到远程主机的指定目录。 -
rsync@10.255.101.217::client-10.255.101.217:rsync:指定用于连接远程rsync服务的用户。10.255.101.217:远程rsync服务的 IP 地址。::client-10.255.101.217:指定rsync服务上的模块名。模块名是在rsyncd.conf配置文件中定义的,这里指向client-10.255.101.217模块,表示同步目标为rsync服务端的该模块所对应的目录。
作用总结
该命令会将本地 /data/ 目录中的文件递归同步到远程 rsync 服务器上,目标路径由 rsync 服务器上的 client-10.255.101.217 模块决定。同步过程中会保留文件的权限、时间戳等元数据,且传输数据时会进行压缩以节省带宽,同时通过指定的密码文件实现自动认证。
⚙️配置 Lsyncd 实现实时监听同步
配置 /etc/lsyncd.conf
settings {logfile = "/var/log/lsyncd/lsyncd.log",statusFile = "/var/log/lsyncd/lsyncd.status",inotifyMode = "CloseWrite or Modify",maxProcesses = 8,insist = true,
}sync {default.rsync,source = "/data/",target = "rsync@10.255.101.217::client-10.255.101.217",delete = false,exclude = { ".*", "logs/*.log" },delay = 1,init = false,rsync = {binary = "/usr/bin/rsync",archive = true,compress = true,verbose = true,password_file = "/etc/rsyncd.pwd",_extra = {"--bwlimit=200"}}
}

lsyncd.conf配置讲解
全局配置
-
logfile = "/var/log/lsyncd/lsyncd.log":指定日志文件的保存路径。所有同步操作的日志信息将写入此文件,便于后续查看和调试。 -
statusFile = "/var/log/lsyncd/lsyncd.status":指定状态文件的路径,记录当前同步的状态信息。 -
inotifyMode = "CloseWrite or Modify":inotify监听模式。lsyncd使用inotify监听文件系统事件来触发文件同步。这个配置指示lsyncd监听文件的修改操作(Modify)或者文件关闭写入操作(CloseWrite)。当文件发生这些事件时,lsyncd会启动同步任务。 -
maxProcesses = 8:最大同步进程数。lsyncd会使用多进程并行执行同步操作,这个选项限制了最大进程数为 8。 -
insist = true:该选项指定如果进程出现异常终止,是否继续运行。true表示lsyncd会尝试在出现异常后继续运行。
同步设置
-
default.rsync:表示同步方式是rsync,即使用rsync协议进行数据传输。 -
source = "/data/":本地同步的源目录,指向/data/目录。 -
target = "rsync@10.255.101.217::client-10.255.101.217":指定远程目标路径,使用rsync协议通过rsync用户连接到远程主机10.255.101.217,并同步到client-10.255.101.217模块。 -
delete = false:指定是否删除目标目录中不在源目录中的文件。false表示不同步删除操作,即目标目录中未在源目录的文件不会被删除。 -
exclude = { ".*", "logs/*.log" }:排除的文件和目录。这个选项指定了不需要同步的文件或目录:"*.*":排除所有以.开头的隐藏文件或目录。"logs/*.log":排除logs目录中的所有.log文件。
-
delay = 1:设置每次文件同步的延迟时间为 1 秒。这样可以避免文件频繁变化时导致的过度同步操作。 -
init = false:指定是否在lsyncd启动时立即执行同步。如果设置为false,则lsyncd启动时不会自动同步数据,等待监控到文件变化后才会执行同步。
rsync 配置
这些选项用于配置 rsync 的具体参数:
-
binary = "/usr/bin/rsync":指定rsync可执行文件的路径,通常不需要修改,除非rsync安装在非标准路径。 -
archive = true:启用rsync的归档模式,确保文件的符号链接、权限、时间戳等信息都能被保留。 -
compress = true:启用压缩,在同步时对数据进行压缩,从而减少传输的数据量,特别适用于网络带宽有限的情况。 -
verbose = true:启用详细模式,输出详细的同步过程,帮助调试和查看同步的文件。 -
password_file = "/etc/rsyncd.pwd":指定存储rsync密码的文件路径,这样可以避免每次同步时都要手动输入密码。 -
_extra = {"--bwlimit=200"}:添加额外的rsync参数,这里设置了带宽限制为200KB/s,用于限制同步过程中的带宽使用。
启动并设置 Lsyncd 自启动
systemctl start lsyncd
systemctl enable lsyncd

🧪测试同步效果
在 server 添加新文件:
touch /data/file{11..20}.txt
在 client 上查看是否实时同步:
ls -l /data/

✅ 你将看到 file11.txt ~ file20.txt 自动同步到目标机的 /data 目录。
📝总结
通过本方案:
- ✅ 利用了 rsync 进行安全、高效的数据传输;
- ✅ 使用 Lsyncd 实现了源端目录的实时监听;
- ✅ 达到数据实时同步的效果,适合小文件频繁变更的场景;
- ✅ 配置灵活,支持压缩、排除规则、带宽限制等。
📚推荐扩展
- 日志查看:
tail -f /var/log/lsyncd/lsyncd.log - 支持双向同步请参考:
lsyncd+inotifywait或使用Unison - 实时同步大量小文件建议优化 inotify 参数或调大 fs.inotify.max_user_watches
如果你也有类似需求,不妨动手试试吧!有什么问题欢迎留言讨论~
相关文章:
使用 Rsync + Lsyncd 实现 CentOS 7 实时文件同步
文章目录 🌀使用 Rsync Lsyncd 实现 CentOS 7 实时文件同步前言介绍架构图🧱系统环境🔧Rsync配置(两台都需安装)关闭SELinux(两台都需) 📦配置目标端(client)…...
C# 多线程并发编程基础
1. 线程基础 1.1 线程简介 C# 中的线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程可以并发执行不同的任务。 1.2 线程的创建与启动 在 C# 中,可以使…...
RAG(检索增强生成)系统,提示词(Prompt)表现测试(数据说话)
在RAG(检索增强生成)系统中,评价提示词(Prompt)设计是否优秀,必须通过量化测试数据来验证,而非主观判断。以下是系统化的评估方法、测试指标和具体实现方案: 一、提示词优秀的核心标准 优秀的提示词应显著提升以下指标: 维度量化指标测试方法事实一致性Faithfulness …...
QML和C++交互
目录 1 QML与C交互基础1.1 全局属性1.2 属性私有化(提供接口访问) 2 QT与C交互(C创建自定义对象,qml文件直接访问)3 QT与C交互(qml直接访问C中的函数)4 QT与C交互(qml端发送信号 C端实现槽函数)…...
Android studio学习之路(六)--真机的调试以及多媒体照相的使用
多媒体应用(语言识别,照相,拍视频)在生活的各个方面都具有非常大的作用,所以接下来将会逐步介绍多媒体的使用,但是在使用多媒体之前,使用模拟器肯定是不行的,所以我们必须要使用真机…...
解决 Lettuce 在 Redis 集群模式下的故障转移问题
引言 在高可用系统中,故障转移是确保服务不中断的重要机制。当我们使用 Lettuce 作为 Redis 的 Java 客户端时,如何高效地处理故障转移成为一项关键任务。本篇文章将探讨如何在 Redis 集群模式下配置 Lettuce 以优化故障转移。 背景 在初期设置 Lettu…...
Qt 资源文件(.qrc 文件)
Qt 资源文件(.qrc 文件)是 Qt 提供的一种机制,用来将文件(如图像、音频、文本文件等)嵌入到应用程序中,使得这些文件不需要依赖外部文件路径,而是直接打包到程序的可执行文件中。通过使用 Qt 资…...
Vue 组件命名及子组件接收参数命名
1. 对于单个单词的组件 方式一:首字母大写。如 <School></School>。在 vue 开发者工具中默认使用的是该种方式。 方式二: 首字母小写。如 <school></school> 2. 对于多个单词的组件 方式一:每个单词都是小写&…...
PandaAI:一个基于AI的对话式数据分析工具
PandaAI 是一个基于 Python 开发的自然语言处理和数据分析工具,支持问答式(ChatGPT)的数据分析和报告生成功能。PandaAI 提供了一个开源的框架,主要核心组件包含用于数据处理的数据准备层(Pandas)以及实现 …...
【C++算法】50.分治_归并_翻转对
文章目录 题目链接:题目描述:解法C 算法代码:图解 题目链接: 493. 翻转对 题目描述: 解法 分治 策略一:计算当前元素cur1后面,有多少元素的两倍比我cur1小(降序) 利用单…...
Github最新AI工具汇总2025年4月份第2周
根据GitHub官方动态及开发者生态最新进展,以下是2025年4月第二周(截至4月7日)值得关注的AI工具与技术更新汇总: 1. GitHub Copilot Agent Mode全量发布 核心功能:在VS Code中启用Agent模式后,Copilot可自主…...
用VAE作为标题显示标题过短,所以标题变成了这样
VAE (Variational Autoencoder / 变分自编码器) 基本概念: VAE 是一种生成模型 (Generative Model),属于自编码器 (Autoencoder) 家族。 它的目标是学习数据的潜在表示 (Latent Representation),并利用这个表示来生成新的、与原始数据相似的数据。 与标…...
docker的run命令 笔记250406
docker的run命令 笔记250406 Docker 的 run 命令用于创建并启动一个新的容器。它是 Docker 中最常用的命令之一,基本语法为: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]常用选项(OPTIONS) 参数说明-d 或 --detach后台运行…...
基于pycatia的CATIA层级式BOM生成器开发全解析
引言:BOM生成技术的革新之路 在高端装备制造领域,CATIA的BOM管理直接影响着研发效率和成本控制。传统VBA方案 虽能实现基础功能,但存在代码维护困难、跨版本兼容性差等痛点。本文基于pycatia框架,提出一种支持动态层级识别、智能查重、Excel联动的BOM生成方案,其核心突破…...
Flink 1.20 Kafka Connector:新旧 API 深度解析与迁移指南
Flink Kafka Connector 新旧 API 深度解析与迁移指南 一、Flink Kafka Connector 演进背景 Apache Flink 作为实时计算领域的标杆框架,其 Kafka 连接器的迭代始终围绕性能优化、语义增强和API 统一展开。Flink 1.20 版本将彻底弃用基于 FlinkKafkaConsumer/FlinkK…...
2025年渗透测试面试题总结- 某四字大厂面试复盘扩展 一面(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 某四字大厂面试复盘扩展 一面 一、Java内存马原理与查杀 二、冰蝎与哥斯拉原理对比(技术演…...
批量压缩 jpg/png 等格式照片|批量调整图片的宽高尺寸
图片格式种类非常的多,并且不同的图片由于像素、尺寸不一样,可能占用的空间也会不一样。文件太大会占用较多的磁盘空间,传输及上传系统都非常不方便,可能会收到限制,因此我们经常会碰到需要对图片进行压缩的需求。如何…...
目录穿越 + pickle反序列化 -- xyctf Signin WP
源代码 # -*- encoding: utf-8 -*-File : main.py Time : 2025/03/28 22:20:49 Author : LamentXUflag in /flag_{uuid4}from bottle import Bottle, request, response, redirect, static_file, run, route secret aapp Bottle() route(/) def index():return…...
Spring Boot 框架注解:@ConfigurationProperties
ConfigurationProperties(prefix "sky.jwt") 是 Spring Boot 框架里的一个注解,其主要功能是把配置文件(像 application.properties 或者 application.yml)里的属性值绑定到一个 Java 类的字段上。下面详细阐述其作用:…...
【动手学深度学习】卷积神经网络(CNN)入门
【动手学深度学习】卷积神经网络(CNN)入门 1,卷积神经网络简介2,卷积层2.1,互相关运算原理2.2,互相关运算实现2.3,实现卷积层 3,卷积层的简单应用:边缘检测3.1࿰…...
在huggingface上制作小demo
在huggingface上制作小demo 今天好兄弟让我帮他搞一个模型,他有小样本的化学数据,想让我根据这些数据训练一个小模型,他想用这个模型预测一些值 最终我简单训练了一个小模型,起初想把这个模型和GUI界面打包成exe发给他࿰…...
集合学习内容总结
集合简介 1、Scala 的集合有三大类:序列 Seq、集Set、映射 Map,所有的集合都扩展自 Iterable 特质。 2、对于几乎所有的集合类,Scala 都同时提供了可变和不可变的版本,分别位于以下两个包 不可变集合:scala.collect…...
51.评论日记
千万不能再挖了,否则整个华夏文明将被改写。_哔哩哔哩_bilibili 2025年4月7日22:13:42...
SpringCloud第二篇:注册中心Eureka
注册中心的意义 注册中心 管理各种服务功能包括服务的注册、发现、熔断、负载、降级等,比如dubbo admin后台的各种功能。 有了注册中心,调用关系的变化,画几个简图来看一下。(了解源码可求求: 1791743380) 服务A调用服务B 有了注册中心之后&a…...
ES 参数调优
1、refresh_interval 控制索引刷新的时间间隔。增大这个值可以减少I/O操作,从而提升写入性能,但会延迟新文档的可见性 查看 GET /content_erp_nlp_help_202503191453/_settings?include_defaultstrue 动态修改:refresh_interval 是一个动态…...
用claude3.7,不到1天写了一个工具小程序(11个工具6个游戏)
一、功能概览和本文核心 本次开发,不是1天干撸,而是在下班后或早起搞的,总体加和计算了一下,大概1天的时间(12个小时),平常下班都是9点的衰仔,好在还有双休,谢天谢地。 …...
【GeoDa使用】空间自相关分析操作
使用 GeoDa 软件进行空间自相关分析 双击打开 GeoDa 软件 选择 .shp 文件 导入文件 空间权重矩阵(*.gal / *.gwt)是进行任何空间分析的前提 构建空间权重矩阵 空间权重矩阵(Spatial Weights Matrix) 是一个用来描述空间对象之间…...
什么是数据
一、数据的本质定义 哲学视角 亚里士多德《形而上学》中"未加工的观察记录"现代认知科学:人类感知系统接收的原始刺激信号(如视网膜光信号、听觉神经电信号)信息论奠基人香农:消除不确定性的度量载体 …...
C++基于rapidjson的Json与结构体互相转换
简介 使用rapidjson库进行封装,实现了使用C对结构体数据和json字符串进行互相转换的功能。最短只需要使用两行代码即可无痛完成结构体数据转换为Json字符串。 支持std::string、数组、POD数据(int,float,double等)、std::vector、嵌套结构体…...
OpenStack Yoga版安装笔记(十七)安全组笔记
一、安全组与iptables的关系 OpenStack的安全组(Security Group)默认是通过Linux的iptables实现的。以下是其主要实现原理和机制: 安全组与iptables的关系 OpenStack的安全组规则通过iptables的规则链实现。每条安全组规则会被转换为相应的i…...

