实时数据备份实践inotify和rsync联动

目录

一、实时数据备份

1.实时数据备份

2.定时任务周期性的数据备份

3.实时数据备份

4.Inotify机制

二、实践

1.实时复制环境准备

2.实时复制概念

3.Inofity+Rsync实施复制实战

4.配置好rsync守护进程

5.检查linux是否支持inotify

6.安装inotyify--tools

7.inotifywait命令

8.inotifywait可监控事件

三、脚本化实现事件检测与rsync进行数据同步

1.rsync客户端创建同步脚本

2.创建/data确保文件存在

3.测试shell脚本


一、实时数据备份

1.实时数据备份

企业网站和应用都得有完善的数据备份方案,目的都是为了保证数据不丢失

2.定时任务周期性的数据备份

需要周期性数据备份的数据类型一般有这几种

  • 网站后台程序代码,运维配置文件,一般都会使用定时任务执行周期性的备份脚本,然后在通过rsync工具吧数据备份到 backup备份服务器上
  • 比如数据库文件,也使用定时任务配合mysql自身的备份命令,结合数据库备份,再通过rsync上传到备份服务器

3.实时数据备份

实时复制方案,是最适合企业重要的数据备份方案,用于用户提交的数据进行备份,jpg,png,tar,zip,mp4,txt,html

都可以使用inotify+sersync+rsync进行实时的数据备份

对于数据库文件,我们还有会更复杂的分布式备份方案,我们会吧数据拆分成多份,然后进行备份操作

对于提交到数据库的数据,我们还会使用数据库比如主从复制,进行备份操作

4.Inotify机制

  • Inotify是一种异步的系统事件监控机制,通过Inotify可以监控文件系统中添加、删除、修改等事件,利用这个内核接口,第三方软件可以监控文件系统下的情况变化。
  • 那么Inofity-tools就是该类软件的实现,是一个监控指定目录数据实时变化的软件。
  • 实现了Inotify的软件还有 Sersync 、 Inotify-tools
  • Sersync软件是在Inotify的基础上进行开发的,功能更加强大,支持配置文件中定义、重试机制、过滤机制、提供CDN数据更新

[Inotify机制的优点]

  • 监控文件系统的事件变化,通过复制工具实现实时数据复制
  • 支持多线程实时复制

[lnotify的缺点]

实测当文件数量大于200个 (10~100kb) ,复制存在延迟


二、实践

1.实时复制环境准备

准备两台虚拟机

  • 一个是数据客户端
  • 一个是rsync备份服务器

2.实时复制概念

  • Inotify-tools 依赖于rsync守护进程 以及要部署复制脚本 监控目录数据的变化
  • Sersync* 依赖于rsync守护进程 需要定制配置文件 监控目录数据的内容变化

3.Inofity+Rsync实施复制实战

无论是Inotify-tools还是Sersync、本身的核心功能都是监控指定目录内的数据变化 ,具体的复制到远端服务器的功能还是借助Rsync工具配合,Inotify机制软件工作流程如下

  • 备份源客户端开机运行Inotify软件,检测指定目录的文件系统变化
  • 一旦获取到指定监控目录的数据发生变化,即刻执行Rsync命令复制数据
  • 将变化的数据发送到Rsync服务端的备份目录。

4.配置好rsync守护进程

systemctl status rsyncd

可以查看我以前的守护进程实践的文章

5.检查linux是否支持inotify

检查当前linux版本,linux内核高于2.6.13版本

[root@localhost backup]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r--. 1 root root 0 Nov 13 02:09 max_queued_events
-rw-r--r--. 1 root root 0 Nov 13 02:09 max_user_instances
-rw-r--r--. 1 root root 0 Nov 13 02:09 max_user_watches
[root@localhost backup]# 
  • max_queued_events 设置intofy实例事件队列可容纳的事件数量
  • max_user_instances 设置每个用户可以运行的事件命令进程数max
  • max_user_watches 设置intify命令检测的文件数量

6.安装inotyify--tools

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

检查有关inotify的操作命令

rpm -ql inotify-tools | head -2

  • inotifywait: 在被监控的目录等待特定文件系统事件 (open、close、delete等事件),执行后处于阻塞状态,适合在Shell脚本中使用,是实现监控的关键
  • Inotifywatch: 收集被监控的文件系统使用的统计数据 (文件系统事件发生的次数统计)

7.inotifywait命令

  • inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树
  • inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事件发生多少次等信息
  • 从上面可知inotifywait是一个监控事件,可以配合shell脚本使用它。与它相关的参数:

