使用 Rsync + Lsyncd 实现 CentOS 7 实时文件同步

news2025/4/16 21:31:06

文章目录

  • 🌀使用 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 来实现文件的实时同步。


前言

在分布式系统中,数据同步是一个重要的需求,尤其是当我们希望将两台服务器的数据保持一致时。rsynclsyncd 是两种常见的数据同步工具,它们能高效地处理文件同步和实时数据同步。本文将通过在两台 CentOS 7.9 服务器上配置 rsynclsyncd,展示如何进行数据同步的操作和配置。

介绍

  • 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 上的文件会通过 rsynclsyncd 实时同步到 client 上,确保两个节点的数据保持一致。


🧱系统环境

主机名IP地址系统版本备注
server10.255.101.216CentOS Linux release 7.9.2009 (Core)源服务器
client10.255.101.217CentOS 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 配置文件中的各个参数进行详细讲解:

  • uidgid:这两个参数设置 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

如果你也有类似需求,不妨动手试试吧!有什么问题欢迎留言讨论~


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2330605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android studio学习之路(六)--真机的调试以及多媒体照相的使用

多媒体应用&#xff08;语言识别&#xff0c;照相&#xff0c;拍视频&#xff09;在生活的各个方面都具有非常大的作用&#xff0c;所以接下来将会逐步介绍多媒体的使用&#xff0c;但是在使用多媒体之前&#xff0c;使用模拟器肯定是不行的&#xff0c;所以我们必须要使用真机…

Qt 资源文件(.qrc 文件)

Qt 资源文件&#xff08;.qrc 文件&#xff09;是 Qt 提供的一种机制&#xff0c;用来将文件&#xff08;如图像、音频、文本文件等&#xff09;嵌入到应用程序中&#xff0c;使得这些文件不需要依赖外部文件路径&#xff0c;而是直接打包到程序的可执行文件中。通过使用 Qt 资…

PandaAI:一个基于AI的对话式数据分析工具

PandaAI 是一个基于 Python 开发的自然语言处理和数据分析工具&#xff0c;支持问答式&#xff08;ChatGPT&#xff09;的数据分析和报告生成功能。PandaAI 提供了一个开源的框架&#xff0c;主要核心组件包含用于数据处理的数据准备层&#xff08;Pandas&#xff09;以及实现 …

【C++算法】50.分治_归并_翻转对

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 493. 翻转对 题目描述&#xff1a; 解法 分治 策略一&#xff1a;计算当前元素cur1后面&#xff0c;有多少元素的两倍比我cur1小&#xff08;降序&#xff09; 利用单…

基于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 作为实时计算领域的标杆框架&#xff0c;其 Kafka 连接器的迭代始终围绕性能优化、语义增强和API 统一展开。Flink 1.20 版本将彻底弃用基于 FlinkKafkaConsumer/FlinkK…

