inotify+rsync的组合使用简单介绍
2018-12-17 10:45:44来源:博客园 阅读 ()
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.程序双写
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 树莓派使用 OLED 屏显示图片及文字 2020-06-05
- 附020.Nginx-ingress部署及使用 2020-06-02
- tmux简单使用 2020-05-30
- 操作系统第六次实验报告——使用信号量解决哲学家进餐问题 2020-05-28
- 公有云技术 2020-05-25
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash