首页 > 其他分享 >使用 `rsync + inotify` 实现实时文件同步:简单又高效

使用 `rsync + inotify` 实现实时文件同步:简单又高效

时间:2025-01-10 14:05:48浏览次数:3  
标签:文件 rsync 同步 inotify 实时 服务器

使用 rsync + inotify 实现实时文件同步:简单又高效

在日常的运维工作中,文件的实时同步是一个非常常见的需求,比如:

  • 网站更新:同步静态资源到多台服务器。
  • 备份数据:将生产数据实时备份到异地存储。
  • 日志传输:将日志实时同步到集中分析服务器。

为了高效实现这些需求,我们可以将强大的文件同步工具 rsync 和实时文件监控工具 inotify 结合起来,轻松实现实时文件同步。

接下来,我会用通俗的语言和实际例子,带你了解它们的作用、使用场景,以及如何配置。


一、rsyncinotify 的作用

1. rsync 是什么?

rsync 是一个快速、灵活的文件同步工具,支持本地与远程之间的数据同步。它的核心特点包括:

  • 增量传输:只同步发生变化的部分,大大节省带宽。
  • 支持压缩:传输过程中可以启用压缩,进一步提升效率。
  • 多种协议:支持通过 SSH、rsync 协议等进行传输。

简单来说,rsync 是文件同步的高手。

2. inotify 是什么?

inotify 是 Linux 提供的文件系统监控工具,可以实时捕捉文件的变化(如创建、删除、修改等)。通过它,你可以知道哪些文件发生了变化,从而触发进一步操作。

如果说 rsync 是执行同步的工具,那么 inotify 就是触发同步的侦察兵。


二、rsync + inotify 的典型使用场景

1. 实时备份

  • 将重要数据实时同步到备份服务器,防止数据丢失。

2. 多节点资源同步

  • 多台 Web 服务器共享同一套静态资源,确保内容一致。

3. 日志集中管理

  • 将分布式系统中的日志实时同步到中央服务器,方便分析和排查问题。

三、搭建一个简单的实时同步方案

我们以一个具体案例来讲解:将本地目录 /data 的文件实时同步到远程服务器上的 /backup 目录。

1. 环境准备

假设:

  • 本地服务器 IP:192.168.1.100
  • 远程服务器 IP:192.168.1.200
  • 用户名:user
  • 本地目录:/data
  • 远程目录:/backup
需要安装的工具:
  • rsync
  • inotify-tools

安装命令(以 Ubuntu 为例):

sudo apt update
sudo apt install rsync inotify-tools

2. 使用 rsync 进行初始同步

在实现实时同步之前,先用 rsync 将现有文件同步到远程服务器。

命令:
rsync -avz /data/ user@192.168.1.200:/backup

参数说明:

  • -a:归档模式,保留文件属性。
  • -v:显示详细信息。
  • -z:启用压缩,节省带宽。

执行后,本地的 /data 文件夹内容会被同步到远程的 /backup 文件夹。


3. 配置 inotify 实现实时同步

编写脚本:

新建一个脚本文件 sync.sh

#!/bin/bash

SRC_DIR="/data"
DEST_USER="user"
DEST_HOST="192.168.1.200"
DEST_DIR="/backup"

inotifywait -mrq -e modify,create,delete,move $SRC_DIR | while read event
do
  rsync -avz --delete $SRC_DIR/ $DEST_USER@$DEST_HOST:$DEST_DIR
done
脚本说明:
  1. inotifywait 参数
    • -m:持续监听。
    • -r:递归监听子目录。
    • -q:简化输出。
    • -e:指定需要监听的事件(如文件修改、创建、删除、移动)。
  2. rsync 参数
    • --delete:保持源和目标一致,删除目标中多余的文件。
赋予脚本执行权限:
chmod +x sync.sh
运行脚本:
./sync.sh

现在,当本地 /data 目录中的文件发生任何变化时,inotify 会捕捉到事件,并触发 rsync 同步到远程服务器。


4. 后台运行脚本

为了让同步脚本一直运行,可以使用 nohupsystemd

使用 nohup
nohup ./sync.sh > sync.log 2>&1 &
  • 脚本输出会写入 sync.log,脚本在后台持续运行。
使用 systemd
  1. 创建一个服务文件 /etc/systemd/system/rsync_inotify.service

    [Unit]
    Description=Rsync + Inotify File Sync Service
    After=network.target
    
    [Service]
    ExecStart=/path/to/sync.sh
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
  2. 启用并启动服务:

    sudo systemctl enable rsync_inotify
    sudo systemctl start rsync_inotify
    