2025年渗透测试面试题总结- 某四字大厂面试复盘扩展 一面(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 某四字大厂面试复盘扩展 一面 一、Java内存马原理与查杀 二、冰蝎与哥斯拉原理对比&#xff08;技术演…

批量压缩 jpg/png 等格式照片|批量调整图片的宽高尺寸

图片格式种类非常的多&#xff0c;并且不同的图片由于像素、尺寸不一样&#xff0c;可能占用的空间也会不一样。文件太大会占用较多的磁盘空间&#xff0c;传输及上传系统都非常不方便&#xff0c;可能会收到限制&#xff0c;因此我们经常会碰到需要对图片进行压缩的需求。如何…

【动手学深度学习】卷积神经网络(CNN)入门

【动手学深度学习】卷积神经网络&#xff08;CNN&#xff09;入门 1&#xff0c;卷积神经网络简介2&#xff0c;卷积层2.1&#xff0c;互相关运算原理2.2&#xff0c;互相关运算实现2.3&#xff0c;实现卷积层 3&#xff0c;卷积层的简单应用&#xff1a;边缘检测3.1&#xff0…

在huggingface上制作小demo

在huggingface上制作小demo 今天好兄弟让我帮他搞一个模型&#xff0c;他有小样本的化学数据&#xff0c;想让我根据这些数据训练一个小模型&#xff0c;他想用这个模型预测一些值 最终我简单训练了一个小模型&#xff0c;起初想把这个模型和GUI界面打包成exe发给他&#xff0…

51.评论日记

千万不能再挖了&#xff0c;否则整个华夏文明将被改写。_哔哩哔哩_bilibili 2025年4月7日22:13:42

SpringCloud第二篇:注册中心Eureka

注册中心的意义 注册中心 管理各种服务功能包括服务的注册、发现、熔断、负载、降级等&#xff0c;比如dubbo admin后台的各种功能。 有了注册中心&#xff0c;调用关系的变化&#xff0c;画几个简图来看一下。(了解源码可求求: 1791743380) 服务A调用服务B 有了注册中心之后&a…

ES 参数调优

1、refresh_interval 控制索引刷新的时间间隔。增大这个值可以减少I/O操作&#xff0c;从而提升写入性能&#xff0c;但会延迟新文档的可见性 查看 GET /content_erp_nlp_help_202503191453/_settings?include_defaultstrue 动态修改&#xff1a;refresh_interval 是一个动态…

用claude3.7,不到1天写了一个工具小程序(11个工具6个游戏)

一、功能概览和本文核心 本次开发&#xff0c;不是1天干撸&#xff0c;而是在下班后或早起搞的&#xff0c;总体加和计算了一下&#xff0c;大概1天的时间&#xff08;12个小时&#xff09;&#xff0c;平常下班都是9点的衰仔&#xff0c;好在还有双休&#xff0c;谢天谢地。 …

【GeoDa使用】空间自相关分析操作

使用 GeoDa 软件进行空间自相关分析 双击打开 GeoDa 软件 选择 .shp 文件 导入文件 空间权重矩阵&#xff08;*.gal / *.gwt&#xff09;是进行任何空间分析的前提 构建空间权重矩阵 空间权重矩阵&#xff08;Spatial Weights Matrix&#xff09; 是一个用来描述空间对象之间…

C++基于rapidjson的Json与结构体互相转换

简介 使用rapidjson库进行封装&#xff0c;实现了使用C对结构体数据和json字符串进行互相转换的功能。最短只需要使用两行代码即可无痛完成结构体数据转换为Json字符串。 支持std::string、数组、POD数据&#xff08;int,float,double等&#xff09;、std::vector、嵌套结构体…

OpenStack Yoga版安装笔记(十七)安全组笔记

一、安全组与iptables的关系 OpenStack的安全组&#xff08;Security Group&#xff09;默认是通过Linux的iptables实现的。以下是其主要实现原理和机制&#xff1a; 安全组与iptables的关系 OpenStack的安全组规则通过iptables的规则链实现。每条安全组规则会被转换为相应的i…

通义万相2.1 图生视频:为AI绘梦插上翅膀,开启ALGC算力领域新纪元

通义万相2.1图生视频大模型 通义万相2.1图生视频技术架构万相2.1的功能特点性能优势与其他工具的集成方案 蓝耘平台部署万相2.1核心目标典型应用场景未来发展方向 通义万相2.1ALGC实战应用操作说明功能测试 为什么选择蓝耘智算蓝耘智算平台的优势如何通过API调用万相2.1 写在最…

52.个人健康管理系统小程序(基于springbootvue)

目录 1.系统的受众说明 2.开发环境与技术 2.1 MYSQL数据库 2.2 Java语言 2.3 微信小程序技术 2.4 SpringBoot框架 2.5 B/S架构 2.6 Tomcat 介绍 2.7 HTML简介 2.8 MyEclipse开发工具 3.系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作…

学习比较JVM篇(六):解读GC日志

一、前言 在之前的文章中&#xff0c;我们对JVM的结构、垃圾回收算法、垃圾回收器做了一些列的讲解&#xff0c;同时也使用了JVM自带的命令行工具进行了实际操作。今天我们继续讲解JVM。 我们学习JVM的目的是为了了解JVM&#xff0c;然后优化对应的参数。那么如何了解JVM运行…