实时数据备份实践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 updateyum -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
docd /data && \rsync -avzP  --delete ./ rsync_backup@192.168.0.107::backup --password-file=/etc/rsync.password
done

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

mkdir /datachmod 700 /data/

3.测试shell脚本

sudo bash inoti_rsy.sh

再开个shell测试

touch /data/2.txt

可以看到成功同步了

看下服务端同步的文件

修改下2.txt文件

vim /data/2.txt

写入这个

也有同步信息

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全民阅读营造良好氛围 助力培养孩子阅读习惯

日前,2023年全民终身学习活动周全国总开幕式在重庆举行,自2005年起,终身学习活动周已连续举办了18届,累计带动4亿多群众参与全民终身学习活动周,有效推进全面阅读。 随着全民阅读氛围的持续浓厚,阅读不再是语文学科的专项,不再是学校教育的专属,家庭、社会都在积极参与进来。尤…

web自动化测试-Selenium语法入门到精通

前言 说到自动化测试,就不得不提大名鼎鼎的Selenium。Selenium 是如今最常用的自动化测试工具之一,支持快速开发自动化测试框架,且支持在多种浏览器上执行测试。 Selenium学习难度小,开发周期短。对测试人员来说,如果…

【STM32外设系列】JW01三合一空气质量检测模块

🎀 文章作者:二土电子 🌸 关注公众号获取更多资料! 🐸 期待大家一起学习交流! 文章目录 一、JW01模块简介二、数据格式介绍三、程序设计3.1 串口初始化3.2 串口接收中断服务函数3.3 数据解析函数 四、其他…

【数据结构(三)】双向链表(2)

文章目录 1. 基本概念2. 管理双向链表的思路3. 代码实现 1. 基本概念 管理单向链表的缺点分析: ①单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。     ②单向链表不能自我删除,需要靠辅助节点 ,而双向…

三柱汉诺塔

题目描述 汉诺塔是约19世纪末,在欧州的商店中出售一种智力玩具。它的结构如下图所示: 在一个平板上立有三根铁针,分别记为A, B, C。开始时,铁针 A 上依次叠放着从大到小 n 个圆盘,游戏的目标就是将 A 上的 n 个圆盘…

vivado调试核ILA使用技巧

ILA(Integrated Logic Analyzer)IP Core 是 vivado 的调试核,具体如何创建、调用就不详说了。这里主要记录一个 ILA 的使用技巧,可以大大提高调试效率。 在 Program Device 后,如果添加了 ILA 核,则会出现以…

在有springSecurity或者若依项目中获取当前系统登录的用户信息

方法一(springSecurity自带的) AuthenticationPrincipal 是 Spring Security 框架中的一个注解,用于获取当前已认证用户的 principal(即用户身份信息)。 方法二(若依项目自带的) (1…

如何有效解决UDP协议传输问题实现快速安全的文件传输

随着互联网技术的不断发展,UDP协议作为一种快速、简单的传输协议被广泛应用于文件传输领域。然而,UDP协议传输过程中也存在着一些问题,如传输速度不稳定、数据丢失等,这些问题会影响到文件传输的效率和安全性。本文将介绍UDP协议传…

windows 查看防火墙设置命令使用方法

点击键盘上windows键,输入cmd,选择以管理员身份运行 输入下面命令查看使用说明 netsh advfirewall firewall add rule ? 发现显示不全,不方便看 可以输入下面命令,生成文件,方便查看 netsh advfirewall firewall ad…

webshell之无扩展免杀

1.php加密 这里是利用phpjiami网站进行加密,进而达到加密效果 加密前: 查杀效果 可以看到这里D某和某狗都查杀 里用php加密后效果 查杀效果 可以看到这里只有D某会显示加密脚本,而某狗直接绕过 2.dezend加密 可以看到dezend加密的特征还是…

【开源】基于Vue.js的康复中心管理系统

项目编号: S 056 ,文末获取源码。 \color{red}{项目编号:S056,文末获取源码。} 项目编号:S056,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员…

不存在类型变量 A, T 的实例,使 Collector<T, A, List<T>> 符合 Supplier<R>

报错信息 原因: 不存在类型变量 A, T 的实例&#xff0c;使 Collector<T, A, List<\T>> 符合 Supplier<\R> 来源 测试Stream流的map方法&#xff0c;做算法习惯基本类型定义数组。 map方法:Stream API的一部分。允许以一种声明式的方式处理数据&#xff0c…

2 Advanced Learning Algorithms

文章目录 Week1Neurons and brainNeural network layerForward propagationBuild a netural network ------codeAGIMatrix multiplication ------code Week2Tensorflow--- training detailsactivation functionsMultclass and SoftmaxClassification with multiple outputsAdam…

《算法通关村——幂运算问题解析》

《算法通关村——幂运算问题解析》 2 的幂 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1…

网站被攻击了怎么办,有什么办法防御攻击?

近年来&#xff0c;随着互联网发展&#xff0c;出现了各种各样的网站&#xff0c;web应用&#xff0c;网络极大方便了人们的生活&#xff0c;改变了人们生活方式。而随着网络的发展普及&#xff0c;网络安全问题也困扰着用户。 许多人都曾有过这样经历&#xff0c;网站上线后&…

【项目管理】甘特图(1)——认识甘特图

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 今天学习下甘特图的绘制&#xff0c;以下为学习笔记。 一、什么是甘特图 甘特图是可以直观展示项目进展随时间走势和联系的条状图。是一种常见的项目管理工具。 项目的时间用横轴表示&#xff0c;项目的进度用纵轴表…

灾备建设中,跨主机集群恢复技术应用

在介绍跨主机集群恢复之前&#xff0c;要了解到虚拟化主机集群是什么&#xff1f; 虚拟化主机集群是一种把一组主机组合起来形成一个整体&#xff0c;向用户提供资源方式&#xff08;计算存储、存储资源、网络资源&#xff09;的技术。 虚拟化集群具有以下特性&#xff1a; …

漏洞复现--捷诚管理信息系统多处SQL注入

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

HSV映射到圆锥坐标系

def bgr2hsvcone(img):arr_hsv cv2.cvtColor(img, cv2.COLOR_BGR2HSV)h arr_hsv[..., 0] / 180. * 2s arr_hsv[..., 1] / 255.v arr_hsv[..., 2] / 255.x np.cos(h * np.pi) * s * vy np.sin(h * np.pi) * s * vreturn np.stack((x, y, v), axis-1)

【ThingJS】类型转换以及注册

前言 目前国家提倡加快数字化发展&#xff0c;建设数字中国&#xff0c;并于今年2月份中共中央、国务院印发的《数字中国建设整体布局规划》中明确&#xff0c;数字中国建设按照“2522”的整体框架进行布局。其中提到“构建以数字孪生流域为核心的智慧水利体系”&#xff0c;可…