三十四、【Linux常用工具】rsync+inotify实时同步演示

实时同步演示

技术架构全景

inotify监控 触发同步 数据存储 日志记录 日志记录 源服务器 文件系统事件 Rsync传输 目标服务器 备份目录 同步日志

核心组件详解

1. inotify 内核子系统

  • 功能:监控文件系统事件
  • 内核支持:Linux 2.6.13+
  • 监控能力:
    • 单进程监控文件数:默认8192(可调优)
    • 事件队列长度:默认16384(可调优)
    • 响应延迟:毫秒级

2. Rsync 高效同步工具

特性 优势 适用场景 传输效率
增量同步 仅传输变化部分 大文件同步 极高
压缩传输 减少带宽占用 跨网络同步
校验机制 数据一致性保证 关键数据备份 可靠
权限保持 保留文件属性 系统迁移 完整

实践演示

一、环境准备与安装

1. 检查内核支持
bash 复制代码
[root@localhost ~]# uname -r
5.14.0-284.el9.x86_64  # 内核版本需 ≥2.6.13
[root@localhost ~]# grep INOTIFY_USER /boot/config-$(uname -r)
CONFIG_INOTIFY_USER=y   # 输出此值表示支持
2. 安装 inotify-tools
bash 复制代码
# 启用 EPEL 源(CentOS/Rocky)
[root@localhost ~]# dnf install epel-release -y
[root@localhost ~]# dnf install inotify-tools rsync -y

# 验证安装
[root@localhost ~]# inotifywait --help | head -n 3
inotifywait 3.22.6
Wait for a particular event on a file or set of files.
Usage: inotifywait [options] file1 [file2] [file3] ...

二、配置 Rsync 服务端(目标机)

1. 创建 Rsync 配置文件
bash 复制代码
[root@localhost ~]# vi /etc/rsyncd.conf
[backup]                # 模块名
path = /data/backup     # 同步目标目录
uid = root              # 运行用户
gid = root              # 运行组
read only = no          # 关闭只读(关键!
hosts allow = 192.168.1.0/24  # 允许的客户端IP
2. 启动 Rsync 守护进程
bash 复制代码
[root@localhost ~]# systemctl enable --now rsyncd
[root@localhost ~]# ss -tunlp | grep 873
tcp  LISTEN 0 5  *:873  *:*  users:(("rsync",pid=1234))

三、配置实时同步脚本(源机)

1. 创建同步脚本
bash 复制代码
[root@localhost ~]# vi /opt/inotify_rsync.sh
#!/bin/bash
SRC="/var/www/html"    # 监控的源目录
DEST="192.168.1.100::backup"  # Rsync 目标地址
LOG="/var/log/inotify_rsync.log"

# 持续监控事件
inotifywait -mrq -e create,delete,move,modify,attrib "$SRC" | while read path event file
do
    rsync -azP --delete "$SRC" "$DEST" >> "$LOG" 2>&1
    echo "[$(date +'%F %T')] $file 事件: $event" >> "$LOG"
done
2. 设置权限并启动
bash 复制代码
[root@localhost ~]# chmod +x /opt/inotify_rsync.sh
[root@localhost ~]# nohup /opt/inotify_rsync.sh &  # 后台运行

四、测试与验证

bash 复制代码
# 在源目录创建测试文件
[root@localhost ~]# touch /var/www/html/test{1..3}.txt

# 查看目标目录同步结果
[root@localhost ~]# ls /data/backup
test1.txt  test2.txt  test3.txt

# 检查同步日志
[root@localhost ~]# tail /var/log/inotify_rsync.log
[2025-07-28 14:22:05] test1.txt 事件: CREATE
[2025-07-28 14:22:05] test2.txt 事件: CREATE
[2025-07-28 14:22:06] test3.txt 事件: CREATE

命令总结表格

演示命令 功能描述 关键参数/文件
dnf install inotify-tools rsync -y 安装核心工具 inotify-tools 提供监控能力
vi /etc/rsyncd.conf 配置 Rsync 服务端 read only=no 允许写入
inotifywait -mrq -e create,delete,... 监控文件事件 -e 指定事件类型
rsync -azP --delete $SRC $DEST 增量同步并删除目标多余文件 --delete 保持严格一致
nohup /opt/inotify_rsync.sh & 后台运行监控脚本 避免终端关闭导致进程退出

功能作用详解

1. 核心事件类型说明

事件类型 触发场景 同步必要性
create 文件/目录创建 必需
delete 文件/目录删除 必需(配合 --delete
modify 文件内容修改 必需
move 文件移动或重命名 必需
attrib 权限/属性变更(如 chmod) 可选

2. 内核参数优化

bash 复制代码
# 编辑 sysctl 配置
[root@localhost ~]# vi /etc/sysctl.conf
fs.inotify.max_user_watches = 1000000  # 单进程可监控文件数
fs.inotify.max_queued_events = 32768    # 事件队列长度
fs.inotify.max_user_instances = 1024    # 最大监控实例数

# 使配置生效
[root@localhost ~]# sysctl -p
相关推荐
在路上`2 分钟前
前端学习之后端java小白(三)-sql外键约束一对多
java·前端·学习
男孩李15 分钟前
浅谈代理流程自动化 (APA)
运维·人工智能·自动化
尚久龙27 分钟前
安卓学习 之 用户登录界面的简单实现
android·运维·服务器·学习·手机·android studio·安卓
yb0os139 分钟前
RPC实战和核心原理学习(一)----基础
java·开发语言·网络·数据结构·学习·计算机·rpc
high20111 小时前
【 运维相关】-- HTTP 压测/负载发生器之新秀 oha
运维·网络协议·http
乱飞的秋天1 小时前
网络编程学习
网络·学习·php
DONG9991 小时前
ubuntu 22 安装轻量级桌面Xfce并使用xrdp远程桌面连接
linux·运维·ubuntu
呆萌小新@渊洁2 小时前
linux升级系统,重启出现Minimal BASH-like line editingis supported
linux·服务器
2202_755744302 小时前
开学季技术指南:构建高效知识管理系统与学习工作流
学习
東雪蓮☆2 小时前
从零开始掌握 Web 与 Nginx:入门详解
运维·服务器·前端·nginx