inotify简介:

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

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

  rsync(remote sync)远程同步工具,通过rsync可以实现对远程服务器数据的增量备份同步,但rsync自身也有瓶颈,同步数据时,rsync采用核心算法对远程服务器的目标文件进行比对,只进行差异同步。我们可以想象一下,如果服务器的文件数量达到了百万甚至千万量级,那么文件对比将是非常耗时的。而且发生变化的往往是其中很少的一部分,这是非常低效的方式。inotify的出现,可以缓解rsync的不足之处,取长补短。

案例:(测试数据)

实时热备服务器 192.168.43.200

netserver-inotify服务器 192.168.43.117

---------------------------------------------------------------------------------------------------------------

在实时热备服务器上配置:

rsync-server服务端配置:截图略,详细配置见 https://www.cnblogs.com/su-root/p/10086190.html

①vi /etc/rsyncd.conf  添加如下代码↓↓↓↓↓↓

#Rsync server

#created by bqh 21:30 2018-12-05
#rsyncd.conf start
uid = rsync                                   //客户端连备份服务器具备rsync的用户权限
gid = rsync                                   //客户端连备份服务器具备rsync的用户权限 
use chroot = no                            //程序出现bug会定向为一个空目录,安全方面。
max connections = 2000            //客户端连接数。一般设置大于连接数。
timeout = 600                             //设置客户端连接超时600秒,超时剔除。
pid file = /var/run/rsyncd.pid       //pid进程号
lock file = /var/run/rsync.lock     //锁文件
log file = /var/log/rsyncd.log      //rsync日志文件
ignore errors                            //忽略错误
read only = false                     //只读,true为可读写
list = false                                                   //可以远程列表
hosts allow = 192.168.43.0/24                 //允许什么网段访问
hosts deny = 0.0.0.0/32                            //一般局域网不用,公网可能用,但一般用vpn
auth users = rsync_backup                       //认证用户名,远程连接的用户。
secrets file = /etc/rsync.password             //存放用户和密码的文件,远程用户的密码
#####################################
[backup]                                                   //共享模块调用path服务
comment = backup server by bqhboy 21:40 2018-12-05
path = /backup                                        //共享目录地址

②创建一个虚拟用户:

useradd rysnc –s /sbin/nologin –M

③创建共享目录及属主:
mkdir /backup

chown –R rsync /backup

④给虚拟用户名设置密码并存放文件中: 
echo “rsync_backup:123” >/etc/rsync.password

⑤给服务端虚拟用户密码文件设置权限:
chmod 600 /etc/rsync.password

⑥启动服务:rsync --daemon

查看服务:ss -lntup|grep rsync 
                netstat -lntup|grep rsync
                ps -ef|grep rsync|grep -v grep
                lsof -i :873

⑦加入开机自启动:

echo "rsync --daemon" >>/etc/rc.local
cat /etc/rc.local

在netserver-inotify服务器 (客户端) 上配置rsync如下:

[root@nfs-server ~]# echo 123 >/etc/rsync.password

[root@nfs-server ~]# cat /etc/rsync.password

123

[root@nfs-server ~]# chmod 600 /etc/rsync.password

[root@nfs-server ~]# ll /etc/rsync.password

-rw------- 1 root root 4 12月 10 21:53 /etc/rsync.password

在客户端测试一下是否配置成功:将客户端/data目录下所有文件推送到服务端/backup/目录下

[root@nfs-server ~]# ll /data/

总用量 0

-rw-r--r-- 1 nfsnobody nfsnobody 0 12月  3 21:49 118.txt

-rw-r--r-- 1 nfsnobody nfsnobody 0 12月  2 17:47 c.txt

[root@nfs-server ~]# rsync -avz /data rsync_backup@192.168.43.200::backup --password-file=

/etc/rsync.password

sending incremental file list

data/

data/118.txt

data/c.txt

sent 172 bytes  received 50 bytes  444.00 bytes/sec

