inotify工具介绍及实时复制实践

简介:

  inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除,修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施这样监控的软件。国人周洋在金山公司开发的sersync。

  inotify实际是一种实际驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无需通过诸如cron等的轮询机制来获取事件。cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到事件处理的实时响应,也没用轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界的事件机制相符合。

  inotify的实现由几款软件:inotify-tools、sersync(金山周洋)、isyncd

特别说明:下面的inotify配置是建立在rsync服务基础上的配置过程。

wKiom1mJ2KnwngDYAAES5ITv7vs718.jpg

本例是在nfs服务器上面搭建inotify-tools

  1. inotify实时准备

大前提rsync daemon服务配置成功,可以再rsync客户端推送拉去数据,然后才能配置inotify服务。

2.开始安装

在安装inotify-tools前请确认你的linux内核是否达到2.6.13,并且在编译时开启CONFIG INOTIFY选项,也可以通过以下命令检测。

   2.1查看当前系统是否支持inotify

在nfs服务器上面操作:

[root@oldboy ~]# uname -r
2.6.32-642.el6.x86_64
[root@oldboy ~]# ls -l /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Aug  8 23:48 max_queued_events
-rw-r--r-- 1 root root 0 Aug  8 23:48 max_user_instances
-rw-r--r-- 1 root root 0 Aug  8 23:48 max_user_watches

需要出现这个三个max才可以。

查看有没有安装inotify-tools

[root@oldboy ~]# rpm -qa inotify-tools

如果没有安装要yum安装以下,前提是机器可以上网。

2.2下载inotify源码包




