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 是指 “监听 创建 移动 删除 写入 权限” 事件
<< 上一篇
下一篇 >>
网友留言(0 条)