total size is 0  speedup is 0.00

[root@nfs-server ~]#

此时我们再热备服务端查看是否推送过来了:

接下来我们yum安装inotify-tools

ll /proc/sys/fs/inotify/   如果该目录有下面三个文件代表系统支持inotify,Linux内核版本为2.6.13开始支持inotify。

max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)

max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数。

max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。

安装inotify

yuminstall inotify-tools -y

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

inotifywait:在被监控的文件或目录上等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用。

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

ll /usr/bin/inotifywait或inotifywatch

inotifywait 用法:

实时监控/data的所有事件(包括文件的访问,写入,修改,删除等)

inotifywait -rm --timefmt '%y/%m/%d %H:%M' --format '%T %w %e %f' /data/

我们执行上面的命令后,再打开一个窗口在/data目录下搞点事情如下:

此时我们发现窗口已监控到搞的事情:

我们可以写一个脚本监控/data/目录变化(增量)情况,并推送至备份服务器上:

#!/bin/bash

inotify=/usr/bin/inotifywait

$inotify -rm --timefmt '%y/%m/%d %H:%M' --format '%T %w %e %f' /data \

|while read file

do

cd / &&

rsync -az ./data rsync_backup@192.168.43.200::backup/ \

--password-file=/etc/rsync.password

done

我们再打开一个窗口搞点测试事情:

我们再从热备服务器上查看一下是否推送过来了:

脚本我们可以从后台启动并添加到开机启动项里:

echo "/bin/sh /server/scripts/backup.sh &" >> /etc/rc.local   //& 表示从后台开始运行该条命令。

inotifywatch 用法:

统计(60s内)/data目录下文件系统的事件

inotifywatch -v -e access -e modify -t 60 -r /data

我们再打开一个窗口搞点事情如下:

关于inotifywait参数说明:

-h,–help
输出帮助信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile 
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-m, –monitor
接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-d, –daemon
跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了–syslog。
-o, –outfile 
输出事情到一个文件而不是标准输出。
-s, –syslog
输出错误信息到系统日志
-r, –recursive
监视一个目录下的所有子目录。
-q, –quiet
指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
–exclude 
正则匹配需要排除的文件,大小写敏感。
–excludei 
正则匹配需要排除的文件,忽略大小写。
-t , –timeout 
设置超时时间,如果为0,则无限期地执行下去。
-e , –event 
指定监视的事件。
-c, –csv
输出csv格式。
–timefmt 
指定时间格式,用于–format选项中的%T格式。
–format 
指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定义的时间格式

关于inotifywatch参数说明:

-h, –help
输出帮助信息
-v, –verbose
输出详细信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile 
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z, –zero
输出表格的行和列,即使元素为空
–exclude 
正则匹配需要排除的文件,大小写敏感。
–excludei 
正则匹配需要排除的文件,忽略大小写。
-r, –recursive
监视一个目录下的所有子目录。
-t , –timeout 
设置超时时间
-e , –event 
只监听指定的事件。
-a , –ascending 
以指定事件升序排列。
-d , –descending 
以指定事件降序排列。

可监听事件:

在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制,根据场景需要优化:

max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。

inotify优点:

1.监控文件系统事件变化,通过同步工具实现实时数据同步。

inotify缺点:

1.并发如果大于200个文件(10-100k),同步就会有延迟。

2.监控到事件后,调用rsync同步是单进程的,而sersync为多进程同步。

高并发数据实时同步方案:

1.inotify(sersync)+rsync  文件级别

2.drbd  文件系统级别

3.第三方软件同步功能:mysql、oracle等同步功能

4.程序双写

inotify+rsync的组合使用简单介绍的更多相关文章

  1. 简单介绍几种Java后台开发常用框架组合

    01 前言 Java框架一直以来都是面试必备的知识点,而掌握Java框架,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能对当前正在开发中的系统有整体的认知,从而更好的熟悉和学习技术,这篇 ...

  2. 第2章 rsync(二):inotify+rsync详细说明和sersync

    本文目录: inotify+rsync 1.1 安装inotify-tools 1.2 inotifywait命令以及事件分析 1.3 inotify应该装在哪里 1.4 inotify+rsync示 ...

  3. rsync(二):inotify+rsync详细说明和sersync

    以下是rsync系列篇: inotify+rsync 如果要实现定时同步数据,可以在客户端将rsync加入定时任务,但是定时任务的同步时间粒度并不能达到实时同步的要求.在Linux kernel 2. ...

  4. 真正的inotify+rsync实时同步 彻底告别同步慢

    真正的inotify+rsync实时同步 彻底告别同步慢       http://www.ttlsa.com/web/let-infotify-rsync-fast/     背景 我们公司在用in ...

  5. inotify+rsync实现实时同步

    第1章 数据实时同步介绍 1.1 什么是实时同步:如何实现实时同步 A. 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 B. 发现目录中数据产生变化,就利用rsync服务推送到 ...

  6. 【转】inotify+rsync实现实时同步

    [转]inotify+rsync实现实时同步 1.1 什么是实时同步:如何实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服 ...

  7. 实时备份工具之inotify+rsync

    1.inotify简介 inotify 是一个从 2.6.13 内核开始,对 Linux 文件系统进行高效率.细粒度.异步地监控机制, 用于通知用户空间程序的文件系统变化.可利用它对用户空间进行安全. ...

  8. 【转载】inotify+rsync实时同步 解决同步慢问题 (转载备记)

    原文地址:http://www.ttlsa.com/web/let-infotify-rsync-fast/ 背景 我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题. ...

  9. [转载]真正的inotify+rsync实时同步 彻底告别同步慢

    原文链接http://www.ttlsa.com/web/let-infotify-rsync-fast/ 背景我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题.但当 ...

随机推荐

  1. Supervisod的使用

    原文链接:http://blog.csdn.net/xyang81/article/details/51555473 Supervisor(http://supervisord.org/)是用Pyth ...

  2. Python面试题目--汇总

    原文链接-https://github.com/taizilongxu/interview_python Python语言特性 1 Python的函数参数传递 2 Python中的元类(metacla ...

  3. mysql密码篇(一)

    1.mysql密码样例.用于密码重置: password: e9297341f5073b9e557239592f4540ba690538058e7761822372942119992d0fsalt: ...

  4. superset----缓存之redis

    一.概述 Superset使用Flask-Cache进行缓存,Flask-Cache支持redis,memcached,simplecache(内存),或本地文件系统)等缓存后端,如果你打算使用mem ...

  5. vue-cli less使用

    1.安装less依赖,npm install less less-loader --save 2.修改webpack.base.conf.js文件,配置loader加载依赖,让其支持外部的less,在 ...

  6. .19-浅析webpack源码之compile流程-rules参数处理(2)

    第一步处理rule为字符串,直接返回一个包装类,很简单看注释就好了. test/include/exclude 然后处理test.include.exclude,如下: if (rule.test | ...

  7. MyCAT入门实践

    1.MyCAT简单介绍 MyCAT是一个彻底开源的,面向企业应用开发的大数据库集群,支持事务.ACID.可以替代MySQL的加强版数据库,是一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Or ...

  8. Web前端基础——JavaScript

    一.脚本程序和 javascrip    Javascript脚 本是嵌套在HTML网页中的程序语言,浏览器带有脚本程序的解释器(脚本引擎).脚本也可以有多种,比如还有vbscript, JScrip ...

  9. Java基础——网络编程(一)

    本文主要记录网络编程的一些基础知识,学了前班部分,对专业术语有些蒙,但是,收货也是很多很多的.观察了自己计算机的进程,查找其他网络地址的IP,对互联网的层次关系有了更深一步的了解.下面多是概念的摘录, ...

  10. CentOS压力测试 ab 命令安装与使用

    Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-util包,安装命令为: y ...