通过rsync+inotify数据的实时备份
web1(nginx) 服务器节点1 192.168.0.9 /web1/wwwrooot
Server 内容发布节点 192.168.0.15 /web/wwwroot
1.安装rsync 与inotify-tools
安装inotify工具inotify-tools
[root@localhost wwwroot]# ll /proc/sys/fs/inotify/ 有下面3项,说明系统默认支持inotify
total 0
-rw-r--r-- 1 root root 0 Aug 31 23:02 max_queued_events
-rw-r--r-- 1 root root 0 Aug 31 23:02 max_user_instances
-rw-r--r-- 1 root root 0 Aug 31 23:02 max_user_watches
下载inotify-tools
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xf inotify-tools-3.14.tar.gz
make make install
安装inotify-tools可以生成以下2个指令
[root@localhost wwwroot]# ll /usr/local/bin/
total 104
-rwxr-xr-x 1 root root 37260 Aug 31 17:01 inotifywait
-rwxr-xr-x 1 root root 35434 Aug 31 17:01 inotifywatch
2.在服务节点上配置rsync(rsync服务端)
web1的节点的rsyncd.conf配置如下:
[root@nginx web1]# cat /etc/rsyncd.conf
uid=nobody
gid=nobody
use chroot=no
max connections=10
strict modes=no
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log
[web1]
path=/web1/wwwroot
comment =web1 file
ignore errors
read only=no
write only=no
hosts allow=192.168.0.1/24
hosts deny=*
list=false
uid=root
gid=root
auth users=web1
secrets file=/etc/web1.pass
echo "/usr/bin/rsync --daemon" >>/etc/rc.local
3.配置内容发布节点
[root@localhost wwwroot]# cat inotifyrsync.sh
#!/bin/bash
host1=192.168.0.9
src=/web/wwwroot/
dst1=web1
user1=web1
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src \
|while read files
do
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user1@$host1::$dst1
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
chmod 755 /web/wwwroot/inotifyrsync.sh
/web/wwwroot/inotifyrsync.sh &
最后执行脚本的时候
老是提示这个错误信息
[root@localhost wwwroot]# /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass /web/wwwroot/ [email protected]::web1
rsync: failed to connect to 192.168.0.9: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(107) [sender=2.6.8]
一时没找到问题的原因:可以ping通192.168.0.9的,也可以ssh上去的
后来才发现是防火墙的问题
是web 节点(rsync服务端)的防火墙没有开启873(rsync的监听端口),后来关掉防火墙就可以实时同步了
一旦rsync客户端的数据有更新,会检测到有更新时会立马同步数据到rsync服务端(web节点)
测试结果
[root@client wwwroot]# touch 4.txt
[root@localhost wwwroot]# sh -x inotifyrsync.sh
+ host1=192.168.0.9
+ src=/web/wwwroot/
+ dst1=web1
+ user1=web1
+ /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib /web/wwwroot/
+ read files
+ /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass /web/wwwroot/ [email protected]::web1
building file list ...
6 files to consider
deleting landy
./
4.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/6)
sent 186 bytes received 44 bytes 460.00 bytes/sec
total size is 373 speedup is 1.62
+ echo '31/08/12 23:43 /web/wwwroot/4.txtATTRIB was rsynced'
+ read files
+ /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass /web/wwwroot/ [email protected]::web1
building file list ...
[root@web1 wwwroot]# ll
total 24
-rw-r--r-- 1 root root 0 Aug 31 2012 1.txt
-rw-r--r-- 1 root root 0 Aug 31 2012 2.txt
-rw-r--r-- 1 root root 0 Aug 31 2012 3.txt
-rw-r--r-- 1 root root 0 Aug 31 2012 4.txt
-rwxr-xr-x 1 root root 373 Aug 31 2012 inotifyrsync.sh
实现了实时的rsync同步