暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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


在上一篇文章:一文搞懂 rsync:原理剖析 + Rocky Linux 主机同步部署实战

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

这时,我们就可以用今天要介绍的组合:inotify + rsync 实时文件同步方案

1 inotify 是什么?

inotify
 是 Linux 内核提供的一种机制,可以监听文件系统的变化,比如文件的创建、修改、删除、移动等操作。我们可以通过工具如 inotifywait
 来利用它。

实现思路:通过 inotify 实时监听源目录,当检测到变化时,立即触发一次 rsync
 同步操作,极大地提升了效率和数据一致性。

inotify+rsync组合优势:

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

2 实战部署

上一篇文章已经将rsync部署好了,这次只需要安装inotify就行

在源主机(10.0.0.110)上操作

2.1 安装 inotify-tools

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

# 安装epel源
dnf install -y epel-release

# 安装inotify-tools
dnf install inotify-tools -y

# 检查
inotifywait --help

2.2 编写实时同步脚本

我们编写一个脚本 /opt/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 /opt/realtime_rsync.sh &

2.5 测试验证

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

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


从图片可以看到新建的文件已经自动完成了同步

检查日志的同步情况

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

3  应用场景推荐

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

本次分享结束啦,后期会更新更多技术干货文章!感谢点赞关注!

如果需要提供技术支持或添加交流群,加V详聊:lige_linux

往期精彩文章:


K8S命令详解汇总【自用珍藏版】K8S集群部署 | K8S存储实战案例 |
K8S证书续签十年 | K8S部署Prometheus | Rancher部署并接管K8S |
Jenkins安装部署 | Gitlab安装部署 | 服务网格Istio安装及实战 |
搭建企业级Harbor仓库 | K8S对接Harbor仓库 | Docker常用命令汇总 |
Docker无法下载镜像解决办法 | 安装Docker的三种方法 | Docker基础概念汇总 |

Oralce19C RAC集群搭建 | Oracle集群管理命令汇总 | MySQL集群安装部署 |
MySQL一键备份脚本 | MySQL集群目录迁移 | Redis三主三从集群部署 |

150个Linux常用命令 |  8个有趣的Linux命令 | 主流Linux操作系统各版本网卡配置方法汇总,建议收藏!  |
Firewalld防火墙详细讲解 |  构建内部Yum源 | 超全的磁盘扩容方法 | 服务器带外管理知识

文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论