inotify + rsync 快速实现 '小剂量' 实时同步
2019-10-26 10:34:05 Author: mp.weixin.qq.com(查看原文) 阅读量:81 收藏

0x01 利用 intify 做实时同步,实现如下适合文件并发较少文件较小的备份场景中,一般并发范围在200-300个小文件,延迟基本是很小的,如果超过这个量就比较吃力了:

要备份的目录 + inotify  ->  inotify会一直监控该目录的变化,只要所监控的目录一有变化,就把新生成的文件或者目录自动推到备份服务器上

0x02 准备好环境:

RsyncServer   一台已经事先配置好的Rsync服务器

RsyncClient26 再准备一台已经事先配置好的Rsync客户端,因为等会儿就在这台机器上安装inotify,也就是说,只要监控到客户端一有数据更新,就自动往服务端推

0x03 开始在rsync客户端上编译安装 inotiy:

# ls -l /proc/sys/fs/inotify/ 首先,查看当前内核是否支持,如果出现以下三个文件则表示支持

#wgethttps://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/

inotifywatch 做事件统计用

inotifywait  主要用来监控指定目录中的事件变化

-m 保持监控

-r 递归监控,监控目录及子目录

-q 安静模式

-e 指定事件

监控指定目录下的各类增删改事件

# ./inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,close_write,delete /bakdata/   同时监控指定目录的增删改事件

0x04 最后,再在Rsync客户端上利用下面的小脚本即可帮助我们实现自动往Rsync服务端同步的效果:

# vi inotify.sh

#!/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

# 注意这里,带了--delete选项,也就是说它会先清空再同步,由于是实时同步,最好无差异备份

cd /bakdata/ && rsync -az ./ --delete [email protected]::webbak --password-file=/etc/rsync.password

done

# 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简单优化下:

# 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实现的实时同步,待续…

文章出处:klion's blog

原文链接:

https://klionsec.github.io/2017/07/04/inotify-rsync/


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650457803&idx=3&sn=e01c6235d9d4db17d42343d642ef36e1&chksm=83bba32fb4cc2a39e35741226085cd365e7ac90ad113626488b6f70ab651d705e72c151d51d9#rd
如有侵权请联系:admin#unsafe.sh