CentOS使用inotify+rsync实时同步

  inotify是Linux下的一个文件系统事件监控机制(监控某个文件夹的改动),作为dnotify的有效替代。inotify是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要。在单独使用rsync同步时,每次同步它会把全部的文件读取一遍,而inotify+rsync同步是触发式同步。假设被镜像端IP为192.168.1.100,镜像端IP为192.168.1.200。

一、被镜像(同步)端

linux内核2.6.13之后就支持inotify了,确认方法:

ls /proc/sys/fs/inotify  

如果有以下三项就支持:

max_queued_events max_user_instances max_user_watches  
安装rsync
yum install rsync  
安装inotify

地址:https://github.com/rvoicilas/inotify-tools

wget --no-check-certificate https://github.com/rvoicilas/inotify-tools/archive/master.zip  
tar -zxvf inotify-tools-master.zip  
cd inotify-tools-master  
./configure
make  
make install  

默认安装到/usr/local/bin目录。

建立rsync密码文件
vim /root/rsyncpass  

输入密码:123456

设置权限为600
chmod 600 /root/rsyncpass  
创建同步脚本
vim /root/rsync.sh  
#!/bin/bash
src=/mnt/www  
des=backup@192.168.1.200::web  
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
-e modify,delete,create,attrib ${src} \
| while read x
    do
        /usr/bin/rsync -avz --delete --progress $src $des --password-file=/root/rsyncpass &&
        echo "$x was rsynced" >> /var/log/rsync.log
    done

注释:

inotifywait

-m:保持监听事件。

-r:递归查看目录。

-q:打印出事件。

-e modify,delete,create,attrib:监听写入,删除,创建,属性改变事件。

rsync

-a:存档模式,相当于使用-rlptgoD。

-v:详细模式输出。

-z:传输过程中压缩文件。

为脚本加执行权限
chmod +x /root/rsync.sh  

在rc.local加入自启动:

echo "/root/rsync.sh" >> /etc/rc.local  

二、镜像(同步)端

安装rsync:
yum install rsync  
编辑配置文件
vim /etc/rsyncd.conf  
uid = nobody  
gid = nobody  
use chroot = no  
max connections = 10  
pid file = /var/run/rsyncd.pid  
lock file = /var/run/rsync.lock  
log file = /var/log/rsyncd.log  
hosts allow = *

[web]
path = /home/webbak  
read only = no  
list = no  
auth users = backup  
secrets file = /root/rsync.pass  
建立密码文件
vim /root/rsync.pass  

输入:

backup:123456  

格式为“用户名:密码”。

设置权限为600
chmod 600 /root/rsync.pass  
建立保存同步文档的目录
mkdir /home/webbak  
chown nobody:nobody /home/webbak  
后台启动rsync
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
在被镜像端上运行同步脚本
/root/rsync.sh &