inotify+rsync的组合使用简单介绍
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的组合使用简单介绍的更多相关文章
- 简单介绍几种Java后台开发常用框架组合
01 前言 Java框架一直以来都是面试必备的知识点,而掌握Java框架,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能对当前正在开发中的系统有整体的认知,从而更好的熟悉和学习技术,这篇 ...
- 第2章 rsync(二):inotify+rsync详细说明和sersync
本文目录: inotify+rsync 1.1 安装inotify-tools 1.2 inotifywait命令以及事件分析 1.3 inotify应该装在哪里 1.4 inotify+rsync示 ...
- rsync(二):inotify+rsync详细说明和sersync
以下是rsync系列篇: inotify+rsync 如果要实现定时同步数据,可以在客户端将rsync加入定时任务,但是定时任务的同步时间粒度并不能达到实时同步的要求.在Linux kernel 2. ...
- 真正的inotify+rsync实时同步 彻底告别同步慢
真正的inotify+rsync实时同步 彻底告别同步慢 http://www.ttlsa.com/web/let-infotify-rsync-fast/ 背景 我们公司在用in ...
- inotify+rsync实现实时同步
第1章 数据实时同步介绍 1.1 什么是实时同步:如何实现实时同步 A. 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 B. 发现目录中数据产生变化,就利用rsync服务推送到 ...
- 【转】inotify+rsync实现实时同步
[转]inotify+rsync实现实时同步 1.1 什么是实时同步:如何实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服 ...
- 实时备份工具之inotify+rsync
1.inotify简介 inotify 是一个从 2.6.13 内核开始,对 Linux 文件系统进行高效率.细粒度.异步地监控机制, 用于通知用户空间程序的文件系统变化.可利用它对用户空间进行安全. ...
- 【转载】inotify+rsync实时同步 解决同步慢问题 (转载备记)
原文地址:http://www.ttlsa.com/web/let-infotify-rsync-fast/ 背景 我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题. ...
- [转载]真正的inotify+rsync实时同步 彻底告别同步慢
原文链接http://www.ttlsa.com/web/let-infotify-rsync-fast/ 背景我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题.但当 ...
随机推荐
- SpringDataJPA快速入门
访问我的博客 前言 之前在学习 SpringBoot 框架的时候,使用到了 SpringData JPA,但是当时只是简单的查询,没有用到稍微复杂的查询. JPA 的 JPQL 语法规则对于简单的查询 ...
- SpringCloud入门之Maven系统安装及配置
一.Maven 介绍 这个单词中文翻译为“专家”或“内行”.下面将向你介绍 Maven这一跨平台的项目管理工具.作为 Apache 组织中的一个成功的开源项目,Maven 主要服务于基 Java 平台 ...
- 长沙.NET社区之光
奈何万事开头难 迎着改革开放四十年带来的春风,长沙的互联网生态环境以唐胡子俱乐部为首的一众互联网社群讲长沙互联网的环境推上了一个新的台阶.年底,我与有幸一起共事的溪源兄,下班后一起闲聊,觉着长沙的.N ...
- 微信公众号开发笔记1-获取Access Token
获取你的Access Token a)可以采用网址的形式: 用appid和appsecert获得access token,接口为https://api.weixin.qq.com/cgi-bin/to ...
- Python面向对象基础一
公司可能过一两个月就要从深圳搬到东莞松山湖,项目组的现在有的在转Java或其他语言的,问我们要不要转java+hoodap+spark方向,我还是先不转,毕竟之前是从ios转回C#,这现在在转其他的那 ...
- Netty 心跳服务之 IdleStateHandler 源码分析
前言:Netty 提供的心跳介绍 Netty 作为一个网络框架,提供了诸多功能,比如我们之前说的编解码,Netty 准备很多现成的编解码器,同时,Netty 还为我们准备了网络中,非常重要的一个服务- ...
- ASP.NET Core (二):入门
上一篇:ASP.NET Core(一):简介 下一篇:(待续) 英文原版:Getting Started 1. 安装 .NET Core 2. 创建 .NET Core 项目 在命令提示符窗口输入命令 ...
- Oracle11g自带的SQL_developer无法打开
在安装完Oracle Database 11g Release 2数据库,想试一下Oracle自带的SQL DeveloperW工具,在操作系统菜单的所有程序中找到SQL Developer如下所示, ...
- 数据结构与算法--最小生成树之Prim算法
数据结构与算法--最小生成树之Prim算法 加权图是一种为每条边关联一个权值或称为成本的图模型.所谓生成树,是某图的一棵含有全部n个顶点的无环连通子图,它有n - 1条边.最小生成树(MST)是加权图 ...
- SWT table性能改善 -- 使用VirtualTable
在SWT程序中使用table展示数据时,如果数据过多,执行起来会比较慢,不过,我们可以借助VirtualTable来解决这一问题. Eclipse官网中关于VirtualTable的说明见:http: ...