侧边栏壁纸
博主头像
lance

不为失败找借口,只为成功找方法。

  • 累计撰写 28 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

从定时到实时:用inotify+rsync实现文件高效同步

lance
2025-06-24 / 0 评论 / 0 点赞 / 85 阅读 / 881 字
温馨提示:
本文最后更新于 2025-06-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

我们实现了通过 rsync + cron 的方式定时同步文件,适用于对实时性要求不高的场景。比如网站内容部署、日志备份、图片上传等。然而在很多实际应用中,我们希望文件一旦发生变更,马上同步到目标位置
我们就可以介绍的组合:inotify + rsync实时文件同步方案

1 inotify 是什么?

inotify 是 Linux 内核提供的一种机制,可以监听文件系统的变化,比如文件的创建、修改、删除、移动等操作。我们可以通过工具如 inotifywait 来利用它。
实现思路:通过inotify实时监听源目录,当检测到变化时,立即出发一次rsync同步操作,极大地提升了效率和数据一致性。
inotify+rsync组合优势**:**

  1. 实时响应:监控文件变化,立即出发同步。
  2. 资源占用低:相比定时轮询更省资源。
  3. 部署简单:无需额外服务进程,脚本即可运行。

2.实战部署

角色 主机名 IP地址 系统版本
源服务器 webserver 10.0.0.110 Rocky Linux9.4
目标服务器 backupserver 10.0.0.111 Rocky Linux9.4

安装inotify

2.1 安装 inotify-tools

Rocky Linux 默认的软件仓库中 没有inotify-tools,所以我们需要启用 EPEL源才能安装。

#安装epel源
dnf -y install epel-release
# 安装inotify-tools
dnf -y install inotify-tools 
# 检查
inotifywait --help

2.2 编写实时同步脚本

我们编写一个脚本 /realtime_rsync.sh,实现文件变更即同步。

#!/bin/bash
#实时同步脚本:部署在10.0.0.110上(源服务器)

SRC=“/var/www/html/”                 #本地源目录,末尾必须加斜杠
DEST="10.0.0.111:/backup/web"        # 远程目标地址
LOG="/var/log/realtime_rsync.log"    # 日志文件位置

while inotifywait -r -e modify,create,delete,move "$SRC"
do
	rsync -azP --delete   $EXCLUDE"$SRC""$DEST" >> "$LOG" 2>&1
        echo"[$(date)] 同步完成" >> "$LOG"
        # 可选:避免频繁触发同步,稍作延迟
     sleep 2
done
命令 作用
inotifywait -r -e modify,create,delete,move 归监听目录及其子目录的修改/创建/删除/移动事件
rsync -azP 增量归档压缩传输,显示进度
–delete 删除目标中源目录已删除的文件,实现镜像同步
>>$LOG 把输出追加到日志文件中便于排查问题

2.3 配置SSH 免密登录

为了实现自动同步,建议你在10.0.0.110上配置对10.0.0.111的SSH免密登录。

ssh-keygen -t rsa    # 一路回车
ssh-copy-id root@10.0.0.111
# 输入密码

# 测试
ssh root@10.0.0.111

2.4 后台运行脚本(推荐)

nohup bash /realtime_rsync.sh &

2.5 测试验证

在源主机上同步目录创建新文件

cd /var/www/html
touch touch test1.txt

在源主机创建文件,目标主机查看,出现test1.txt。

这个日志一直会生成,建议做个定时任务定时清理,不然会导致磁盘空间。

3  应用场景推荐

  • Web 服务器部署代码实时同步
  • 图片/视频上传目录备份到云服务器
  • 多机共享一个工作目录(只读同步)
  • 日志文件收集实时传送到分析服务
0

评论区