inotify + rsync 快速实现 ‘小剂量’ 实时同步-inotify + rsync 快速实现 '小剂量' 实时同步-华盟网

inotify + rsync 快速实现 ‘小剂量’ 实时同步

华盟学院山东省第二期线下学习计划

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

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

0x02 准备好环境:

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

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

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

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

inotify + rsync 快速实现 '小剂量' 实时同步

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

inotify + rsync 快速实现 '小剂量' 实时同步

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 rsync_backup@192.168.5.4::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实现的实时同步,待续…

www.idc126.com

文章出处:klion's blog

本文由 华盟网 作者:congtou 发表,其版权均为 华盟网 所有,文章内容系作者个人观点,不代表 华盟网 对观点赞同或支持。如需转载,请注明文章来源。

0

发表评论