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做实时同步,来解决分布式集群文件一致性的问题.但当 ...
随机推荐
- T-SQL触发器,限制一次只能删除一条数据
/****** Object: Trigger [dbo].[trg_del] Script Date: 01/01/2016 12:58:28 ******/ SET ANSI_NULLS ON G ...
- 文档对象模型DOM(二)
练习: 要求:界面上有个登录按钮,点击登录的时候,界面中弹出一个登录的方框,点击登录方框中的×的,登录方框消失. <!DOCTYPE html> <html> <head ...
- 强势解析eBay BASE模式、去哪儿及蘑菇街分布式架构
互联网行业是大势所趋,从招聘工资水平即可看出,那么如何提升自我技能,满足互联网行业技能要求?需要以目标为导向,进行技能提升,本文主要针对高并发分布式系统设计.架构(数据一致性)做了分析,祝各位早日走上 ...
- java权限控制以及变量的初始化
知识是靠积累的,不断的温习会帮你让你遇到许多问题,解决完这些问题之后,会收获许多,233333333333333. 1.java访问控制符 2.java变量初始化问题 默认构造方法的名字与类名相同,它 ...
- [编程] TCP协议概述
TCP 协议概述 1.TCP提供一种面向连接的.可靠的字节流服务. 2.两个应用程序通过TCP连接交换8bit字节构成的字节流. 3.每个TCP首部都包含源端和目的端的端口号,用于寻找发端和收端应用进 ...
- jQuery.Form.js 异步提交表单使用总结
jQuery.Form.js 是一个用于使用jQuery异步提交表单的插件,它使用方法简单,支持同步和异步两种方式提交. 第一步:引入jQuery与jQuery.Form.js <script ...
- JavaSE Set集合
明确Set集合接口的特点. java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collec ...
- 自己写一个java的mvc框架吧(五)
自己写一个mvc框架吧(五) 给框架添加注解的支持 一段废话 上一章本来是说这一章要写视图处理的部分,但是由于我在测试代码的时候需要频繁的修改配置文件,太麻烦了.所以这一章先把支持注解的功能加上,这样 ...
- hive 中的正则表达式
背景: 前几天拿来apache日志,用hive的正则进行匹配,发现匹配出来的字段算是NULL,但是我用RegexBuddy工具显示能够匹配的到啊!例子如下(我拿正常的apache日志来比较,我的apa ...
- Java基础——collection接口
一.Collection接口的定义 public interfaceCollection<E>extends iterable<E> 从接口的定义中可以发现,此接口使用了泛型 ...