0x01 利用 intify 做实时同步,实现如下适合文件并发较少文件较小的备份场景中,一般并发范围在200-300个小文件,延迟基本是很小的,如果超过这个量就比较吃力了
:
1
| 要备份的目录 + inotify -> inotify会一直监控该目录的变化,只要所监控的目录一有变化,就把新生成的文件或者目录自动推到备份服务器上
|
0x02 准备好环境:
1 2
| RsyncServer 一台已经事先配置好的Rsync服务器 RsyncClient26 再准备一台已经事先配置好的Rsync客户端,因为等会儿就在这台机器上安装inotify,也就是说,只要监控到客户端一有数据更新,就自动往服务端推
|
0x03 开始在rsync客户端上编译安装 inotiy:
1
| # ls -l /proc/sys/fs/inotify/ 首先,查看当前内核是否支持,如果出现以下三个文件则表示支持
|
1 2 3 4 5 6 7 8
| # wget https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz # tar xf inotify-tools-3.13.tar.gz # cd inotify-tools-3.13 # ./configure --prefix=/usr/local/inotify-tools-3.13 && make && make install # echo $? # ln -s /usr/local/inotify-tools-3.13/ /usr/local/inotify # ls -l /usr/local/inotify/ # cd /usr/local/inotify-tools-3.13/bin/
|
1 2 3 4 5 6
| inotifywatch 做事件统计用 inotifywait 主要用来监控指定目录中的事件变化 -m 保持监控 -r 递归监控,监控目录及子目录 -q 安静模式 -e 指定事件
|
监控指定目录下的各类增删改事件
1
| # ./inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,close_write,delete /bakdata/ 同时监控指定目录的增删改事件
|
0x04 最后,再在Rsync客户端上利用下面的小脚本即可帮助我们实现自动往Rsync服务端同步的效果:
1 2 3 4 5 6 7 8
| #!/bin/bash inotify=/usr/local/inotify/bin/inotifywait $inotify -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,close_write,delete,modify,move,attrib /bakdata/ \ |while read file do cd /bakdata/ && rsync -az ./ --delete rsync_backup@192.168.5.4::webbak --password-file=/etc/rsync.password done
|
1 2 3 4 5
| # sh -x inotify.sh 简单调试 # /bin/sh /root/inotify.sh & 确认没问题以后,放到后台执行 # watch -n 1 ls /webdata/ 在服务端每隔一秒观察是否有文件被创建 # echo "/bin/sh /root/inotify.sh &" >> /etc/rc.local 加入自启动 # cat /etc/rc.local
|
0x05 如果实际并发较大,可以适当的把inotify简单优化下:
1 2 3
| # ls -l /proc/sys/fs/inotify/ # echo "50000000" > /proc/sys/fs/inotify/max_user_watches 加大单进程最大的文件监视数量 # echo "50000000" > /proc/sys/fs/inotify/max_queued_events 加大队列可容纳的事件数量
|
小结:
对于要同时同步大量小文件来讲,inotify可能确实有些吃力,后续我们会再说明另一种解决方案,基于lsyncd + rsync
实现的实时同步,待续…