语法格式: inotifywait [-hcmrg][-e][-t][-format][-timefmt][...]:

  • -m:即“-monitor”表示始终保持事件监听状态。
  • -d:类似于-m参数,将命令运行在后台,记录出发的事件信息,记录在指定文件里,加上--outfile参数
  • -r:即“-recursive” 表示递归查询目录
  • -q:即“-quiet” 表示打印出监控事件
  • -o:即“-outfile”输出事情到一个文件而不是标准输出
  • -s: 即“-syslog”输入错误信息到系统日志

-format :指定输出格式,常用的格式符

  • %w: 表示发生事件的目录
  • %f: 表示发生事件的文件
  • %e: 表示发生的事件
  • %Xe:事件以“X”分隔
  • %T: 使用由-timefmt定义的时间格式

-timefmt: 指定时间格式,用于-format选项中的%T格式

利用inotify软件监控的事件主要是如下:

  • Events 含义
  • access 文件或目录被读取
  • modify 文件或目录内容被修改
  • attrib 文件或目录属性被改变
  • close 文件或目录封闭,无论读/写模式
  • open 文件或目录被打开
  • moved_to 文件或目录被移动至另外一个目录
  • create 文件或目录被创建在当前目录
  • move 文件或目录被移动到另一个目录或从另一个目录移动至当前目录
  • delete 文件或目录被删除
  • umount 文件系统被卸载

使用这个监控

inotifywait -mrq --timefmt "%F" --format "%T %w %f" -e create /data

参数解释

inotifywait 是命令

-m 表示一直处在检测状态

-r 递归的检测

-q 打印出检测的事件信息

--timefmt 对时间格式化

--format 对日志信息格式化

%T 使用有--timefmt所定义的格式

%w 表示显示事件发生的目录

%f 表示事件发生的文件

-e 默认inotifywait是监控所有事件,可以使用-e单独的指定某种事件 events

这个守护进程会占据整个shell的控制权

这里监控了/data的创建文件信息,我们创建文件看看是否会有输出

这里立刻有了输出

时间不够精细,我们再改一下

inotifywait -mrq --timefmt "%y-%m-%d %T" --format "%T %w %f" -e create /data

%d 日期 几号

%m 月份 1-12

%T 年份的意思 显示后2位

%T 显示时分秒

8.inotifywait可监控事件

inotify所能监控的事件标志如下:

  • IN_ACCESS 被监控项目或者被监控目录中的条目被访问过。例如,一个打开的文件被读取。
  • IN_MODIFY 被监控项目或者被监控目录中的条目被修改过。例如,一个打开的文件被修改。
  • IN_ATTRIB 被监控项目或者被监控目录中条目的元数据被修改过。例如,时间戳或者许可被修改。
  • IN_CLOSE_WRITE 一个打开的,等待写入的文件或目录被关闭。
  • IN_CLOSE_NOWRITE 一个以只读方式打开的文件或目录被关闭。
  • IN_CLOSE 一个掩码,可以很便捷地对前面提到的两个关闭事件(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)进行逻辑操作。
  • IN_OPEN 文件或目录被打开。
  • IN_MOVED_FROM 被监控项目或者被监控目录中的条目被移出监控区域。该事件还包含一个 cookie 来实现 IN_MOVED_FROM 与 IN_MOVED_TO 的关联。
  • IN_MOVED_TO 文件或目录被移入监控区域。该事件包含一个针对 IN_MOVED_FROM 的 cookie。如果文件或目录只是被重命名,将能看到这两个事件,如果它只是被移入或移出非监控区域,将只能看到一个事件。如果移动或重命名一个被监控项目,监控将继续进行。参见下面的 IN_MOVE-SELF。
  • IN_MOVE 可以很便捷地对前面提到的两个移动事件(IN_MOVED_FROM | IN_MOVED_TO)进行逻辑操作的掩码。
  • IN_CREATE 在被监控目录中创建了子目录或文件。
  • IN_DELETE 被监控目录中有子目录或文件被删除。
  • IN_DELETE_SELF 被监控项目本身被删除。监控终止,并且将收到一个 IN_IGNORED 事件。
  • IN_MOVE_SELF 监控项目本身被移动。

我们创建一个delete事件实例

inotifywait -mrq --timefmt "%y-%m-%d T" --format "%T %w %f 当前事件有: %e" -e delete /data

删除一个文件

弹出一个事件

close_write能够监控创建和修改两个事件

