Linux 内核从 2.6.13 版本开始提供了 inotify 通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
可以监控某个用户,什么时间,做了什么动作!
使用 rsync 工具与 inotify 机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。
1、查看内核支持inotify和调整
uname -r //inotify从kernel2.6.13开始正式并入内核,开始支持
3.10.0-1160.el7.x86_64
2、查看调控参数
ls /proc/sys/fs/inotify/
max_queued_events #表示监控时间队列 默认16384 可以使用cat命令查看
max_user_instances #表示最多监控实例数 默认128
max_user_watches #表示每个实例最多监控文件数 默认8192
cd /proc/sys/fs/inotify/
cat max_queued_events ;cat max_user_instances ;cat max_user_watches
16384
128
28014
在Linux内核中,默认的Inotify机制提供了三种调控参数,当要监控的目录,文件数比较多的时候或者变化比较频
繁的时候,要加大三个数值
可以直接修改/etc/sysctl.conf配置文件,将管理队列设置为32786,实例数:1024,文件数:9000000(大于监控目标总数即可)
vim /etc/sysctl.conf
…… #末尾添加下面三行
fs.inotify.max_queued_events =32768
fs.inotify.max_user_instances =1024
fs.inotify.max_user_watches =90000000
使其生效
sysctl -p
rsync安装
yum install -y rsync
inotify-tools安装
yum直接安装
yum install -y inotify-tools
编译安装
yum -y install autoconf automake libtool
https://codeload.github.com/inotify-tools/inotify-tools/tar.gz/refs/tags/v3.14
./autogen.sh && \
./configure --prefix=/usr/local/inotify-tools && \
make && \
make install
对环境变量PATH进行追加,写入到配置文件中且让其永久生效。
vim /etc/profile
...
PATH=$PATH:/usr/local/inotify-tools/bin/
source /etc/profile
#使用 inotifywait 输出的监控结果中,每行记录中依次包括目录、事件、文件。据此可以识别变动情况。
使用触发试同步脚本
首先要做好免密码连接
编写脚本
[root@node-1 data]# cat inotify.sh
#!/bin/bash
SRC=/data/mysql/logs/binlog/
DST=root@172.31.1.4:/data/Master-A-binlog-bak/
/usr/local/inotify-tools/bin/inotifywait -mrq -e modify,delete,create,attrib ${SRC}|while read D E F
do
/usr/bin/rsync -avz --delete --inplace --append-verify $SRC $DST
done
#思路:只要检测到变动时间,执行rsync上行同步操作,拉数据
#while read D E F是哪个变量,前面输出的内容是三段,每一段对应的就是后面的D E F
chmod +x inotify.sh ; echo "sh /root/inotify.sh &" >> /etc/rc.local
把这个脚本放在后台运行:
nohup ./inotify.sh &