首页 > 其他分享 >实时备份工具之inotify+rsync

实时备份工具之inotify+rsync

时间:2023-06-30 13:44:18浏览次数:32  
标签:rsync inotify -- max 备份 00 目录

1.inotify简介

inotify 是一个从 2.6.13 内核开始,对 Linux 文件系统进行高效率、细粒度、异步地监控机制, 用于通知用户空间程序的文件系统变化。可利用它对用户空间进行安全、性能、以及其他方面的监控。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。如果内核版本不低于 2.6.13,系统就支持 inotify。 如果存在
/usr/include/sys/inotify.h 文件, 表明内核支持 inotify。

1[root@localhost ~]#  ls -l /proc/sys/fs/inotify/     #列出文件目录,出现下面的内容,说明服务器内核支持inotify
2total 0
3-rw-r--r-- 1 root root 0 Oct 13 05:39 max_queued_events
4-rw-r--r-- 1 root root 0 Oct 13 05:39 max_user_instances
5-rw-r--r-- 1 root root 0 Oct 13 05:39 max_user_watches

2.inotify的作用

inotify 可以监控文件,也可以监控目录。当监控目录时,它可以同时监控目录及目录中的各子目录及文件的。此外, inotify 使用文件描述符作为接口,因而可以使用通常的文件 I/O 操作 select、 poll 和 epoll 来监视文件系统的变化。

3.inotify实现数据实时同步原理

无论是手动执行 rsync 还是把 rsync 客户端发出的数据同步请求命令做成周期性任务计划, 每隔一段时间不管有没有数据变化都发出一次数据同步请求命令, 同步一次数据。 服务端和客户端都有时间差。所以, 使用内核提供的 inotify 机制,当数据发生改变时(删除、修改等)就触发 rsync 客户端发出数据 同步请求。 从而实现数据的实时传输。
rsync + inotify 机制实现的两台服务器数据同步如下图如示:

4.inotify的安装与使用

1[root@localhost ~]# yum install -y inotify-tools
2[root@localhost ~]# inotifywait -mrq --timefmt '%d%m%Y %H:%M' --format '%T %w%f' -e create /backup  #创建对目录/backup的监控
317102017 00:02 /backup/1.txt
417102017 00:02 /backup/2.txt
517102017 00:02 /backup/3.txt
617102017 00:02 /backup/4.txt
717102017 00:02 /backup/5.txt

5.inotify之inotifywait命令详解

 1参数详解:
2-r:递归查询目录
3-q:打印监控时间信息
4-m:始终保持时间监听状态
5--excludei: 排除文件或目录时,不区分大小写。
6--timefmt: 指定时间输出的格式
7--format: 打印使用指定的输出类似格式字符串
8a、 %w:显示被监控文件的文件名;
9b、 %f:如果发生某事件的对象是目录,则显示被监控目录的名字;默认显示为空串;
10c、 %T:使用--timefmt 选项中自定义的时间格式;
11d、 %e 表示发生的事件
12e、 %Xe 事件以“X”分隔
13-e:指定需要监控的事件
14access: 文件或目录被读取
15modify: 文件或目录内容被修改
16attrib: 文件或目录属性被改变
17close: 文件或目录封闭,无论读/写模式
18open:文件或目录被打开
19move_to:文件或目录被移动到另外一个目录
20move:文件或目录被移动另一个目录或从另一个目录移动到当前目录
21create:文件或目录被创建在当前目录
22delete:文件或目录被删除
23unmount:文件系统被卸载
24常用组合:close_write,modify,delete,create,attrib 

6.编写监控脚本

 1[root@nfs scripts]# vim inotify.sh
2#!/bin/bash
3/usr/bin/inotifywait -mrq '%w%f' -e close_write,modify,delete,create /backup \
4| while read line
5do
6cd /backup && rsync -azP ./ [email protected]::backup/ --password-file=/etc/rsync.password >/dev/null 2>&1
7done
8exit 0
9[root@nfs scripts]# sh inotify.sh &             #<==运行脚本监控/backup
10[root@nfs scripts]# touch /backup/{1..10}.log           #<==NFS上创建文件进行测试    
11[root@backup backup]# ll                    #<==备份服务上查看是否备份成功   
12total 4
13-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 10.log
14drwxr-xr-x 2 rsync rsync 4096 Oct 12 21:43 192.168.0.165
15-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 1.log
16-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 2.log
17-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 3.log
18-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 4.log
19-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 5.log
20-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 6.log
21-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 7.log
22-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 8.log
23-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 9.log
24[root@nfs scripts]# echo "/bin/bash /server/scripts/inotify.sh &" >> /etc/rc.local  #<==设置开机启动

7.修改inotify默认参数(inotify默认内核参数值太小)

 1查看系统默认参数值