[root@oldboy ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
--2017-08-09 00:05:15--  http://mirrors.aliyun.com/repo/epel-6.repo
Resolving mirrors.aliyun.com... 112.124.140.210, 115.28.122.210
Connecting to mirrors.aliyun.com|112.124.140.210|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1083 (1.1K) [application/octet-stream]
Saving to: “/etc/yum.repos.d/epel.repo”

100%[=================================================>] 1,083       --.-K/s   in 0s     

2017-08-09 00:05:15 (91.5 MB/s) - “/etc/yum.repos.d/epel.repo” saved [1083/1083]

安装

[root@oldboy ~]# yum install inotify-tools -y
Loaded plugins: fastestmirror, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: mirrors.nju.edu.cn
 * epel: mirrors.aliyun.com
 * extras: mirrors.nju.edu.cn
 * updates: mirrors.cqu.edu.cn
epel                                                                | 4.3 kB     00:00     
epel/primary_db                                                                                               | 5.9 MB     00:20     
Resolving Dependencies
--> Running transaction check
---> Package inotify-tools.x86_64 0:3.14-1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=====================================================================================================================================
 Package                             Arch                         Version                           Repository                  Size
=====================================================================================================================================
Installing:
 inotify-tools                       x86_64                       3.14-1.el6                        epel                        46 k

Transaction Summary
=====================================================================================================================================
Install       1 Package(s)

Total download size: 46 k
Installed size: 104 k
Downloading Packages:
inotify-tools-3.14-1.el6.x86_64.rpm                                                                           |  46 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : inotify-tools-3.14-1.el6.x86_64                                                                                   1/1 
  Verifying  : inotify-tools-3.14-1.el6.x86_64                                                                                   1/1

Installed:
  inotify-tools.x86_64 0:3.14-1.el6                                                                                                 

Complete!

安装完成。

工具集介绍:

一共安装了2个工具(命令),即inotifywait和inotifywatch

inotifywait:在被监控的文件或目录上等待待定文件系统事件(open、close、delete)发生,

执行后处于阻塞状态,适合在shell脚本中使用。

inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计。

举例:1.监控创建:

[root@oldboy ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /backup

再开一个窗口,在cd /backup目录中touch a b

在刚才第一个创建就出现:
[root@oldboy ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /backup
09/08/17 00:21 /backup/a
09/08/17 00:21 /backup/b

说明创建成功。

2.监控创建,删除。

[root@oldboy ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,delete /backup

3.测试创建新文件和修改文件。

[root@oldboy ~]# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write /backup


共享存储实时备份(共享存储的单点解决方案)

第一个里程碑

a.实现从nfs客户端到rsync服务端的rsync服务部署

第二个里程碑

b.实现从nfs客户端对nfs目录文件系统事件的实时监控。

第三个里程碑

c.当监控到nfs目录文件系统事件变化后,出发rsync推送变化的文件。

方法1:(下面脚本格式一定不能变,否则sh inotify.sh的时候会报错)

/usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete /data \
|while read file
 do
  cd /data &&\
  rsync -az ./ --delete rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
  done


上面的脚本写到/server/scripts/inotify.sh文件中,文件是不存在的,得手动创建。

[root@oldboy scripts]# cat inotify.sh
/usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete /data \
|while read file
 do
  cd /data &&\
  rsync -az ./ --delete rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
  done

然后在nfs服务器上面运行命令

[root@oldboy scripts]# sh inotify.sh

在backup-41服务器上面输入

[root@backup ~]# cd /nfsbackup

[root@backup nfsbackup]# rm -fr *

[root@backup nfsbackup]# watch -n1 ls

再把nfs-31服务器重新添加一个会话,然后再:

[root@oldboy ~]# cd /data

[root@oldboy data]# rm -f a

[root@oldboy data]# touch a

[root@oldboy data]# touch b
[root@oldboy data]# touch c
[root@oldboy data]# touch d

来个更狠的直接用循环语句创建1000个stu1-stu1000个文件

[root@oldboy data]# for n in `seq 1000`;do touch stu$n;done

再到backup-41服务器上面查看会同步a b c d 1000个文件

如果不想实现同步,就到nfs31机器中把sh inotify.sh终止,然后输入sh -x inotify.sh就不会在

backup服务器上面同步数据了。


nfs服务器inotify.sh的脚本可以修改为:

Path=/data

Ip=172.16.1.41
/usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete $Path \
|while read file
 do
  cd $Path &&\
  rsync -az ./ --delete rsync_backup@$Ip::nfsbackup --password-file=/etc/rsync.password
  done

查看有多少行ls|wc -l

本文转自sandshell博客51CTO博客,原文链接http://blog.51cto.com/sandshell/1954651如需转载请自行联系原作者


sandshell

相关文章
|
1天前
|
Linux 应用服务中间件 PHP
性能工具之linux常见日志统计分析命令
通过本文的介绍,我相信同学们一定会发现 linux三剑客强大之处。在命令行中,它还能够接受,和执行外部的 AWK 程序文件,可以对文本信息进行非常复杂的处理,可以说“只有想不到的,没有它做不到的。
14 1
|
2月前
|
数据采集 分布式计算 Linux
Spark实时(数据采集)项目小知识点--sed -i命令详解及入门攻略
Spark实时(数据采集)项目小知识点--sed -i命令详解及入门攻略
110 0
|
数据采集 缓存 JSON
网站流量日志 Flume 收集--配置文件编写和实操| 学习笔记
快速学习网站流量日志 Flume 收集--配置文件编写和实操
252 0
网站流量日志 Flume 收集--配置文件编写和实操| 学习笔记
|
关系型数据库 MySQL Shell
Python3,实用技巧之:批量处理数据、本地集成命令、查看服务器日志
Python3,实用技巧之:批量处理数据、本地集成命令、查看服务器日志
146 0
|
存储 运维 监控
用这个小工具解决了Linux下文件实时和增量同步两大问题
用这个小工具解决了Linux下文件实时和增量同步两大问题
用这个小工具解决了Linux下文件实时和增量同步两大问题
|
运维 关系型数据库 MySQL
Linux下MySQL 5.7的离线与在线安装(图文)
Linux下MySQL 5.7的离线与在线安装(图文)
Linux下MySQL 5.7的离线与在线安装(图文)
|
SQL 前端开发 关系型数据库
《懒人Shell脚本》之八——定期备份Mysql数据库表的实现
0.背景 实际开发环境中,前端程序需要在给定时间段内,将数据更新/插入到mysql指定的库表中。随着数据量的增多,基础库表基数的增长,每更新一次都会有5s左右的卡顿。
150 0
|
监控 Shell API
使用inotify-tools与rsync构建实时备份系统
使用inotifywait监控文件变动 inotifywait是 inotify-tools 包中提供的一个工具,它使用 inotify API 来监控文件/目录中的变动情况。
814 0
|
Shell 网络安全
Lsyncd - 实时文件同步工具(精译)
原文: http://axkibe.github.io/lsyncd/ 描述 Lsyncd监视本地目录树事件监视器接口(inotify或fsevents)。它聚集并组合事件几秒钟,然后生成一个(或多个)进程(es)来同步这些更改。
3008 0

热门文章

最新文章