Linux CentOS 通过rsync+inotify实现文件实时同步

news/2024/9/23 14:35:53/

rsync介绍

rsync是Liunx下的远程数据同步工具,可快速同步多台主机间的文件和目录,并可实现增量同步以减少数据的传输。

rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。具体配置方法可参考

服务器】CentOS通过rsync实现文件同步(SSH方式)

服务器】CentOS通过rsync实现文件同步(daemon方式)

但rsync无法做到实时同步,即便使用免交互式进行同步,也只能人工手动操作或借助于计划任务的方式进行,存在时间差。并且因为rsync是扫描所有文件后差量传递,当文件数量过多时,效率也比较低下。此时可以使用rsync+inotify组合的方式。

本文主要介绍在CentOS操作系统中以rsync+inotify组合方式实现文件实时同步的步骤。

inotify介绍

inotify是一种强大的、细粒度的、异步的文件系统事件监听机制,可以监听文件系统中添加、删除,修改、移动等各种细微事件,做到对事件的实时响应,高效并且没有轮询造成的系统资源消耗。

inotify可以监听文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决同步数据的实时性问题。

inotify命令介绍

inotify-tools 包含了两个命令:inotifywait 与 inotifywatch。

inotifywait:在被监听的文件或目录上等待特定文件系统事件发生,执行后处于阻塞状态。简单的说就是发生事件就执行。
inotifywatch:用于收集文件系统的统计数据,例如发生了多少次 inotify 事件,某文件被访问了多少次等等。简单的说是用于统计的。

因inotifywait可以做到监听事件,所以实现文件实时同步主要使用inotifywait。

实现目标

远程服务器192.168.1.1,开启 rsyncd 服务,无需配置 inotify

本地服务器192.168.1.2,配置 inotify 服务,配置 rsync 账号密码用于免交互式同步

在本地服务器指定目录文件发生变化时,实时同步至远程服务器。此场景可用于文件的实时备份或主从同步。

具体实践

1、远程服务器配置rsync-daemon方式,本地服务器配置同步账号信息,具体操作参考

服务器】CentOS通过rsync实现文件同步(daemon方式)

2、在本地服务器安装inotify

yum install epel-release -y
yum install inotify-tools -y

3、本地服务器创建 inotify.sh 脚本文件,用于监听文件变动并进行同步

# 保存路径及文件名可根据实际情况修改
vim /home/inotify.sh

4、输入以下内容,部分内容可根据情况进行调整

# 远程主机ip地址
host=192.168.1.1# 本地服务器同步目录(不含backup目录本身,即同步backup目录内的文件和子目录)
src=/backup/# 远程服务器 rsync 服务模块名
des=backup# rsync服务用户连接认证密码文件路径
password=/etc/rsync.password# 连接认证用户
user=rsync_backup# inotifywait 程序路径
inotifywait=/usr/bin/inotifywait# 监听文件变化进行传输
$inotifywait -mrq -e 'modify,delete,create,attrib' $src |while read files;
dorsync -azP --delete $src $user@$host::$des --password-file=${password};# 日志,可视情况开启# echo "${files} was rsynced!" >> /home/rsync_inotify.log 2>&1;done

监听事件modify(修改),delete(删除),create(创建),attrib(元数据修改)被触发时进行rsync传输

5、运行脚本进行监听

sh /home/inotify.sh

脚本运行后,当本地服务器/backup目录内发生上述事件后,实时调用 rsync 同步至远程服务器

6、测试同步功能

本地服务器运行以下命令

# 进入指定目录
cd /backup/# 建立测试文件夹
mkdir test1# 建立测试文件
touch 1.txt

远程服务器运行以下测试命令

# 进入指定目录
cd /backup/# 显示文件列表
ls # 显示以下内容,同步完成
# 可能显示 test1 1.txt

inotifywait参数

-m 持续监听指定的文件或目录
-r 递归监听指定目录及其子目录下的文件变化
-q 静默模式,只打印出需要的信息
-e 指定要监听的事件类型,可以是多个事件类型组合,如 create、delete、modify、move

监听事件

inotify 监听的文件系统常用事件包括:

access:访问,读取文件
modify:修改,文件内容被修改
attrib:属性,文件元数据被修改
move:移动,对文件进行移动操作
create:创建,生成新文件
open:打开,对文件进行打开操作
close:关闭,对文件进行关闭操作
delete:删除,文件被删除


http://www.ppmy.cn/news/1512332.html

相关文章

宝塔面板一键部署Inis博客网站结合内网穿透为本地站点配置公网地址

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总…

1.Java:集合

集合作用: 1.动态保存任意多个对象。 2.提供操作对象方法比如add,remove,set,get等方法。 3.使用集合添加,删除代码简洁。 集合分类 集合分为单列集合以及双列集合。 单列集合: 双列集合: Collection接口特点 1.Collection…

Linux ubuntu 24.04 安装运行《帝国时代3》免安装绿色版游戏,解决 “Could not load DATAP.BAR”等问题

Linux ubuntu 24.04 安装运行《帝国时代3》游戏,解决 “Could not load DATAP.BAR" 等问题 《帝国时代 3》是一款比较经典的即时战斗游戏,伴随了我半个高中时代,周末有时间就去泡网吧,可惜玩的都是简单人机,高难…

售楼管理系统pf

TOC springboot534售楼管理系统pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理…

【C语言指针的哪些事】

Q:解释一下指针的含义和作用,并说明为什么需要指针来访问其他数据,用指针访问有何优势 Answer 指针是编程语言中的一种数据类型,用于存储内存地址。在C、C等语言中,指针是一个非常重要的概念。指针的含义和作用可以概…

8/20-周研报笔记

百尺竿头系列(二):计算机投资的新解法 计算机板块择时策略进攻型 高波动 预期好防御型 低波动 抗跌 美股套息交易测算及后市展望——泛事件驱动系列 美股存量套息 是对美股的预测 国内双因子定价模型的构建与应用 双因子是哪两个因子市…

快9月了线代零基础,跟李永乐还是张宇?

快九月了,线代学多少了呢,如果还没开始,那要抓点紧了,因为到了九月,要做的事情很多,还有真题要做呢! 高数强化跟的是张宇,线代是继续跟张宇老师还是换李永乐老师呢? 先来…

Vue 配置多环境开发 开发环境 生产环境 测试环境

介绍 多环境开发指的是在同一个项目中,针对不同的开发环境配置不同的设置或参数。 官方文档:https://cli.vuejs.org/zh/guide/mode-and-env.html#模式 三个模式 development 模式用于 vue-cli-service servetest 模式用于 vue-cli-service test:unitpr…