2sysctl -a | grep max_queued_events
3结果是:fs.inotify.max_queued_events = 16384
4sysctl -a | grep max_user_watches
5结果是:fs.inotify.max_user_watches = 8192
6sysctl -a | grep max_user_instances
7结果是:fs.inotify.max_user_instances = 128
8修改参数:
9sysctl -w fs.inotify.max_queued_events="99999999"
10sysctl -w fs.inotify.max_user_watches="99999999"
11sysctl -w fs.inotify.max_user_instances="65535"
12vim /etc/sysctl.conf #添加以下代码
13fs.inotify.max_queued_events=99999999
14fs.inotify.max_user_watches=99999999
15fs.inotify.max_user_instances=65535
16:wq! #保存退出
17
18参数说明:
19max_queued_events:
20inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
21max_user_watches:
22设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
23max_user_instances:
24每个用户创建inotify实例最大值
25【inotify在实际生产环境中,对于50-200KB的文件,inotify的最发并发量为200-300,如果客户端写入速度大于这个量,将会造成短暂的延迟】

8.总结

11 rysnc+inotify实时备份流程:
22 a.实现从NFS客户端到rsync服务端的rsync的部署
33 b.实现从NFS客户端对NFS目录文件系统时间的实时监控
44 c.当监控到NFS目录文件系统事件变化后,触发rsync推送变化的文件
最后来一张总结图:

 

标签:rsync,inotify,--,max,备份,00,目录
From: https://www.cnblogs.com/msjhw/p/17516581.html

相关文章

  • Jenkins备份和恢复
    1.安装备份插件重启系统后查看2.配置周期备份点击进入,点击SettingsBackuponlybuildsmarkedtokeep,如果启用此选项,则仅备份标记为“永久保留此生成”的生成结果/项目。如下图BackupuserContentfolder ~/.jenkins/userContent目录Backupnextbuildnumber......
  • 计划作业系列三:文件备份
    文件备份是一个很普遍的需求下载FreeFileSyncFreeFileSync另存为批处理,它会生成一个名为'BatchRun.ffs_batch'的xml文件。$trigger=New-JobTrigger-Once-At"8am"-RepetitionInterval(New-TimeSpan-Hour1)-RepetitionDuration([TimeSpan]::MaxValue)Register-Sche......
  • 数据库备份、还原与恢复
    开篇一张图,内容全靠编。一本正经de胡说八道:数据库备份、还原与恢复基本概念  如果了解过其它数据库(如oracle)的备份,肯定见过类似这样的一句话:普通完全备份不可以做为增量备份的基备份;或者,执行增量备份时,系统会自动做一次0级的备份(如果没有0级备份)。那为什么其它数据库不可以......
  • stm32 IAP升级 OTA升级 野外设备远程升级 自建FTP服务器升级 多App备份 切换,防变砖
    stm32IAP升级OTA升级野外设备远程升级自建FTP服务器升级 多App备份切换,防变砖芯片stm32f103系列4G模块EC200T程序简介:一个bootloader程序 多个主程序程序可相互切换主程序A出厂前烧录,永不更改,用于升级失败后,做应急程序使用,保障单片机不变砖主程序B日常运行,可升级......
  • 实时数据同步Inofity、sersync、lsyncd
    数据备份方案企业网站和应用都得有完全的数据备份方案确保数据不丢失,通常企业有如下的数据备份方案定时任务定期备份需要周期性备份的数据可以分两类:后台程序代码、运维配置文件修改,一般会定时任务执行脚本进行文件备份,然后配置Rsync工具推送到远程服务器备份对于数据库文件......
  • rsync备份任务练习
    06-备份任务实战今天的任务主要以实际备份任务入手,完成综合练习,完成对rsync的综合运用。先看需求再讲解再次动手实践  客户端需求客户端需求:1.客户端每天凌晨1点在服务器本地打包备份(/etc目录和/var/log目录)2.客户端备份的数据必须存放至以"主机名_ip地......
  • inotifywait 监控文件修改实时格式化文件
    我们在学习laravel过程中,从文档网页复制代码,会有一些比较麻烦的问题。以《Laravel10中文文档》|LaravelChina社区(learnku.com)为例 直接点复制按钮会带后,想测试的代码的话,还有处理use语句选中复制时,网站会向剪贴板追加来源信息,还得手动处理。 这些手动处理......
  • Elasticsearch的数据备份与恢复
    1、序言Elasticsearch默认配置是数据持久化的,就是ES会定时地把缓存数据刷新到硬盘,从而达到数据持久化地效果。在生产环境中,ES的数据持久化是必须的,防止出现断电时数据的丢失。固然,除了数据持久化外,咱们也是得作到数据备份的,防止出现数据损坏时没法恢复数据的状况。下面开始介绍ES......
  • 360安全卫士软件基础设置(备份)
    安装360(已不使用任何360产品,该笔记仅作备份)360弹窗广告关闭1、初次安装后左下角出现新的搜索框。右键新搜索框>点击config图标>关闭热点轮播、动画提示、猜你喜欢>更多设置>永久退出>继续退出2、关闭360卫士设置弹窗广告>标签路径基本设置功能定制......
  • U8备份账套恢复为不同账套号,进行删除操作数据时提示:当前对应的账套不存在处理方法
    现象:U8备份账套恢复为不同账套号,进行删除操作数据时提示:当前对应的账套不存在 处理方法:该账套的原始账套存在协同,我们在协同中添加一个账套协同即可解决,使用完成后可以删除 ......