inotifywait -mrq --timefmt "%y-%m-%d T" --format "%T %w %f 当前事件有: %e" -e close_write /data

只能检测到创建,不能检测到删除

修改能检测


三、脚本化实现事件检测与rsync进行数据同步

rsync守护进程客户端和服务端配置请看我前面的博客

1.rsync客户端创建同步脚本

mkdir /myshell/
cd /myshell/
vim inoti_rsy.sh

写入下面shell语句

#!/bin/bash
cmd='/usr/bin/inotifywait'
$cmd  -mrq --timefmt "%y-%m-%d %T" --format " %T %w%f 当前事件有: %e" -e close_write,delete /data | \
while read line
do
    cd /data && \
    rsync -avzP  --delete ./ rsync_backup@192.168.0.107::backup --password-file=/etc/rsync.password
done

2.创建/data确保文件存在
 

mkdir /data

chmod 700 /data/

3.测试shell脚本

sudo bash inoti_rsy.sh

再开个shell测试

touch /data/2.txt

可以看到成功同步了

看下服务端同步的文件

修改下2.txt文件

vim /data/2.txt

写入这个

也有同步信息

看下服务端,也已经同步成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/176417.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

易点易动设备管理系统:提升企业设备巡检效率的最佳选择

在现代企业运营中,设备管理扮演着至关重要的角色。设备巡检旨在确保设备的正常运行和及时维护,以确保生产线的顺畅运行和业务的高效执行。然而,传统的设备巡检方法常常效率低下、耗时费力。针对这一问题,易点易动设备管理系统应运…

window文件夹下python脚本实现批量删除无法预览的图片

你是否遇到过下载的图片会发现有些图片会无法预览情况? 有几种原因可能导致一些图片在预览时无法正常显示: 损坏的图片文件: 图片文件可能损坏或者部分损坏,导致无法被正常解析和预览。这种情况可能是因为文件在传输过程中损坏、…

鸿蒙原生应用/元服务开发-AGC分发如何配置版本信息(下)

12.根据《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,自2023年9月初起,在中国大陆地区提供互联网信息服务的APP开发者,需要依法履行APP备案手续,并通过APP分发平台的备案信息核验。 对于2023年9月7日后在AGC新上…

【19年扬大真题】已知a数组int a[ ]={1,2,3,4,5,6,7,8,9,10},编写程序,求a数组中偶数的个数和偶数的平均值

【18年扬大真题】 已知a数组int a[ ]{1,2,3,4,5,6,7,8,9,10}&#xff0c;编写程序&#xff0c;求a数组中偶数的个数和偶数的平均值 int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int os 0;//偶数个数int sum 0;//偶数和float ave 0;//偶数平均值for (int i 0;i <…

不可错过的5款在线UI设计工具,助你事半功倍!

在当今的 UI 设计领域&#xff0c;如果没有合适的 UI 设计工具&#xff0c;无论你的创作能力有多强&#xff0c;你的工作都会受到限制&#xff0c;但许多软件需要会员使用&#xff0c;这不适合新设计师进入工作场所&#xff0c;那么有在线 UI 设计工具吗&#xff1f;关于这个问…

2023 年戴森设计大奖得主是谁?给大楼降温、争取救援机会

2023 年戴森设计大奖得主是谁&#xff1f;给大楼降温、争取救援机会 ​编辑拉风的极客2023/11/22 摘要 当今社会除了持续不断对科技创新保持注目&#xff0c;还有很多年轻发明家为了实际场景的难题提供解决方案。 11 月 15 日&#xff0c;2023 年戴森设计大奖国际大奖名单正…

【20年扬大真题】编写程序,功能是从键盘输入若干4位数字学号,然后输出学号中百位数字是3的学号 (输入0时结束循环)

【20年扬大真题】 编写程序&#xff0c;功能是从键盘输入若干4位数字学号&#xff0c;然后输出学号中百位数字是3的学号 &#xff08;输入0时结束循环&#xff09; #include<stdio.h> #define MaxSize 20 int BaiWei3(int x) {x x / 100;if (x % 10 3) {return 1;}els…

Python实现四个组成不相同且无重复的三位数

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 1.题目&#xff1a;有四个数字&#xff1a;1、2、3、4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; for i in range(1,…

Request 爬虫的 SSL 连接问题深度解析

SSL 连接简介 SSL&#xff08;Secure Sockets Layer&#xff09;是一种用于确保网络通信安全性的加密协议&#xff0c;广泛应用于互联网上的数据传输。在数据爬取过程中&#xff0c;爬虫需要与使用 HTTPS 协议的网站进行通信&#xff0c;这就牵涉到了 SSL 连接。本文将深入研究…