四、注意事项

  1. 权限问题
    确保本地和远程用户有读写权限,必要时使用 SSH 密钥认证避免频繁输入密码。

  2. 文件变化频率
    如果文件变化非常频繁,rsync 可能在短时间内被多次触发,导致资源浪费。可以考虑设置延迟或批量处理。

  3. 带宽优化

    • 使用 -z 参数压缩传输数据。
    • 排除不必要同步的文件,使用 --exclude 参数。
  4. 高可用性
    如果需要更高可靠性,可以结合监控工具(如 supervisorsystemd)确保同步脚本持续运行。


五、总结

通过结合 rsyncinotify,我们可以轻松实现高效的实时文件同步。无论是网站部署、数据备份还是日志收集,这种方案都非常实用。

它的优势在于:

  • 简单高效rsync 增量传输配合 inotify 事件触发,资源消耗低。
  • 灵活性强:可以根据需要定制同步规则和触发条件。

对于日常运维工作来说,这是一套既可靠又易于维护的解决方案。如果你有实时文件同步的需求,不妨动手试试吧!

标签:文件,rsync,同步,inotify,实时,服务器
From: https://blog.csdn.net/weixin_42587823/article/details/145056773

相关文章

  • 使用Redis的ZSet实现实时排行榜
    使用Redis的ZSet实现实时排行榜游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。一个典型的游戏排行榜包括以下常见功能:能够记录每个玩家的分......
  • 使用Redis的ZSet实现实时排行榜
    使用Redis的ZSet实现实时排行榜游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。一个典型的游戏排行榜包括以下常见功能:能够记录每个玩家的分......
  • 智能电网巡检与传感器数据自动分析:3大AI技术助力设备状态实时监测
    前言在智能电网的运行中,设备的实时监测和巡检报告的分析至关重要。定期的巡检报告和传感器数据是确保设备正常运行、预防故障发生的重要依据。然而,传统的人工分析方法不仅耗时,而且易出错。随着人工智能技术的发展,AI系统已能够高效、精准地从电力行业的巡检报告和传感器数据中提取......
  • VUE +WebSocket+speak-tt 实现在浏览器右下角实时给商家推送订单消息
    先看效果  1、WebSocket服务建立 1.1引入包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>1.2新建配置类packagecom......
  • 欧拉OpenEuler使用nfs和rsync复制文件夹到新服务器.250109
    案例:服务器A是新服务器服务器B为老服务器需要将服务器B的/data/storage,拷贝到服务器A的/home/sync-data下一、服务器A新服务器配置nfs1.安装nfssystemctlstopfirewallddf-hmkdir-p/home/sync-datayuminstallnfs-utilssystemctlstatusnfs-serv......
  • Qt监控系统远程网络登录/请求设备列表/服务器查看实时流/回放视频/验证码请求
    一、前言说明这几个功能是近期定制的功能,也非常具有代表性,核心就是之前登录和设备信息都是在本地,存放在数据库中,数据库可以是本地或者远程的,现在需要改成通过网络API请求的方式,现在很多的服务器很强大,都提供了各种API接口,包括登录和拉取回放等,相当于直接对接这些服务器的接口去开......
  • AI智能分析视频分析网关关于人工智能在视频分析中是如何实现实时分析的?
    在当今数字化时代,人工智能技术的迅猛发展为各行各业带来了革命性的变革。特别是在视频分析领域,AI的应用使得实时分析成为可能,极大地提升了视频数据处理的效率和准确性。随着城市智能化进程的不断推进,实时视频分析在智慧城市建设、公共安全、交通管理等众多领域发挥着至关重要的作......
  • NVIDIA 推出智能体构建工具 Agentic AI Blueprints;VITA-1.5:实时多模态交互,1.5 秒延迟
      这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢迎大家留言......
  • 编织数据之网:MySQL如何为企业级实时洞察力提供无限可能
    在这个信息爆炸的时代,企业需要比以往任何时候都更加敏锐地捕捉市场动态,快速响应变化。而这一切的关键在于能够从海量的数据中提取有价值的见解。今天,我们将探索如何利用MySQL构建一个强大的企业级数据编织平台,为您的业务决策提供即时的、深入的洞察力。这不仅是一篇技术文章......
  • Android13实时刷新频率的实现代码
    设置->开发者选项->显示刷新频率packages/apps/Settings/src/com/android/settings/development/ShowRefreshRatePreferenceController.javapublicclassShowRefreshRatePreferenceControllerextendsDeveloperOptionsPreferenceControllerimplementsPrefere......