导读:本期聚焦于小伙伴创作的《Linux Rsync+Inotify实现数据实时同步:配置步骤与异地备份方案详解》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Linux Rsync+Inotify实现数据实时同步:配置步骤与异地备份方案详解》有用,将其分享出去将是对创作者最好的鼓励。

Linux 通过Rsync+Inotify实现本、异地远程数据实时同步功能

一、方案概述

在Linux环境下的数据备份场景中,传统的定时rsync同步方式存在同步延迟高、无法实时感知文件变化的问题。结合Rsync高效的数据传输能力和Inotify内核级别的文件系统事件监控能力,可以实现本地或异地服务器的数据实时同步,适用于网站文件备份、分布式系统文件一致性维护等场景。

二、核心组件介绍

1. Rsync

Rsync是一款快速、通用的文件同步工具,支持本地复制和远程同步,采用增量传输算法,仅传输文件中变化的部分,大幅降低网络带宽消耗。它可以通过ssh协议或自带的rsyncd守护进程进行数据传输,适合大文件、多文件的同步场景。

2. Inotify

Inotify是Linux内核2.6.13及以上版本提供的文件系统事件监控机制,能够实时监控文件或目录的创建、删除、修改、移动等操作,并触发对应的用户态程序响应,是实现实时同步的核心监控组件。

三、环境准备

以下为本次示例的环境配置,可根据实际需求调整:

  • 源服务器(需要同步数据的服务器):IP为192.168.0.100,系统为CentOS 7

  • 目标服务器(接收同步数据的服务器):IP为192.168.0.101,系统为CentOS 7

  • 需要同步的源目录:/data/source/

  • 目标服务器存放同步数据的目录:/data/backup/

两台服务器都需要确保内核支持Inotify,可通过以下命令验证:

ll /proc/sys/fs/inotify/

如果输出包含max_queued_events、max_user_instances、max_user_watches三个文件,说明内核已支持Inotify。

四、Rsync配置(目标服务器)

1. 安装Rsync

在目标服务器执行以下命令安装Rsync:

yum install -y rsync

2. 配置Rsync守护进程

编辑Rsync配置文件/etc/rsyncd.conf,添加以下内容:

uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[backup]
path = /data/backup/
comment = Backup Directory
ignore errors
read only = no
write only = no
hosts allow = 192.168.0.100
hosts deny = *
list = false
auth users = rsync_user
secrets file = /etc/rsync.pass

3. 配置认证密码

创建密码文件/etc/rsync.pass,添加用户名和密码,格式为用户名:密码

echo "rsync_user:123456" > /etc/rsync.pass
chmod 600 /etc/rsync.pass

4. 启动Rsync服务

systemctl start rsyncd
systemctl enable rsyncd

五、源服务器配置

1. 安装Rsync和Inotify-tools

源服务器需要安装Rsync用于数据传输,安装Inotify-tools用于调用内核Inotify接口:

yum install -y rsync inotify-tools

2. 配置Rsync认证密码

创建密码文件,仅存储目标服务器配置的密码,无需用户名:

echo "123456" > /etc/rsync.pass
chmod 600 /etc/rsync.pass

3. 编写实时同步脚本

创建同步脚本/usr/local/bin/inotify_rsync.sh,内容如下:

#!/bin/bash

# 源目录
SRC_DIR="/data/source/"
# 目标服务器Rsync模块信息
DEST_RSYNC="rsync_user@192.168.0.101::backup"
# Rsync密码文件
RSYNC_PASS="/etc/rsync.pass"
# Inotify监控事件类型
INOTIFY_EVENTS="create,delete,move,modify,attrib"

# 配置rsync密码文件环境变量
export RSYNC_PASSWORD=$(cat $RSYNC_PASS)

# 启动inotify监控,触发rsync同步
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e $INOTIFY_EVENTS $SRC_DIR | while read DATE TIME FILE
do
    rsync -avz --delete --progress $SRC_DIR $DEST_RSYNC --password-file=$RSYNC_PASS > /dev/null 2>&1
done

给脚本添加执行权限:

chmod +x /usr/local/bin/inotify_rsync.sh

4. 后台运行同步脚本

nohup /usr/local/bin/inotify_rsync.sh > /var/log/inotify_rsync.log 2>&1 &

可将启动命令添加到/etc/rc.d/rc.local实现开机自启。

六、功能验证

1. 本地文件变化验证

在源服务器的/data/source/目录下创建测试文件:

touch /data/source/test.txt
echo "hello rsync inotify" > /data/source/test.txt

在目标服务器的/data/backup/目录下查看,可发现test.txt文件已同步,且内容一致。

2. 删除文件验证

在源服务器删除测试文件:

rm -f /data/source/test.txt

目标服务器对应文件也会被同步删除,说明--delete参数生效。

七、注意事项

  • 如果同步目录包含大量文件,需要调整Inotify的内核参数,避免监控队列溢出,可修改/etc/sysctl.conf添加:

fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

执行sysctl -p生效配置。

  • Rsync同步时如果使用ssh协议,无需配置rsyncd守护进程,但每次同步需要输入ssh密码,可通过ssh免密登录优化。

  • 生产环境中建议给同步脚本增加异常重启机制,避免进程意外退出导致同步中断。

rsync Inotify 数据同步 实时备份 Linux服务器

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。