5款可以免费使用的PS软件分享

AdobePhotoshop&#xff0c;简称“PS它是一种由Adobesystems开发和发行的图像处理软件&#xff0c;Photoshop主要处理由像素组成的数字图像。使用其大量的编辑和绘图工具&#xff0c;可以有效地编辑图片。 PS在图像、图形、文字、视频、出版等方面都有很多功能。Adobe支持Windo…

探索数字孪生的潜力:五个最有前景的行业

数字孪生技术正在引领一场新的工业革命&#xff0c;其潜力正在被全球范围内的行业所认识和利用。在未来&#xff0c;数字孪生技术将在许多行业中发挥重要作用&#xff0c;本文带大家共同解析未来数字孪生技术五个最有发展前景的行业。 1.制造业 数字孪生技术可以帮助制造商模…

Self-Supervised Exploration via Disagreement论文笔记

通过分歧进行自我监督探索 0、问题 使用可微的ri直接去更新动作策略的参数的&#xff0c;那是不是就不需要去计算价值函数或者critic网络了&#xff1f; 1、Motivation 高效的探索是RL中长期存在的问题。以前的大多数方式要么陷入具有随机动力学的环境&#xff0c;要么效率…

ProPresenter 7 for Mac:Mac电脑好用的文稿演示软件

ProPresenter 7是一款专业的多媒体演示软件&#xff0c;主要用于创建和展示高质量的教堂媒体演示、音乐歌词、幻灯片和视频等。它是一款功能强大且易于使用的软件&#xff0c;被广泛应用于教堂、会议、演唱会和其他场合。以下是ProPresenter 7的一些主要特点和功能&#xff1a;…

C/C++结构体给函数传参

C语言中结构体给函数传参有两种方法&#xff1a; 1.值传递&#xff08;修改形参不改变原值&#xff09; void fun(STUDENT student){……} int main(){fun(student); }2.引用传递&#xff08;传的是地址&#xff0c;修改形参会改变原值&#xff09; void fun(STUDENT * stud…

内容输入.type

内容输入.type 查看完整说明 语法 .type(text) .type(text, options)正确用法 cy.get(input).type(Hello, World) // Type Hello, World into the input错误用法 cy.type(Welcome) // Errors, cannot be chained off cy cy.clock().type(www.cypress.io) // Errors, clock…

咖啡馆配送小程序商城效果如何

咖啡馆在部分地区数量多且准属性客户多&#xff0c;在其它地方也有不少线下门店&#xff0c;近些年随着客户普遍线上消费&#xff0c;传统依赖线下自然流量的门店生意增长困难。 线上已然成为商家优选方式&#xff0c;那么通过【雨科】平台搭建咖啡馆小程序可以做到哪些效果呢…

Vue框架学习笔记——指令语法:v-bind动态绑定属性、data的层级结构

文章目录 指令语法v-bind&#xff0c;增加标签内属性动态绑定方式 data的层级结构 指令语法 在标签中想让属性动态变化的时候&#xff0c;不能使用插值语法。 插值语法一般用于标签体中&#xff0c;当针对标签的里面的时候&#xff0c;例如标签属性&#xff0c;就可以使用指令…

文心大模型商业化领跑,百度在自我颠覆中重构生长力

随着科技巨头竞逐AI大模型&#xff0c;人工智能技术成为今年最受瞩目的新技术。但是&#xff0c;AI大模型的创新之路&#xff0c;还缺少一个足够有力的商业化答案。 作为全球最先发布大模型的互联网大厂&#xff0c;百度能否加速大模型的应用落地&#xff0c;以及文心大模型能…

笔记58:Encoder-Decoder 架构

本地笔记地址&#xff1a;D:\work_file\&#xff08;4&#xff09;DeepLearning_Learning\03_个人笔记\3.循环神经网络\第9章&#xff1a;动手学深度学习~现代循环神经网络 a a a a a a a a a

ON1 Photo RAW 2024 for Mac——专业照片编辑的终极利器

ON1 Photo RAW 2024 for Mac是一款专为Mac用户打造的照片编辑器&#xff0c;以其强大的功能和易用的操作&#xff0c;让你的照片编辑工作变得轻松愉快。 一、强大的RAW处理能力 ON1 Photo RAW 2024支持大量的RAW格式照片&#xff0c;能够让你在编辑过程中获得更多的自由度和更…