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. CentOS7 下安装 NFS,Linux/Windows 作为客户端

    目录 一.简介 1. 定义 2. 版本和变化 3. 部署说明 二.服务端 1. 关闭防火墙 2. 安装 nfs 3. 配置说明 4. 配置共享目录 5. 启动服务 6. 确认启动成功 三.Linux ...

  2. Jackson xml json

    public class XMLTest { private static XmlMapper xmlMapper = new XmlMapper(); private static ObjectMa ...

  3. k8s之安装docker-ce17.06

    1.下载rpm包 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ https://download.docker. ...

  4. git第二节----git clone与git tag

    @git 远程克隆(clone)仓库,将远程工程clone到本地仓库:默认克隆远程master 分支 git clone  https://github.com/kaokaozhu/Test.git ...

  5. 微信小程序详细图文教程-10分钟完成微信小程序开发部署发布

    很多朋友都认为微信小程序申请.部署.发布很难,需要很长时间. 实际上,微信和腾讯云同是腾讯产品,已经提供了10分钟(根据准备资源情况,已完成小程序申请认证)完成小程序开发.部署.发布的方式.当然,实现 ...

  6. winform窗体 小程序【登录窗体】【恶搞程序】

    登录窗体 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; ...

  7. textarea 滚动条属性设置

    转载:http://www.cnblogs.com/JensonBin/archive/2011/02/23/1962099.html scrollbar属性.样式详解1.overflow内容溢出时的 ...

  8. Java基础——Servlet(五)

    哈哈哈...学习Servlet学了半个多月,因为中间有比较灰心的时候,有几天是啥都不学了的状态,看了好几部励志的电影.呃~还是得继续吧.本来计划是好好夯实这里的基础,结果在网找到了介绍比较全面的视频, ...

  9. mysql的密码问题

    常见问题 Access denied for user 'root'@'localhost' (using password: YES) 因密码不对而拒绝访问,再jdbc配置中 常常忽略user和密码 ...

  10. Vue之组件使用(二)

    补充一下:之前没提到,这里是一个父子组件通信的方法 如果想要使同一个组件实现不同的效果,那么可以这样做. 把需要封装的组件模板写在template中 <template id="cou ...