首页 Linux基础正文

inotify+rsync备份数据

1.inotify实施准备
大前提 rsync daemon服务配置成功,可以在客户端推送拉取数据,然后才配置inotify服务,linux系统内核大于2.6.13
参考https://www.shnne.com/post/154.html
 
2.开始安装,需要在客户端配置
uname -r 
[root@B data]# ls -l /proc/sys/fs/inotify   #出现下面的内容,说明服务器内核支持inotify
total 0
-rw-r--r-- 1 root root 0 Sep 12 10:41 max_queued_events
-rw-r--r-- 1 root root 0 Sep 12 10:41 max_user_instances
-rw-r--r-- 1 root root 0 Sep 12 10:41 max_user_watches

3.下载inotify源码包
inotify-tools-3.14.tar.gz
inotify-tools下载地址:
http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
将下载的文件放到指定的位置,比如/usr/local/src,方便以后好管理
解压编译安装:进入到源码包路径
tar zxvf inotify-tools-3.14.tar.gz 
ls
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify-tools-3.14
make -j 4 && make install
echo $?
cd ..
ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify
ll /usr/local/inotify

4.创建脚本实时触发inotify进行同步(sh inotify.sh &   #表示后台执行  sh -x inotify.sh 排错使用)

vim inotify.sh 
#!/bin/sh
hostrsync=192.168.1.101
src=/shnne
dst=backup
user=rsync_backup
rsync_passfile=/etc/rsync.password
inotify_home=/usr/local/inotify
#judge
if [ ! -e "$src" ]\
|| [ ! -e "${rsync_passfile}" ]\
|| [ ! -e "${inotify_home}/bin/inotifywait" ]\
|| [ ! -e "/usr/bin/rsync" ];
then
        echo "Check File and Folder"
        exit 9
fi
${inotify_home}/bin/inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e close_write,modify,delete,create,attrib $src \
| while read line
 do
    cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$hostrsync::$dst --password-file=${rsync_passfile} >/dev/null 2>&1
  done
exit 0
     
【此脚本主要是对目录进行实时监控同步,只要该目录下一个文件变动了,它就触发一次】
   
#!/bin/bash
cmd="/usr/local/inotify/bin/inotifywait"
$cmd -mrq --format '%w%f' -e  close_write,delete,create /data \
|while read line
do
        [ ! -e "$line" ] && continue
        rsync -az --delete $line rsync_backup@192.168.1.101::shnne --password-file=/etc/rsync.password
done
    【此脚本主要是对文件进行实时监控同步】
    
    
5.修改inotify默认参数(inotify默认内核参数值太小)
    cat /proc/sys/fs/inotify/*
    
修改参数:
sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
vi /etc/sysctl.conf #添加以下代码
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
:wq! #保存退出

参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find /var/www/html -type d | wc -l 统计,必须保证max_user_watches值大于统计结果
max_user_instances:
每个用户创建inotify实例最大值
【inotify在实际生产环境中,对于50-200KB的文件,inotify的最发并发量为200-300,如果客户端写入速度大于这个量,将会造成短暂的延迟】


6.设置开机自动执行脚本
vi /etc/rc.d/rc.local  #编辑,在最后添加一行
sh /usr/local/inotify/rsync.sh & #设置开机自动在后台运行脚本
:wq!  #保存退出


inotify参数
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e create,move,delete,modify,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件


评论