inotify软件部署及实时同步
声明:博主使用的是CentOS6.9的系统
参考资料:
https://github.com/rvoicilas/inotify-tools/wiki
http://www.ibm.com/developerworks/cn/linux/l-inotifynew/
inotify--Linux 2.6内核中的文件系统变化通知机制
安装inotify须知
首先,在安装inotify软件之前一定要确认系统中,必须要存在的三个文件
[root@backup ~]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Oct 17 10:13 max_queued_events
-rw-r--r-- 1 root root 0 Oct 17 10:13 max_user_instances
-rw-r--r-- 1 root root 0 Oct 17 10:13 max_user_watches
max_user_watches ----默认数值8192,设置inotifywait和inotifywatch命令可以监控的文件数量(单进程情况)
max_user_instances ----默认数值128,设置每个用户可以运行的inotifywait和inotifywatch命令的进程数
max_queued_events ----默认数值16384,设置inotify实例事件,队列可容纳的事件数量
具体想要知道三个文件的作用可以使用man帮助查看
inotify软件主要工具命令
—共安装了 2个工具(命令),即inotifywait和inotifywatch
inotifywait : 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用
inotifywatch : 收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。
说明:yum安装后可以直接使用,如栗编译安装需要进入到相应软件目录的bin目录下使用
#命令man手册说明
# man inotifywait inotifywait - wait for changes to files using inotify
使用inotify进行监控,等待产生变化的文件信息
# man inotifywatch inotifywatch - gather filesystem access statistics using inotify
使用inotify进行监控,收集文件系统访问统计信息
相关参数
命令参数 |
参数说明 |
---|---|
-m|--montitor (重要参数) |
始终保持事件监听状态 |
-d|--daemon |
类似与-m,只是将命令运行在后台 |
-r (重要参数) |
递归监控目录数据信息变化 |
-o|--outfile<file> |
打印事件到文件中,相当于标准输出 |
-s|--syslog |
发送错误到syslog相当于错误输出 |
-q|--quiet (重要参数) |
输出少量信息(只打印事件信息) |
--excludei<pattern> (重要参数) |
排除文件或目录 i不区分大小写 |
--timefmt<fmt> (重要参数) |
指定时间输出格式 |
--format<fmt> |
打印使用指定的输出类似格式字符串;即实际监控输出的内容 |
-e (重要参数) |
指定监听指定的事件,省略不加,表示所有事件都监听 |
--timefmt<fmt>可用参数
命令参数 |
参数说明 |
---|---|
%d (重要参数) |
每月的第几天,显示信息为十进制数(范围是01-31) |
%m (重要参数) |
显示月份,显示信息为十进制数(范围是01-12) |
%M |
显示分钟,显示信息为十进制数(范围是00-59) |
%y (重要参数) |
年份信息,显示信息为十进制数,并且没有世纪信息 |
%Y |
年份信息,显示信息为十进制数,并且包含世纪信息 |
%H |
小时信息,显示信息为十进制数,使用24小时制(范围是00-23) |
说明:以上信息可以通过man strftime 信息获取 |
--format<fmt>可用参数
命令参数 |
参数说明 |
---|---|
%w (重要参数) |
事件出现时,监控文件或目录的名称信息 |
%f (重要参数) |
事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空。 |
%e (重要参数) |
显示发生的事件信息,不同的事件信息用逗号进行分隔 |
%Xe |
显示发生的事件信息,不同的事件信息用X进行分隔,可以修改X为指定分隔符 |
%T (重要参数) |
这个格式是通过strftime函数进行匹配时间格式信息的 |
说明:以上信息可以通过man inotifywait信息中,查询-format参数进行获取得知 |
监控中事件说明
事件名称 |
事件说明 |
---|---|
access |
文件或目录内容被读取 |
modify |
文件或目录内容被写入 |
attrib |
文件或目录属性改变 |
close_write (重要参数) |
文件或目录关闭,在写入模式打开之后关闭的。 |
close_nowrite |
文件或目录关闭,在只读模式打开之后关闭的 |
close |
文件或目录关闭,不管读或是写模式 |
open |
文件或目录被打开 |
moved_to |
文件或目录被移动到监控的目录中 |
moved_from |
文件或目录被移动出监控的目录中 |
move (重要参数) |
文件或目录不管移动到或是移动出监控目录都触发事件 |
create (重要参数) |
文件或目录创建在监控的目录中 |
delete (重要参数) |
文件或目录被删除在监控的目录中 |
delete_self |
文件或目录被删除 |
unmount |
文件系统包含的文件或目录不能卸载 |
重要监控事件参数汇总表
inotify软件部署
在安装inotify之前首先要确认rsync服务是否安装部署好
inotify的安装
[root@nfs01 data]# yum install -y inotify-tools
[root@nfs01 data]# rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch
安装完成后,进行监控测试
使用的测试命令:
inotifywait -mr /data/ --format "%w%f 事件信息: %e" -e create,delete,moved_to,close_write
创建文件监控事件(create):
/data/ CREATE oldboy.txt
/data/ OPEN oldboy.txt
/data/ ATTRIB oldboy.txt
/data/ CLOSE_WRITE,CLOSE oldboy.txt
创建目录监控事件(create):
/data/ CREATE,ISDIR 1
删除事件(delete):
/data/o1.txt 事件信息: DELETE
修改事件(close_write):
/data/oldgirl.txt 事件信息: CLOSE_WRITE@CLOSE
/data/.oldgirl.txt.swx 事件信息: CLOSE_WRITE@CLOSE
/data/.oldgirl.txt.swx 事件信息: DELETE
/data/.oldgirl.txt.swp 事件信息: CLOSE_WRITE@CLOSE
/data/.oldgirl.txt.swp 事件信息: DELETE
/data/.oldgirl.txt.swp 事件信息: CLOSE_WRITE@CLOSE
/data/.oldgirl.txt.swp 事件信息: DELETE
移动事件(move):
移动进来
/data/hosts 事件信息: MOVED_TO
移动出去
/data/hosts 事件信息: MOVED_FROM
利用脚本实现简单的实时同步
使用的命令:
rsync服务: rsync -az /data/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
inotify服务:inotifywait -mrq /data --format "%w%f" -e create,delete,moved_to,close_write
#!/bin/bash
inotifywait -mrq /data --format "%w%f" -e create,delete,moved_to,close_write|while read line
do
rsync -az --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
done
此脚本太过简单,想要让其在后台运行可以使用screen、&等方式。
博主能力有限,如果还想要更丰富的功能需要自己完善脚本
inotify优点
监控文件系统事件变化,通过同步工具实现时数据同步
inotify缺点
- 并发如果大于200个文件(4-100 k ),同步就会有延迟
- 前面写的脚本,每次都是全部推送一次,但确实是増量的。也可以只同步变化的文件,不变化的不理。
- 监控到事件后,请用rsync同步是单线程的(加&并发),sersync是多线程同步。
如果拿inotify与sersync相比,博主推荐使用sersync
能力有限,不好的地方请大家多多提议
- 源码解读提高RGW并发数-fastcgi模式
- ceph-rest-api 用例
- 数据字典项实现方案
- Common Service Locator library
- 源码解读bucket 删除中的一些细节
- 论Spark Streaming的数据可靠性和一致性
- RGW 的GC深入解析与调优
- 大数据查询——HBase读写设计与实践
- 基于Logstash的自动化运维系统实现
- 简谈RGW的index shard计算
- Blackpearl 的 Impersonate
- SparkMLLib中基于DataFrame的TF-IDF
- 运用Python实现WordPress网站大规模自动化发布文章
- 基于java的中文分词工具ANSJ
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 寻找质数—埃式筛法
- 语义分割之Dice Loss深度分析
- SAP CRM One Order函数SAVE_EC的设计原理
- SAP CRM One Order函数CHANGE_OW的设计原理
- 关于checkpoint你可能不知道的事
- SAP CRM One Order函数CRM_Object_FILL_OW的设计原理
- SAP CRM One Order header extension的缓存机制设计原理
- SAP CRM数据库表CRMD_CUMULAT_H的设计原理
- Python从入门到大师一百篇教程 | 前言:Python的前世和发展
- Java和ABAP的垃圾回收机制(Garbage Collection)比较
- Java和SAP ABAP的异常处理
- Java的字节码和ABAP load的比较
- matplotlib | Python强大的作图工具,让你从此驾驭图表(一)
- 使用ES6的fetch API读取数据时要注意的一个和cookie相关的坑
- 跟牛老师一起学WEBGIS——WEBGIS基础(地图切片)